【问题标题】:Can I automate Windbg to attach to a process and set breakpoints?我可以自动化 Windbg 以附加到进程并设置断点吗?
【发布时间】:2014-10-16 01:16:40
【问题描述】:

我正在调试一个 Windows 进程,如果执行停止几毫秒就会崩溃。 (我不知道具体有多少,但肯定比我的反射恢复过程所用的时间要少。)

我知道我可以通过在命令提示符下输入 windbg -p PID 来启动一个 Windbg 会话,这会调出 GUI。但是我可以通过命令提示符进一步向它传递windbg命令吗,例如bm *foo!bar* ".frame;gc";g"

因为如果我可以将这些命令传递给它,我可以将它们写在.bat 文件中并运行它。至少不会因为输入(甚至复制粘贴)命令而造成延迟。

【问题讨论】:

    标签: windbg


    【解决方案1】:

    使用-c参数传递它们:

    windbg -p PID -c "bm *foo!bar* .frame;gc;g"
    

    根据帮助(通过运行windbg /?找到):

    -c“命令”

    指定在启动时运行的初始调试器命令。此命令必须用引号引起来。多个命令可以用分号分隔。 (如果您的命令列表很长,将它们放在脚本中,然后将 -c 选项与 $

    如果您正在启动调试客户端,则此命令必须用于调试服务器。不允许使用特定于客户端的命令,例如 .lsrcpath。

    您可能需要使用引号...

    编辑:基于this answer,您最好将命令放入脚本文件以处理引号:

    script.txt(我想这就是你想要的):

    bm *foo!bar* ".frame;gc"
    g
    

    然后在你的批处理文件中:

    windbg -p PID -c "$<full_path_to_script_txt"
    

    【讨论】:

    • 将script.txt文件放在哪里,因为错误提示windbg无法找到它。
    • 任何地方,只要它所在的目录是你启动Windbg时的工作目录。
    • 把它和windbg.exe放在同一个目录下会这样吗?
    • 我输入的命令是:windbg -p 19684 -c "$$&lt;script.txt",对应的结果是this。注意:这是windbg命令窗口内,已附加上述过程但脚本文件没有执行。
    • 对于单个$,即windbg -p 19684 -c "$&lt;script.txt",结果为this。再次附加了该过程,但脚本没有执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多