通常,我在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)