我的程序在Windows XP中运行,但在Windows 7中没有任何异常崩溃。尝试catch不起作用。我也试过没有运气的application.unhandledexception。然后我尝试检查Windows管理并获得以下日志:
Level Date and Time Source Event ID Task Category
Error 7/25/2011 11:25:14 AM Application Error 1000 (100) "Faulting application name: myApp.exe, version: 1.0.0.0, time stamp: 0x4e2ce191
Faulting module name: ntdll.dll, version: 6.1.7601.17514, time stamp: 0x4ce7b96e
Exception code: 0xc0000005
Fault offset: 0x00052ca9
Faulting process id: 0x%9
Faulting application start time: 0x%10
Faulting application path: %11
Faulting module path: %12
Report Id: %13"
我不确定要显示哪部分代码,因为它有大型集合类,但我会回到编辑这篇文章。
我也试过从任务管理器转储文件,但我不确定如何使用它们。
我可以使用任何特定的工具吗?我正在使用VS2008。我查看了NLog,但我不知道该怎么办,所以我跳过了。
有什么建议吗?提示和技巧?
答案 0 :(得分:3)
尝试使用ThreadExceptionEventHandler并查看。
Application.ThreadException += new ThreadExceptionEventHandler(MyCommonExceptionHandlingMethod)
private static void MyCommonExceptionHandlingMethod(object sender, ThreadExceptionEventArgs t)
{
//Exception handling...
}
编辑:在Windows窗体应用程序中,当在应用程序的任何地方(在主线程上或在异步调用期间)抛出异常时,您可以通过在应用程序上注册ThreadException事件来捕获它。
编辑2
尝试兼容性?如果它工作正常,那么有些东西与Win7不兼容。
答案 1 :(得分:1)
答案 2 :(得分:0)
Faulting module name: ntdll.dll
说你很有趣,但你应该从代码中的任何P / Invokes开始。不应该从.NET导致这样的错误,所以它是你正在调用的一些本机DLL。
P / Invoke允许您从托管代码调用普通的,本机的,非托管的可执行文件。这可以是任何未在.NET中编程的东西 - 即绘图库,音频库等。例如,如果您有多媒体控件,则可能在不知道的情况下使用它。有一篇相当不错的文章right here。
如果您正在与Microsoft Office进行COM Interop,则与上述相同。检查它是否是相同的Office版本,即使它是,您可能需要Microsoft的Primary Interop Assemblies版本。
您也可以尝试从Visual Studio启动应用程序,您可能会获得堆栈跟踪,它会告诉您应用程序在崩溃之前所采用的确切路径。然后你会知道发生了什么。