程序闪退有什么好的调试方法?

twtyypmb123 2016-11-25 09:13:56
winform程序在运行过程中会无故闪退,一般出现异常都会有.net的异常提示框,而我遇到的情况没有提示框,直接关闭,在查看日志的时候发现可执行程序下面有一些和程序同名的dmp文件,我想请问一下 1.这些dmp文件是不是崩溃时创建的? 2.可不可以利用这些dmp文件还原程序当时的运行状况 3.怎么得知程序是正常关闭还是异常退出?有哪些情况发生会导致闪退?如何捕获?然后生成日志? 还望各路大神指点一下,谢谢
...全文
1012 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_36278078 2016-12-12
  • 打赏
  • 举报
回复
勾选use unsafecode 有可能解决
饮水思源09 2016-12-07
  • 打赏
  • 举报
回复
不同的平台(winform、wpf、silverlight)有不同的捕获顶层异常的方法,例如 Applicaiton 的 DispatcherUnhandledException 事件,或者 AppDomain.CurrentDomain 的 UnhandledException 事件等等。首先看看你有没有在最顶层捕获事件,并且在这些地方记录日志。 当然,这些都应该条件编译、在 Release 版本中才有这些代码,而在 Debug 版本中不应该拦截异常(应该让调试器捕获异常)。
njit_77 2016-12-06
  • 打赏
  • 举报
回复
twtyypmb123 2016-11-29
  • 打赏
  • 举报
回复
引用 4 楼 dongxinxi 的回复:
http://www.cnblogs.com/killmyday/archive/2010/09/05/1818533.html 可能是非SEH异常导致的,静态字段(静态属性没事)初始化失败,类型(所在的DLL)加载失败,也是一运行就报错退出,不过这种可以捕获
加了HandleProcessCorruptedStateExceptions也没用,照样捕捉不了
  • 打赏
  • 举报
回复
dmp 非常低级。 你还是从高层次的源代码去考虑问题吧!
  • 打赏
  • 举报
回复
不同的平台(winform、wpf、silverlight)有不同的捕获顶层异常的方法,例如 Applicaiton 的 DispatcherUnhandledException 事件,或者 AppDomain.CurrentDomain 的 UnhandledException 事件等等。首先看看你有没有在最顶层捕获事件,并且在这些地方记录日志。 当然,这些都应该条件编译、在 Release 版本中才有这些代码,而在 Debug 版本中不应该拦截异常(应该让调试器捕获异常)。 如果异常非常严重,这些地方可能根本不能捕获异常。那么你可以通过修改日志的范围来“逼近”错误语句。 无论如何,你需要先知道那条语句、什么数据状态下出错。如果不知道具体出错的语句,再说“调试”就是瞎子摸象了。
  • 打赏
  • 举报
回复
http://www.cnblogs.com/killmyday/archive/2010/09/05/1818533.html 可能是非SEH异常导致的,静态字段(静态属性没事)初始化失败,类型(所在的DLL)加载失败,也是一运行就报错退出,不过这种可以捕获
twtyypmb123 2016-11-25
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
不同的平台(winform、wpf、silverlight)有不同的捕获顶层异常的方法,例如 Applicaiton 的 DispatcherUnhandledException 事件,或者 AppDomain.CurrentDomain 的 UnhandledException 事件等等。首先看看你有没有在最顶层捕获事件,并且在这些地方记录日志。 当然,这些都应该条件编译、在 Release 版本中才有这些代码,而在 Debug 版本中不应该拦截异常(应该让调试器捕获异常)。 如果异常非常严重,这些地方可能根本不能捕获异常。那么你可以通过修改日志的范围来“逼近”错误语句。 无论如何,你需要先知道那条语句、什么数据状态下出错。如果不知道具体出错的语句,再说“调试”就是瞎子摸象了。
有些错误不好捕获,特别是调用其他dll的时候,在调试下vs能监测到一个FatalExecutionEngineError,然后报错,在程序真正运行时就直接就闪退了,根本无法正确捕获,例如下面这个例子

Log("Invoke start");
Foo();//dll中写的方法
Log("Invoke end");
在vs中运行到Foo时报错FatalExecutionEngineError,程序无法继续,但是正常运行的时候,执行到这几行的时候程序闪退,而且奇葩的是日志里面有Invoke end,像这种情况怎么办?

110,555

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧