我有一个 Windows 服务,它间歇性地抛出一个异常,有时会杀死它的 SQLConnection,有时会完全杀死该服务。它在客户的网站上实时运行。
我计划在其上使用 Windbg + SOS 来获取故障转储,以便我可以在闲暇时进行调试。
然而,在我第一次尝试时,调试器在遇到第一次机会异常时停止了服务,该异常在代码中被捕获和处理(就像我使用sxe clr
命令一样)。
帮助文件似乎建议我使用sxd clr
,而不是sxe clr
,来捕获第二次更改异常而不是第一次机会异常。
然而,在我的测试中,生成、捕获和处理的异常被sxd clr
命令与抛出的异常(但未捕获)完全相同,即它被记录和忽略。
这种行为是不是在抛出异常时停止,可能是因为我在代码中明确抛出了异常,还是所有 clr 异常都无法使用sxd
命令停止调试器?我应该使用不同的命令吗?
其次,由于 Windbg 没有专门识别 clr 错误,是否可以告诉它仅在特定的未处理异常(即 InvalidOperationException)上停止