我的应用程序首先从数据库中读取数据,然后创建要上传到 SFTP 服务器的 XML 文档。
当我运行应用程序时出现错误:
VShost32.exe stopped working
当我在调试模式下运行应用程序并单步执行时,我找到了弹出错误的点,但我仍然可以继续执行下一步(只要我不关闭弹出窗口)。然后,该做的事,都做完了。完全没有问题。
那么为什么我会收到此错误消息?完全不清楚是什么原因造成的。
另外,我怎样才能摆脱它?
我的应用程序首先从数据库中读取数据,然后创建要上传到 SFTP 服务器的 XML 文档。
当我运行应用程序时出现错误:
VShost32.exe stopped working
当我在调试模式下运行应用程序并单步执行时,我找到了弹出错误的点,但我仍然可以继续执行下一步(只要我不关闭弹出窗口)。然后,该做的事,都做完了。完全没有问题。
那么为什么我会收到此错误消息?完全不清楚是什么原因造成的。
另外,我怎样才能摆脱它?
VSHost32.exe 是 Visual Studio 托管进程。它具有 CLR 的自定义托管版本,使调试更容易。实际的进程名称是 yourapp.vshost.exe,您可以在任务管理器中看到它正在运行。
所以消息的真正含义是你的程序已经崩溃,但不是调试器可以识别的方式。如果您使用的库启动自己的非托管线程并且该线程因未处理的异常而崩溃,这在技术上是可行的。默认情况下,调试器只能诊断在托管代码启动的线程上引发的异常。
在此崩溃后您能够继续调试是非常不寻常的并且可能非常不健康。如果您使用的库使用 SetUnhandledExceptionFilter() 安装自己的未处理异常过滤器并吞下异常,这在技术上是可行的。但是在托管过程看到它之后才会这样做。这是非常了不起的。
通过启用非托管调试器获得更好的诊断。项目+属性,调试选项卡,勾选“启用非托管代码调试”选项。然后 Debug + Exceptions,勾选 Win32 Exceptions 的 Throw 复选框。重现崩溃场景,调试器现在应该在抛出异常时停止。查看调用堆栈以获取提示。您将看不到任何可识别的内容,因为崩溃的代码可能没有任何调试信息。但希望包含代码的 DLL 的名称可以让您了解哪个库对此负责。然后联系图书馆的供应商并询问详细信息。