2

最近我不得不用windbg调试一个应用程序,在阅读了WinDbg Command-Line Options之后,我找到了一些解决方案,但是没有一个可以在一次运行中解决所有这些问题。

Ganerally,我使​​用-c选项在启动时设置断点,使用-logo选项将日志记录内容输出到静态文件,使用-pn选项启动我的应用程序,所以最初我的命令如下:

windbg -pn myapp.exe -logo "log.txt" -c 'bp WININET!InternetSetCookieExW "r; dv; kb; .dump /mu cookiedbg.dmp; g"'

此命令将启动myapp.exe ,在WININET!InternetSetCookieExW WIN32 API处创建一个断点,当此断点被命中时,它将信息转储到log.txt然后继续(通过g命令)。

但是,我还有一些问题没有解决,下面列出我的实际需求:

  1. 由于我的应用程序会创建子进程,windbg 应该能够调试主进程和所有子进程
  2. 一切都应该是自动化的,所以 windbg 应该在我的应用程序启动时创建一个断点,在断点上记录一些信息

对于第一点,我发现-o选项调试所有子进程,所以windbg -pn myapp.exe -o似乎工作>

但不幸的是,当给出-o选项时,每次分叉子进程时,windbg 都会遇到断点,我必须手动使用g命令继续,这不是自动的。

为此,我找到了-g选项,它会忽略初始断点,但它仍然会引发一个关键问题。

问题是,当指定-g选项时,我的应用程序启动后无法立即执行-c选项提供的命令,因为初始断点被忽略,我必须手动提出断点,然后我的命令可以在那一击。

我尝试了-e选项来引发一些中断事件,但没有得到任何结果。

综上所述,我使用-o-g选项使 windbg 捕获所有子进程,并且在创建进程时不命中初始断点,但随后我无法通过-c选项注入命令。

感谢有人可以帮助提供正确的命令行选项组合。

4

1 回答 1

0

您可以省略-g选项并将g添加到初始命令中,如下所示:

-c 'bp WININET!InternetSetCookieExW "r; dv; kb; .dump /mu cookiedbg.dmp; g"; g'

因此,在初始断点和命令执行之后,您将恢复被调试进程的执行。

至少它解决了我的问题

于 2014-03-25T14:28:59.057 回答