2010-09-14 42 views
1

我有一个windows服务,它间歇性地抛出一个有时会导致SQLConnection失败的异常,而其他时间则会完全中止服务。它在客户的网站上运行。带SOS的Windbg,停在正确的异常处

我已经计划使用Windbg + SOS来获取崩溃转储,以便我可以在自己的闲暇时间进行调试。

但是,在我第一次尝试时,调试器在服务遇到第一次机会异常时被暂停,该异常在代码中被捕获和处理(如我使用sxe clr命令)。

帮助文件似乎暗示我使用sxd clr而不是sxe clr来捕获第二个更改异常,而不是第一次机会异常。

然而,在我的测试中,sxd clr命令正在处理生成的捕获和处理的异常,与引发的异常(但未捕获)完全相同,即将其记录并忽略。

这种行为,不停止抛出的异常,可能是因为我在我的代码中显式抛出了异常,或者是否所有的clr异常都无法使用sxd命令暂停调试器?我应该使用不同的命令吗?

其次,由于WinDBG的不特异性识别CLR的错误,是可以告诉它只是在一个特定的,未处理的,异常停止(即出现InvalidOperationException)

回答

1

这可能是更容易只是使用ADPlus创建转储文件。 This article演示了如何使用adplus为特定的.NET异常创建小转储。

+0

谢谢,我会检查出来 – johnc 2010-09-14 03:49:08

+0

请记住,在最新版本的WinDbg中,adplus.vbs被替换为adplus.exe。我在新版本中遇到了一些问题,因此您可能需要使用旧版本,该版本仍包含在内(重命名为adplus_old.vbs)。 – 2010-09-14 03:53:43

+0

很好,谢谢 – johnc 2010-09-14 04:36:42