在没有安装Visual Studio的情况下获得Windows崩溃的堆栈跟踪?(c++)



我有一个c++应用程序,它在世界另一端的某人的计算机上崩溃了。我没有办法模拟它或得到相同的电脑。这个人不是开发人员,所以我不能要求他安装Visual Studio之类的东西。我有相当深的调试日志,但他们没有发现任何可用的。

是否有一个工具,可以生成应用程序在崩溃时的堆栈跟踪?这样的东西在OSX中是可用的,但似乎Windows没有。

您可以使用procdump。可以将其设置为调试器,以自动创建崩溃进程的转储。

Procdump是Sysinternal工具的一部分,可以在以下位置找到:

http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx

相关开关:

为挂起的应用程序创建转储:

为名为'hang.exe'的进程写一个迷你转储,当其中一个是Windows超过5秒无响应:

C:>procdump -h hang.exe hungwindow.dmp

自动创建应用程序崩溃转储:

注册为即时(AeDebug)调试器。进行完整转储c: 转储。

C:>procdump -ma -i c:dumps

创建一个pid转储:

 C:>procdump <PID>

您可以使用windbg来读取转储文件:

使用google的lib来为msvc调试miniidump。CrashRpt

由于google似乎在这里领先于所有"窗口的堆栈跟踪",您也可以使用"休眠"或"非常休眠"实用程序获得正在运行的进程的堆栈跟踪。

另一个选项:在gdb.exe中运行,按ctrl+c

您的应用程序可以尝试自己处理崩溃并写出诊断。Windows上的关键字是"结构化异常处理";https://learn.microsoft.com/en-us/windows/win32/debug/structured-exception-handling

应用程序可以自己捕获堆栈跟踪:https://learn.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-stackwalk

最新更新