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

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

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

首先,你可以使用.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的符号服务器,重新加载,转储调用堆栈并退出并分离。

假设你没有试图进一步调试,只是试图获得堆栈跟踪,然后调用这个函数,并将输出写入文件。

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