【问题标题】:windbg command line to capture child process and make a breakpointwindbg 命令行捕获子进程并下断点
【发布时间】:2012-10-29 03:32:00
【问题描述】:

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

一般来说,我使用 -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 选项注入命令。

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

【问题讨论】:

  • 如果您事先知道子进程集,那么您可以使用图像文件执行选项工具来自动调试它们。这可以用来代替使用一个 windbg 实例来调试所有子进程。

标签: windbg


【解决方案1】:

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

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

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

至少解决了我的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 2011-11-21
    • 2022-01-18
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多