我有一个Windows服务,它间歇性地抛出一个异常,有时会终止它的sqlconnection,有时会完全终止该服务。它在客户的网站上实时运行。
我计划在上面使用windbg+sos进行崩溃转储,这样我就可以在空闲时调试它了。
但是,在我第一次尝试时,当调试器遇到在代码中捕获和处理的第一次机会异常时(正如我使用 sxe clr 命令)。
sxe clr
帮助文件似乎建议我使用 sxd clr ,而不是 SXE清除 ,以捕获第二个更改异常而不是第一次机会异常。
sxd clr
SXE清除
然而,在我的测试中,生成的、捕获的和处理的异常被 SXD清除 命令,即它被注意和忽略。
SXD清除
这种不在抛出的异常上停止的行为,可能是因为我在代码中显式地抛出了异常,还是所有的clr异常都无法用 sxd 命令?我应该使用不同的命令吗?
sxd
其次,由于windbg不专门识别clr错误,是否可以告诉它只在特定的、未处理的异常(即invalidOperationException)上停止?
仅使用ADPLUS创建转储文件可能更容易。 This article 显示如何使用ADPLUS为特定.NET异常创建小型转储。