windbg命令行捕获子进程并创建断点

时间:2012-10-29 03:32:00

标签: windbg

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

Ganerally,我使​​用 -c 选项在启动时创建断点,使用 -logo 选项将日志记录内容输出到静态文件,使用 -pn < / strong>启动我的应用程序的选项,所以最初我有这样的命令:

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处创建断点,当此断点被点击时,它会将信息转储到日志。 txt 然后继续(通过 g 命令)。

但是,我仍然有一些未解决的问题,下面列出了我的实际要求:

  1. 由于我的应用程序会创建子进程,因此windbg应该能够调试主进程和所有子进程
  2. 所有内容都应该自动,因此windbg应该在我的应用启动时创建一个断点,在断点上记录一些信息
  3. 对于第一点,我发现 -o 选项会调试所有子进程,因此windbg -pn myapp.exe -o似乎正常工作&gt;

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

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

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

    我尝试了 -e 选项来提出一些休息时间,但没有结果。

    总而言之,我使用 -o -g 选项使windbg捕获所有子进程,并且在创建进程时不会遇到初始断点,但是我无法通过 -c 选项注入命令。

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

1 个答案:

答案 0 :(得分:0)

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

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

所以在初始断点和命令执行之后,你恢复执行debuggee进程。

至少它解决了我的问题