如何不通过输出Log,判断某个程序运行到哪个函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何不通过输出Log,判断某个程序运行到哪个函数?相关的知识,希望对你有一定的参考价值。
不能打断点,必须程序一直运行着,并且无法在源代码里加Log
只要给出可行思路就行
能有啥方法实时监听程序某个线程,运行到哪个函数吗
gdb调试正在运行的程序
1、ps aux | grep mxx.exe
查找可执行程序的进程id
2、gdb attach pid
attach可执行程序的进程pid
3、continue/c 或者continue or c
当attach进程时,会停止进程的运行,这时使进程继续运行需要使用continue/c命令
4、其他gdb操作(bt b watch etc..)
现在可以使用其他gdb命令来调试了 参考技术A getcher函数与getch函数作用相同,也是从键盘只接受一个字符,也不用按下回车键就返回到调用函数,但这个字符会被显示出来. 3,具体代码如下: #include<stdio.h> double 。 参考技术B 程序调试除了可以设置断点,你还可以通过attach方式来调试程序,通过附加进程id的方式,可以在gdb中打印堆栈信息。gdb调试正在运行的程序 1、ps aux | grep mxx.exe 查找可执行程序的进程id 2、gdb attach pid attach可执行... 参考技术C 估计你要看寻址寄存器位置和每个函数在代码段得位置来判断了,这个技术估计非常难以搞定,不一定值得你搞 参考技术D hook
探针
gdb
如何判断 openoffice 的哪个应用程序正在运行?
【中文标题】如何判断 openoffice 的哪个应用程序正在运行?【英文标题】:How can I tell which application of openoffice is running? 【发布时间】:2009-09-29 09:16:52 【问题描述】:我想查看进程列表以确定 OpenOffice Calc 是否正在运行或 OpenOffice Writer 是否正在运行。关闭 QuickStart 后,我会得到一个 scalc.exe 和一个 swriter.exe,所以很简单。
但是,当快速启动启动时,我只得到 soffice.bin 和 soffice.exe
有没有办法询问这些进程正在运行哪个应用程序?
【问题讨论】:
【参考方案1】:我认为没有办法检查窗口标题。您必须枚举所有窗口并检查标题是否以“-OpenOffice.org Writer”或“-OpenOffice.org Calc”等结尾。
以下简短示例将检查 Writer 是否正在运行:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
namespace Sample
public class Window
public string Title get; set;
public int Handle get; set;
public string ProcessName get; set;
public class WindowHelper
/// <summary>
/// Win32 API Imports
/// </summary>
[DllImport("user32.dll")]
private static extern int GetWindowText(IntPtr hWnd, StringBuilder title, int size);
[DllImport("user32.dll")]
private static extern int EnumWindows(EnumWindowsProc ewp, int lParam);
[DllImport("user32.dll")]
private static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
public delegate bool EnumWindowsProc(IntPtr hWnd, int lParam);
private List<Window> _openOfficeWindows;
public List<Window> GetOpenOfficeWindows()
_openOfficeWindows = new List<Window>();
EnumWindowsProc ewp = new EnumWindowsProc(EvalWindow);
EnumWindows(ewp, 0);
return _openOfficeWindows;
private bool EvalWindow(IntPtr hWnd, int lParam)
if (!IsWindowVisible(hWnd))
return (true);
uint lpdwProcessId;
StringBuilder title = new StringBuilder(256);
GetWindowThreadProcessId(hWnd, out lpdwProcessId);
GetWindowText(hWnd, title, 256);
Process p = Process.GetProcessById((int)lpdwProcessId);
if (p != null && p.ProcessName.ToLower().Contains("soffice"))
_openOfficeWindows.Add(new Window() Title = title.ToString(), Handle = hWnd.ToInt32(), ProcessName = p.ProcessName );
return (true);
class Program
static void Main(string[] args)
WindowHelper helper = new WindowHelper();
List<Window> openOfficeWindows = helper.GetOpenOfficeWindows();
foreach (var item in openOfficeWindows)
if (item.Title.EndsWith("- OpenOffice.org Writer"))
Console.WriteLine("Writer is running");
【讨论】:
以上是关于如何不通过输出Log,判断某个程序运行到哪个函数?的主要内容,如果未能解决你的问题,请参考以下文章