.NET应用程序崩溃,没有调试信息

时间:2010-11-09 17:51:18

标签: vb.net winforms debugging crash

我有一个备份程序,目前在我们的企业环境中运行大约70台机器。笔记本电脑,台式机和Windows(xp-32,vista-32,vista-64,7-32-7-64)的混合物没有任何问题。

有一个例外,这就是我在这里寻求帮助的原因。

在安装了.Net 4 Framework的运行Windows 7 64位的Dell Latitude计算机上,控制台应用程序将在启动Sub Main之前立即崩溃。它只是给通用窗口错误“一个问题导致程序停止正常工作”。没有看到调试信息的选项。

我尝试过的事情:
- 卸载所有非标准软件
- 评论我认为可能导致问题的几个声明 - 重新编译Auto CPU,x86和x64以查看它是否有所不同
- 禁用病毒扫描程序
- 用户是管理员,但我尝试以管理员身份运行 - 在Sub Main中添加了一个消息框,以确定它崩溃的位置 - 为所有相关代码添加了try catch

我能够从事件查看器中获取更多信息:

错误模块名称:KERNELBASE.dll,版本:6.1.7600.16385,时间戳:0x4a5bdbdf
例外代码:0xe0434f4d 故障偏移:0x0000b727

接下来的几个条目对我来说很奇怪:

错误进程ID:0x%9
故障应用程序启动时间:0x%10
错误申请路径:%11
错误模块路径:%12

我还能够提取.wer文件(Windows错误报告平面文件)并且它反刍了大部分相同的信息,但也包括一些加载的dll和正在使用的其他文件。

感谢您花时间阅读我的文字墙,希望有人会对如何继续下去有所了解。

约书亚

编辑:

我在考虑以下Win32 API调用可能会导致问题,而且如果没有大量的代码重写,它们是我唯一无法轻易注释掉的内容。

如果是,为什么只在这台机器上:(

' Obtain a handle to the console application window by passing the title of your application.
Dim hWnd As Integer = Process.GetCurrentProcess().MainWindowHandle
Dim hMenu As Integer = GetSystemMenu(hWnd, False)

'WIN API Functions to assist in disabling the Close button on the Console Window
Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Integer, ByVal uPosition As Integer, ByVal uFlags As Integer) As Boolean
Private Declare Function GetForegroundWindow Lib "user32" () As Integer
Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Integer, ByVal bRevert As Boolean) As Integer
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Integer, ByVal uCmd As Integer) As Integer
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Integer, ByVal lpString As String, ByVal nMaxCount As Integer) As Integer
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hWnd As Integer, ByVal nCmdShow As Int32) As Boolean
Public Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" (ByVal lpszLocalName As String, ByVal lpszRemoteName As String, ByRef cbRemoteName As Integer) As Integer

4 个答案:

答案 0 :(得分:1)

首先我会查看Tess Ferrdandez blog它有关于创建崩溃调试文件并使用windbg查看它的信息

第二,我会尝试在其中一台机器上修复框架,因为我们在部署中遇到了类似的问题并且解决了这个问题。

答案 1 :(得分:1)

我会将句柄(hwnd)的所有引用更改为IntPtr,因为此数据类型将适用于任何.net框架,但我不相信整数数据类型将在64位环境中用于句柄句柄。

以下内容也是来自Microsft文章的sniipet:

通常,无论使用何种平台,用Visual Basic编写的.NET Framework程序集都将运行相同的程序。但是,有些情况在不同平台上表现不同。这些常见案例是:

包含根据平台更改大小的成员的结构,例如任何指针类型。

包含常量大小的指针算法。

不正确的平台调用或使用Integer处理句柄而不是IntPtr的COM声明。

将IntPtr转换为整数。

使用平台调用或COM互操作与所有平台上不存在的组件。

完整的文章可以在这里找到: http://msdn.microsoft.com/en-us/library/8ck8e1y2(v=vs.80).aspx

答案 2 :(得分:0)

查看融合日志以查看其加载的程序集。可能没有找到装配它试图加载。

How to enable assembly bind failure logging (Fusion) in .NET

编辑:黑暗中的野外拍摄...本机是否启用了快速用户切换?如果是这样,请尝试禁用。

http://www.addictivetips.com/windows-tips/how-to-enable-disable-fast-user-switching-in-windows-xp-and-windows-vista/

答案 3 :(得分:0)

当您拥有32位DLL(或混合的32位和64位DLL),为任何CPU编译并在64位系统上运行时,有时会发生此错误。我知道你说你试过为x86编译,但是尝试确保所有的DLL都是32位,然后编译为x86。