第三方dll崩溃程序,没有异常抛出

sbe*_*rli 6 c# crash visual-studio-2010

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

Eri*_*ert 21

在Windows中布局线程的堆栈的方式是这样的(粗略地说;这不是对所有内容的准确描述,只是足以给你提供要点.而CLR处理堆栈页面的方式有点不同于非托管代码如何处理它.)

在堆栈的顶部,您正在使用所有已提交的页面.然后有一个"防护页面" - 如果你点击那个页面,那么防护页面就成了一个新的堆栈页面,下一页成为新的防护页面.但是,堆栈的最后一页是特殊的.如果你点击一次,就会出现堆栈溢出异常.如果您点击两次,则会立即终止该过程.通过"立即"我的意思是"立即" - 没有例外,直接进监狱,不通过去,不收200美元.操作系统的原因是,此时该过程深深地患病,并且可能已经变得积极敌对给用户.堆栈溢出,堆栈溢出的代码可能试图将任意多的垃圾写入内存.(*)

由于该过程可能对其自身和其他人造成危害,因此操作系统将其关闭而不允许运行任何更多代码.

我怀疑你的非托管代码中的某些内容会在最后一次堆栈页面中出现两次.几乎每次我看到一个过程突然消失,没有例外或其他解释,因为"不要弄乱我"堆栈页面被击中.

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