在WinDbg中针对特定异常打破最快的方法? .net 4.0 app

时间:2010-10-05 03:30:56

标签: debugging stack-overflow windbg

民间,

使用WinDbg调试.net 4.0应用程序(我是WinDbg的初学者)。当我遇到堆栈溢出时,我正试图打破: (NTSTATUS)0xc00000fd - 无法创建堆栈的新保护页面

不幸的是,这个溢出发生在长时间运行的过程中大约2个小时,并且日志告诉我它并不总是在同一时间/地点发生。如果我在调试器中附加到进程,程序运行速度非常慢......可能需要几天时间来查找错误!有没有办法通过告诉WinDbg仅针对此特定错误中断来加速app / WinDbg?

2 个答案:

答案 0 :(得分:4)

您可以指示ADPLus在发生异常时创建进程的转储。 John Robbins有a good article on the subject。然后,您可以使用WinDbg来调试转储文件。

请注意,原来的adplus.vbs已被adplus.exe取代,adplus.exe应该提供相同的功能。根据我的经验,新实现存在一些问题,因此您可能需要使用旧脚本,该脚本仍可用作adplus_old.vbs。

答案 1 :(得分:2)

通常,附加调试器不会太慢地减慢应用程序的速度(与从调试器启动应用程序相比,这会将堆设置为调试模式)。

但默认情况下,调试器将跟踪事件(例外和OutputDebugString),在您的情况下,可能会有太多事件。附加调试器后,您可以禁用所有异常处理。 (菜单调试/事件过滤器,或命令sxi)。您必须更改所有事件的处理(sxi *表示未知事件,并且不适用于所有事件)。您还可以使用.outmask-0xFFFFFFFF禁用所有跟踪。然后仅使用sxe -c ".outmask /d" sov

启用堆栈溢出事件