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

时间:2013-02-22 20:12:19

标签: windows windbg

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

但我想自动化这个。有没有办法可以检索堆栈跟踪并将其写入文本文件而无需手动使用GUI?

2 个答案:

答案 0 :(得分:2)

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

.logopen c:\dump\myLog.txt

这会将所有内容转储到此位置,请拨打.logclose以关闭日志,以便在一行中显示:

.logopen c:\dump\myLog.txt; k; .logclose

其次如果你真的不想使用gui,那就是windbg,cdb的命令行版本。您可以使用如下命令执行此操作:

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

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

答案 1 :(得分:0)

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

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