1

我有一个 Windows 服务,它间歇性地抛出一个异常,有时会杀死它的 SQLConnection,有时会完全杀死该服务。它在客户的网站上实时运行。

我计划在其上使用 Windbg + SOS 来获取故障转储,以便我可以在闲暇时进行调试。

然而,在我第一次尝试时,调试器在遇到第一次机会异常时停止了服务,该异常在代码中被捕获和处理(就像我使用sxe clr命令一样)。

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

然而,在我的测试中,生成、捕获和处理的异常被sxd clr命令与抛出的异常(但未捕获)完全相同,即它被记录和忽略。

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

其次,由于 Windbg 没有专门识别 clr 错误,是否可以告诉它仅在特定的未处理异常(即 InvalidOperationException)上停止

4

1 回答 1

1

使用 adplus 创建转储文件可能更容易。本文介绍如何使用 adplus 为特定的 .NET 异常创建小型转储。

于 2010-09-14T03:32:01.117 回答