我有一个C++应用程序,它在世界另一端的某个人的计算机上崩溃了。我没办法模拟或者用同一台电脑。这个人不是开发人员,所以我不能真的要求他安装Visual Studio或其他东西。我有相当深的调试日志,但它们没有显示任何有用的东西。有没有一种工具,可以生成应用程序崩溃时的堆栈跟踪?这样的东西是可用的OSX,但似乎Windows没有它。
flseospp1#
您可以使用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:\dumps中进行完全转储。
C:\>procdump -ma -i c:\dumps
为pid创建转储:
C:\>procdump <PID>
您可以使用windbg读取转储文件:Getting started with dump file analysis
sulc1iza2#
使用google的lib为msvc调试minidump。CrashRpt
pb3skfrl3#
由于google似乎在所有“windows堆栈跟踪”方面处于领先地位,你也可以使用“sleep”或“very sleepy”工具来获取正在运行的进程的堆栈跟踪。另一种选择:在gdb.exe中运行它,按ctrl+c
6jjcrrmo4#
您的应用程序可以尝试自己处理崩溃并写出诊断。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或者写一个小转储。
4条答案
按热度按时间flseospp1#
您可以使用procdump。它可以被设置为一个调试器,以自动创建崩溃进程的转储。
Procdump是Sysinternal工具的一部分,可以在以下网址找到:
http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx
相关开关:
为挂起的应用程序创建转储:
当一个名为'hang.exe'的进程的Windows无响应超过5秒时,为该进程编写一个迷你转储:
自动为崩溃的应用程序创建转储:
注册为实时(AeDebug)调试器。在c:\dumps中进行完全转储。
为pid创建转储:
您可以使用windbg读取转储文件:Getting started with dump file analysis
sulc1iza2#
使用google的lib为msvc调试minidump。CrashRpt
pb3skfrl3#
由于google似乎在所有“windows堆栈跟踪”方面处于领先地位,你也可以使用“sleep”或“very sleepy”工具来获取正在运行的进程的堆栈跟踪。
另一种选择:在gdb.exe中运行它,按ctrl+c
6jjcrrmo4#
您的应用程序可以尝试自己处理崩溃并写出诊断。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
或者写一个小转储。