当前位置:  开发笔记 > 编程语言 > 正文

程序终止后抛出异常(遇到的错误)

如何解决《程序终止后抛出异常(遇到的错误)》经验,为你挑选了1个好方法。

我有一个应用程序,似乎只有在程序关闭后才会抛出异常.这是非常不一致的.(我们都知道不一致的bug有多么有趣......)

我的猜测是在清理过程中出现错误.但是这些内存读/写错误似乎表明我的"不安全"代码使用(指针?)有问题.

我感兴趣的是调试这些情况的最佳方法是什么?
你如何调试已经关闭的程序?
我正在寻找一个解决更大问题的起点.

这些错误似乎以多种方式呈现(一些运行时,一些调试):

1: .NET-BroadcastEventWindow.2.0.0.0.378734a.0:  Application.exe - Application Error
The instruction at "0x03b4eddb" referenced memory at "0x00000004". The memory could not be "written". 2: Application.vshost.exe - Application Error
The instruction at "0x0450eddb" referenced memory at "0x00000004". The memory could not be "written". 3: Application.vshost.exe - Application Error
The instruction at "0x7c911669" referenced memory at "0x00000000". The memory could not be "read". 4: Application.vshost.exe - Application Error
The instruction at "0x7c910ed4" referenced memory at "0xfffffff8". The memory could not be "read".

Miroslav Zad.. 6

我使用AcrobarReader COM组件时遇到此问题.在应用程序退出后不时出现"Application.vshost.exe - Application Error""无法读取内存".GC.Collect()和WaitForPendingFinalizers()没有帮助.

我的google-fu带我到这个页面:http://support.microsoft.com/kb/826220.我为我的案子修改了方法3.

使用进程资源管理器我发现AcroPDF.dll没有在Main函数的最后一行之前发布.所以,这里是API调用.

DLLImports(DLLImport在System.Runtime.InteropServices命名空间中):

 _
Public Overloads Shared Function GetModuleHandle(ByVal sLibName As String) As IntPtr
End Function

 _
Public Overloads Shared Function FreeLibrary(ByVal hMod As IntPtr) As Integer
End Function

然后在申请退出之前:

Dim hOwcHandle As IntPtr = GetModuleHandle("AcroPDF.dll")
If Not hOwcHandle.Equals(IntPtr.Zero) Then
    FreeLibrary(hOwcHandle)
    Debug.WriteLine("AcroPDF.dll freed")
End If

可以针对任何其他不良行为的dll修改此过程.我只是希望它不会引入任何新的错误.



1> Miroslav Zad..:

我使用AcrobarReader COM组件时遇到此问题.在应用程序退出后不时出现"Application.vshost.exe - Application Error""无法读取内存".GC.Collect()和WaitForPendingFinalizers()没有帮助.

我的google-fu带我到这个页面:http://support.microsoft.com/kb/826220.我为我的案子修改了方法3.

使用进程资源管理器我发现AcroPDF.dll没有在Main函数的最后一行之前发布.所以,这里是API调用.

DLLImports(DLLImport在System.Runtime.InteropServices命名空间中):

 _
Public Overloads Shared Function GetModuleHandle(ByVal sLibName As String) As IntPtr
End Function

 _
Public Overloads Shared Function FreeLibrary(ByVal hMod As IntPtr) As Integer
End Function

然后在申请退出之前:

Dim hOwcHandle As IntPtr = GetModuleHandle("AcroPDF.dll")
If Not hOwcHandle.Equals(IntPtr.Zero) Then
    FreeLibrary(hOwcHandle)
    Debug.WriteLine("AcroPDF.dll freed")
End If

可以针对任何其他不良行为的dll修改此过程.我只是希望它不会引入任何新的错误.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有