如何在不使用GUI的情况下在windbg中获得暂停指令后的堆栈跟踪



通常,我在C++代码中插入一个assert(0);,启动Windbg,按F5,输入k,然后得到一个堆栈跟踪。然后我必须通过鼠标复制粘贴它并退出。

但我想把它自动化。有没有什么方法可以在不必手动使用GUI的情况下检索堆栈并将其写入文本文件?

首先,您可以像一样使用.logopen将gui的输出写入文本文件

.logopen c:dumpmyLog.txt

这将把所有东西都转储到这个位置,调用.logclose关闭日志,所以只需一行:

.logopen c:dumpmyLog.txt; k; .logclose

第二,如果你真的不想使用gui,还有命令行版本的windbg,cdb。您可以使用以下命令执行此操作:

cdb -log c:datamyLog.txt -lines -pn myApp.exe -c ".symfix;.reload;k;qd"

这将打开调用堆栈的行号,输出到日志,使用名称附加到进程,然后用双引号执行命令,修复MS的符号服务器,重新加载、转储调用堆栈,并退出和分离。

假设您没有试图进一步调试它,只是试图获得堆栈跟踪,那么只需调用此函数并将输出写入文件即可。

CaptureStackBackTrace(http://msdn.microsoft.com/en-us/library/bb204633(VS.85).aspx?ppud=4)

最新更新