怎么能让我的程序在崩溃时生成dump文件

怎么能让我的程序在崩溃时生成dump文件,第1张

调试Dump文件很简单,双击自动打开VC然后F7运行。
但是中间要注意很多事情。
1。Dump文件放在哪里
Dump文件不用非要放在你编译出来的位置,你完全可以建立一个新的文件夹来放它。
2。要恢复当时的现场
可能你要问,怎么可能,这个dump文件可是用户发给我的,我不可能去用户家里调试吧?
这个恢复现场可不是指的非要到那台机器上去,而是要把产生dump文件对应的二进制文件拿到。
但是恢复现场需要所有的二进制文件都要对应,你一定要有导致用户崩溃的那些Exe和Dll。既然是你发布的程序,Exe文件当然你会有。所以这里只考虑Dll就行了。
Dump文件中记录了所有dll文件的版本号和时间戳,所以你一定可以同过某种途径拿到它。如果你能从用户那里拿到最好,如果不方便,用户不可能用的是我们平常不常用的 *** 作系统,所以找个有对应系统的机器一般都会有。但是记住不光是文件名称要一致,还要核对版本和时间戳,如果不同一样没有办法用。

wpf生成dump具体方法介绍如下:
现在我准备创建一个简单的 winform 程序,在 button 事件中故意让主线程sleep造成程序假死,参考代码如下:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ThreadSleep(1000 10); MessageBoxShow("clicked me!"); } }

接下来启动 cmd 窗口,输入:
C:\Windows\system32>procdump -ma -h -w WindowsFormsApp1exe E:\net5\hungwindowdmp ProcDump v100 - Sysinternals process dump utility Copyright (C) 2009-2020 Mark Russinovich and Andrew Richards Sysinternals - >一般情况下,通过jstack输出的线程信息主要包括:jvm自身线程、用户线程等。其中jvm线程会在jvm启动时就会存在。对于用户线程则是在用户访问时才会生成。
l jvm线程:
在线程中,有一些 JVM内部的后台线程,来执行譬如垃圾回收,或者低内存的检测等等任务,这些线程往往在JVM初始化的时候就存在,如下所示:
1 "Attach Listener" daemon prio=10 tid=0x0000000052fb8000 nid=0xb8f waiting on condition [0x0000000000000000]
2
3 javalangThreadState: RUNNABLE
4
5
6
7 Locked ownable synchronizers:
8
9 - None
10

手动coredump状态:连接gdb-gcorepid终端发送signal终止process:kill-ssignalpid自然发送能产生coredump的signal,前文有记录,但是有时一次还杀不掉processsignal可以被忽视。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/10840466.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存