Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否有一种方法可以让客户在“紧急”期间强制崩溃(然后将生成一个小型转储);“长”;Windows API调用?_C++_Winapi_Mfc - Fatal编程技术网

C++ 是否有一种方法可以让客户在“紧急”期间强制崩溃(然后将生成一个小型转储);“长”;Windows API调用?

C++ 是否有一种方法可以让客户在“紧急”期间强制崩溃(然后将生成一个小型转储);“长”;Windows API调用?,c++,winapi,mfc,C++,Winapi,Mfc,我们的应用程序“挂起”在一个客户站点(不是真的,它只是对一些Windows网络API调用的一个很长的调用,其中有一个禁用的VPN适配器,需要超时-分钟?)。我们不能复制它(我们没有他的VPN设置),但客户可以轻松地复制它 我们的应用程序崩溃时会生成迷你转储(*.dmp)文件有没有办法让最终客户立即产生崩溃(特别是在这个漫长的API调用期间),这样我们就可以看到它挂在哪里了? 我尝试过通过任务管理器“结束流程”,但这必须“优雅地”关闭应用程序,因为使用任务管理器不会生成.dmp文件 这是一个MFC

我们的应用程序“挂起”在一个客户站点(不是真的,它只是对一些Windows网络API调用的一个很长的调用,其中有一个禁用的VPN适配器,需要超时-分钟?)。我们不能复制它(我们没有他的VPN设置),但客户可以轻松地复制它

我们的应用程序崩溃时会生成迷你转储(*.dmp)文件有没有办法让最终客户立即产生崩溃(特别是在这个漫长的API调用期间),这样我们就可以看到它挂在哪里了?

我尝试过通过任务管理器“结束流程”,但这必须“优雅地”关闭应用程序,因为使用任务管理器不会生成.dmp文件


这是一个MFC C++应用程序的发布版本。

< P>可以使用WEBBG创建MIDIDUMP:


这将告诉你它在哪里,当你打破。显然,它不会使用您的处理程序来创建转储,但是如果您只是担心挂起位置,这就足够了。Visual studio具有从正在运行的进程创建转储的类似功能。

您可以使用WinDbg创建小型转储:


这将告诉你它在哪里,当你打破。显然,它不会使用您的处理程序来创建转储,但是如果您只是担心挂起位置,这就足够了。Visual studio具有类似的功能,可以从正在运行的进程创建转储。

生成转储文件不需要崩溃。只需打开任务管理器,转到“进程”选项卡,右键单击相应的进程并选择“创建转储文件”:

将转储写入磁盘后,任务管理器将弹出一个对话框,通知用户转储文件的位置。默认情况下,它是%temp%\.DMP:


对于32位应用程序,要创建32位转储文件,请从Windows的SysWOW64文件夹运行32位版本的任务管理器:例如c:\Windows\SysWOW64\Taskmgr.exe

生成转储文件无需崩溃。只需打开任务管理器,转到“进程”选项卡,右键单击相应的进程并选择“创建转储文件”:

将转储写入磁盘后,任务管理器将弹出一个对话框,通知用户转储文件的位置。默认情况下,它是%temp%\.DMP:


对于32位应用程序,要创建32位转储文件,请从Windows的SysWOW64文件夹运行32位版本的任务管理器:例如c:\Windows\SysWOW64\Taskmgr.exe

如果要测试崩溃报告程序,这将引发很好的访问冲突:

int *p = 0x0;
*p = 0xbadf00d;

如果您想测试crash reporter,这将引发一个不错的访问冲突:

int *p = 0x0;
*p = 0xbadf00d;

我在我的应用程序中尝试了3个对话级别。我得到了转储文件,但是所有线程堆栈帧都非常浅(8深),它们看起来都一样,包括主线程:>wow64cpu.dll!0000000074842e09()[下面的帧可能不正确和/或丢失,没有为wow64cpu.dll加载符号]wow64cpu.dll!0000000074842bf1()wow64.dll!00000000748bd286()wow64.dll!00000000748bc69e()ntdll.dll!00000000774cd447()ntdll.dll!000000007747c34e()这是一个32位MFC应用程序,在Win7 64位上运行,因为您没有加载符号(“没有为wow64cpu.dll加载符号”),堆栈帧不正确或缺失。有关如何设置调试环境的详细说明,请参阅。我有VS2008。我将所有的.PDB文件复制到与原始.EXE文件相同的文件夹中,并将.DMP文件从我的临时文件夹复制到此处。当我在.DMP文件上运行调试器时,它说它仍然找不到符号。我试图遵循VS2008工具->选项->调试->符号,并将该文件夹添加到eh“位置”列表中,但它不起作用。然后,我尝试在“运行”了.DMP之后加载符号,方法是指定与“缓存符号”列表相同的文件夹,并点击“使用上述位置加载符号”按钮,但它仍然无法解析符号。@franji1您关于如何创建转储文件的问题已得到回答。如果你需要如何使用它的帮助,你应该发布一个新问题,而不是在评论中寻求帮助。我在我的应用程序中尝试了3个对话级别。我得到了转储文件,但是所有线程堆栈帧都非常浅(8深),它们看起来都一样,包括主线程:>wow64cpu.dll!0000000074842e09()[下面的帧可能不正确和/或丢失,没有为wow64cpu.dll加载符号]wow64cpu.dll!0000000074842bf1()wow64.dll!00000000748bd286()wow64.dll!00000000748bc69e()ntdll.dll!00000000774cd447()ntdll.dll!000000007747c34e()这是一个32位MFC应用程序,在Win7 64位上运行,因为您没有加载符号(“没有为wow64cpu.dll加载符号”),堆栈帧不正确或缺失。有关如何设置调试环境的详细说明,请参阅。我有VS2008。我将所有的.PDB文件复制到与原始.EXE文件相同的文件夹中,并将.DMP文件从我的临时文件夹复制到此处。当我在.DMP文件上运行调试器时,它说它仍然找不到符号。我试图遵循VS2008工具->选项->调试->符号,并将该文件夹添加到eh“位置”列表中,但它不起作用。然后,我尝试在“运行”了.DMP之后加载符号,方法是指定与“缓存符号”列表相同的文件夹,并点击“使用上述位置加载符号”按钮,但它仍然无法解析符号。@franji1您关于如何创建转储文件的问题已得到回答。如果你需要关于如何使用的帮助,你应该发布一个新问题,而不是在评论中寻求帮助。