我有一个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