最近我必须使用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 命令)。
但是,我仍然有一些未解决的问题,下面列出了我的实际要求:
对于第一点,我发现 -o 选项会调试所有子进程,因此windbg -pn myapp.exe -o
似乎正常工作&gt;
但遗憾的是,当提供 -o 选项时,每次子进程分叉时,windbg都会遇到断点,我必须手动使用 g 命令继续,这不是自动化的。
为此,我找到了 -g 选项,它会忽略初始断点,但它仍会引发一个关键问题。
问题是,当指定 -g 选项时,我的应用程序启动后无法立即执行 -c 选项提供的命令,因为初始断点是忽略,我必须手动提高断点,然后我的命令可以在该命中执行。
我尝试了 -e 选项来提出一些休息时间,但没有结果。
总而言之,我使用 -o 和 -g 选项使windbg捕获所有子进程,并且在创建进程时不会遇到初始断点,但是我无法通过 -c 选项注入命令。
感谢有人可以帮助提供正确的命令行选项组合。
答案 0 :(得分:0)
您可以省略 -g 选项,并将 g 添加到初始命令中,如下所示:
-c 'bp WININET!InternetSetCookieExW "r; dv; kb; .dump /mu cookiedbg.dmp; g"; g'
所以在初始断点和命令执行之后,你恢复执行debuggee进程。
至少它解决了我的问题