【发布时间】:2011-12-08 16:53:41
【问题描述】:
我有一个 32 位的 windows .exe。它将作为 Windows 服务运行。此 .exe 可作为 windows 2000/xp 32 位版本的服务正常运行。
但是,当尝试在 64 位 Windows 2008 服务器上运行时,它会崩溃。我正在观察两个案例。
1) 如果我在 VC++ 6 上构建应用程序。从事件日志条目看来,Kernel.dll 正在崩溃。
错误的应用程序名称:,版本:,时间戳:0x4e6461c0 错误模块名称:KERNELBASE.dll,版本:6.1.7600.16385,时间戳:0x4a5bdbdf 异常代码:0xe06d7363 故障偏移量:0x0000b727 错误进程ID:0xe2c 错误应用程序启动时间:0x01cc83cb1052e4b3 错误的应用程序路径:C:\Program Files (x86)\\\Admin.exe 错误模块路径:C:\Windows\syswow64\KERNELBASE.dll 报告 ID:4e0693b4-efbe-11e0-a07f-001143e8bb9d2) 如果我使用 VS2005 32 位构建应用程序,则会显示运行时错误并且事件日志显示 msvscrt.dll 已崩溃。
错误的应用程序名称:,版本:, 错误模块名称:MSVCR80.dll,版本:8.0.50727.4927,时间戳:0x4a2752ff 异常代码:0x40000015 故障偏移量:0x000046b4 错误进程ID:0x34c 错误的应用程序启动时间:0x01cc8c4f2a223426 错误的应用程序路径:C:\Program Files (x86)\\\Admin.exe 错误模块路径:C:\Windows\WinSxS\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\MSVCR80.dll 报告 ID:69554d57-f842-11e0-a07f-001143e8bb9d请帮我解决这个问题。
【问题讨论】:
-
您是否尝试过调试应用程序?对 0xe06d7363 的 Web 搜索表明这是一个未捕获的 C++ 异常,因此堆栈跟踪应该可以快速显示出问题所在。对 0x40000015 的网络搜索表明这是一个 C 运行时致命退出,因此对其的堆栈跟踪也应该可以快速确定原因。
-
可能是同样的失败原因,VS2005版本在未处理的C++异常上正确调用了terminate()。使用调试器找出引发异常的原因从来都不是一件难事,没有调试器几乎是不可能的。