C# 第三方dll使程序崩溃,未引发异常

C# 第三方dll使程序崩溃,未引发异常,c#,visual-studio-2010,crash,C#,Visual Studio 2010,Crash,我正在使用Visual Studio 2010,并用C#编写代码。我有一个第三方dll,我在我的项目中使用。当我试图在看似随机的情况下使用特定的方法时,程序只是崩溃,没有抛出异常。会议到此结束。有什么方法可以跟踪正在发生的事情吗?尝试强制调试器捕获已处理的异常,尤其是访问冲突和堆栈溢出之类的坏异常。您可以在调试->异常中执行此操作。 第三方DLL可能捕获所有异常,然后调用exit()或类似的函数,从而退出整个程序。是否检查了Windows事件日志?您可以在“管理工具”菜单>“事件查看器”中访问它

我正在使用Visual Studio 2010,并用C#编写代码。我有一个第三方dll,我在我的项目中使用。当我试图在看似随机的情况下使用特定的方法时,程序只是崩溃,没有抛出异常。会议到此结束。有什么方法可以跟踪正在发生的事情吗?

尝试强制调试器捕获已处理的异常,尤其是访问冲突和堆栈溢出之类的坏异常。您可以在调试->异常中执行此操作。
第三方DLL可能捕获所有异常,然后调用exit()或类似的函数,从而退出整个程序。

是否检查了Windows事件日志?您可以在“管理工具”菜单>“事件查看器”中访问它。请特别查看应用程序和系统日志。

Windows中线程堆栈的布局方式如下(大致上,这并不是对所发生的一切的精确描述,仅足以为您提供要点。CLR处理堆栈页的方式与非托管代码处理堆栈页的方式有所不同。)

在堆栈的顶部有您正在使用的所有提交页面。然后有一个“保护页”-如果你点击该页,那么保护页将成为堆栈的新页,而下一页将成为新的保护页。但是,堆栈的最后一页是特殊的。如果点击一次,就会出现堆栈溢出异常。如果点击两次,则进程立即终止。我所说的“立即”是指“立即”——无一例外,直接进监狱,不过关,不收200美元。操作系统的原因是,在这一点上,进程已严重受损,并且可能对用户产生了积极的敌意。堆栈已溢出,溢出堆栈的代码可能试图将任意多的垃圾写入内存。(*)

由于该进程对自身和他人都有潜在的危险,操作系统会在不允许任何代码运行的情况下将其关闭

我的怀疑是,非托管代码中的某些内容正在两次命中最终堆栈页。几乎每次我看到一个进程突然消失,没有例外或其他解释,这是因为“别惹我”堆栈页面被点击


(*)早在20世纪90年代初,我就为一个名为NetWare的小操作系统开发了数据库驱动程序。它没有像现在更现代的操作系统那样的常规保护。我需要能够在内核保护级别运行时动态地“切换堆栈”;我知道我的驱动程序何时意外地破坏了堆栈,因为它最终会写入屏幕内存,然后我可以通过查看直接写入屏幕的垃圾来调试问题。啊,那是过去的日子。

如果使用(由我开发的)管理第三方dll,您可以看到崩溃前它内部发生了什么-堆栈溢出、强制退出或异常将被清楚地识别。

程序刚刚退出、没有错误消息或什么都没有的最典型原因是堆栈溢出。在这种情况下,程序没有足够的堆栈来显示错误消息本身,Windows只是终止它。可能是这样吗?我设置了VS,以便按照dark_charlie的评论抛出StackOverflow和AccessViolation异常。但是什么也没有发生我设置了VS,以便抛出StackOverflow和AccessViolation异常,但同样,没有抛出任何异常。您有可用于该dll的调试符号吗?那个DLL是用什么语言写的?它是托管DLL还是非托管DLL?您也可以简单地尝试检查异常窗口中的所有内容,然后等待:)这是一个互操作dll。它表示,如果安装了.NET framework,则主互操作程序集也会安装到全局程序集缓存(GAC)中。这是否意味着它被管理了?@sbenderli它可能被管理了。然后dll可能会直接终止应用程序,而不会引发异常。我想你应该联系供应商或者找其他供应商……谢谢你的建议。我在我案件的事件日志中发现了一些线索。