【发布时间】: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 命令)。
但是,我还有一些问题没有解决,下面列出我的实际需求:
- 由于我的应用会创建子进程,windbg 应该能够调试主进程和所有子进程
- 一切都应该自动化,所以 windbg 应该在我的应用启动时设置一个断点,并在断点上记录一些信息
对于第一点,我发现 -o 选项可以调试所有子进程,所以windbg -pn myapp.exe -o 似乎有效>
但不幸的是,当给出 -o 选项时,每次分叉子进程时,windbg 都会遇到断点,我必须手动使用 g 命令才能继续,这不是自动化的。
为此,我随后找到了 -g 选项,该选项将忽略初始断点,但仍会引发严重问题。
问题是,当指定 -g 选项时,我的应用程序启动后无法立即执行 -c 选项提供的命令,因为初始断点是忽略,我必须手动设置断点,然后我的命令可以在该命中时执行。
我尝试了 -e 选项来引发一些要中断的事件,但没有结果。
总结一下,我使用 -o 和 -g 选项让windbg捕获所有子进程并且在创建进程时不命中初始断点,但随后我无法通过 -c 选项注入命令。
感谢有人可以帮助提供正确的命令行选项组合。
【问题讨论】:
-
如果您事先知道子进程集,那么您可以使用图像文件执行选项工具来自动调试它们。这可以用来代替使用一个 windbg 实例来调试所有子进程。
标签: windbg