2

我有一个 F# 3.0 应用程序,它在构建它的计算机上运行良好。我已经复制了应用程序、FSharp.Core.dll 和其他似乎与安装了 .net v4.0 的 Windows Server 2003 机器相关的 dll。

应用程序正确启动,但很快就崩溃了。消息是“app.exe 中发生未处理的 Microsoft .NET Framework 异常 [每次都不同的一些数字]。即时调试此异常失败并出现以下错误:没有安装的调试器具有即时调试启用 (....)"

如果我删除 FSharp.Core.dll,消息是相同的。在这种情况下,应用程序甚至没有得到它的初始消息。这让我认为原因可能是缺少其他一些 dll。

我已经尝试过 Dependency Walker,但它似乎甚至没有提到 Fsharp.Core。它确实抱怨缺少一些谷歌建议无关紧要的 dll(例如名称中带有 shim/设备管理器的东西)。我也尝试启动 Fuslogvw.exe,但它只是坐在那里而没有记录任何输出。我无法在目标计算机上安装 MSVC。

对于尝试什么的任何建议,我将不胜感激。非常感谢。

编辑:.net 反射器也没有报告任何明显错误的东西....

4

2 回答 2

3

尝试在入口点的最开始附加到AppDomain.UnhandledException事件。即,AppDomain.CurrentDomain.UnhandledException.Add(fun e -> ... log error ...)尝试在您的应用程序卸载之前捕获错误是什么。

如果您的应用程序是 Windows 应用程序,您还可以将处理程序附加到Application.UnhandledException以尝试相同的操作。

另一种选择是将远程调试可再发行组件复制到目标计算机,然后从源所在的位置连接到它。这将允许您进入实际发生崩溃的代码点。

如果您的应用程序是多域主机,那么远程调试器可能是您最好的选择。

于 2012-10-05T16:41:55.430 回答
0

如果依赖项有问题,可以尝试使用 --standalone

作为编译器参数。如果您只想分发一个简单的应用程序,这可能会有所帮助。

如果您仍然有问题,您可以使用Process Monitor来识别您的应用程序尝试读取/加载但失败的文件和注册表项。请记住在监视器中设置一个过滤器,针对您的应用程序,否则您的系统将开始爬行,试图记录所有内容。

于 2012-10-11T21:39:56.360 回答