通常我在我的 C++ 代码中插入一个assert(0);
,启动 Windbg,按 F5,回车k
,我得到一个堆栈跟踪。然后我必须通过鼠标复制粘贴它并退出。
但我想自动化这个。有什么方法可以检索堆栈跟踪并将其写入文本文件而无需手动使用 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/en-us/library/bb204633(VS.85).aspx?ppud=4 )