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

windbg命令行捕获子进程并创建断点,windbg,Windbg,最近我不得不用windbg调试一个应用程序,在阅读之后,我找到了两个问题的一些解决方案,但没有一个可以在一次运行中解决所有这些问题 一般来说,我使用-c选项在启动时设置断点,使用-logo选项将日志内容输出到静态文件,使用-pn选项启动我的应用程序,因此最初我的命令如下: windbg -pn myapp.exe -logo "log.txt" -c 'bp WININET!InternetSetCookieExW "r; dv; kb; .dump /mu cookiedbg.dmp; g"'

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

一般来说,我使用-c选项在启动时设置断点,使用-logo选项将日志内容输出到静态文件,使用-pn选项启动我的应用程序,因此最初我的命令如下:

windbg -pn myapp.exe -logo "log.txt" -c 'bp WININET!InternetSetCookieExW "r; dv; kb; .dump /mu cookiedbg.dmp; g"'
-c 'bp WININET!InternetSetCookieExW "r; dv; kb; .dump /mu cookiedbg.dmp; g"; g'
此命令将启动myapp.exe,在WININET创建断点!InternetSetCookieXwWIN32 API,当命中此断点时,它将信息转储到log.txt,然后继续(通过g命令)

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

  • 由于我的应用程序将创建子进程,windbg应该能够调试主进程和所有子进程
  • 一切都应该自动化,所以windbg应该在我的应用程序启动时设置一个断点,在断点上记录一些信息
  • 对于1st点,我发现-o选项会调试所有的childprocess,因此
    windbg-pn myapp.exe-o
    似乎有效>

    但不幸的是,当给出一个-o选项时,每当子进程被分叉时,windbg碰到一个断点,我必须手动使用g命令来继续,这不是自动的

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

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

    我尝试了-e选项来为休息时间引发一些事件,但没有结果

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


    如果有人能帮助您提供命令行选项的正确组合,请多谢。

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

    windbg -pn myapp.exe -logo "log.txt" -c 'bp WININET!InternetSetCookieExW "r; dv; kb; .dump /mu cookiedbg.dmp; g"'
    
    -c 'bp WININET!InternetSetCookieExW "r; dv; kb; .dump /mu cookiedbg.dmp; g"; g'
    
    因此,在初始断点和命令执行之后,恢复调试对象进程的执行


    至少它解决了我的问题

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