我有一个windows服务,它间歇性地抛出一个异常,有时会杀死它的SQLConnection,有时会完全杀死服务。
我已经计划在它上面使用Windbg + SOS来获得崩溃转储,这样我就可以在自己空闲的时候调试这个。
然而,在我的第一次尝试中,调试器在遇到第一次机会异常时停止了服务,该异常在代码中被捕获和处理(因为我使用了sxe clr
命令)。
帮助文件似乎建议我使用sxd clr
而不是sxe clr
来捕获第二次更改异常而不是第一次机会异常。
然而,在我的测试中,sxd clr
命令对生成、捕获和处理的异常的处理方式与对抛出的异常(但未捕获)的处理方式完全相同,即注意并忽略它。
这种行为是在抛出异常时不停止,可能是因为我在代码中显式抛出了异常,还是所有clr异常都无法使用sxd
命令停止调试器?我应该使用不同的命令吗?
其次,由于Windbg不专门识别clr错误,是否可以告诉它只在特定的、未处理的异常(即InvalidOperationException)时停止
1条答案
按热度按时间j8yoct9x1#
使用adplus创建转储文件可能更简单。This article展示了如何使用adplus为特定的.NET异常创建小型转储。
如果使用的是WinDbg,则需要sos扩展和类似