我有一个在远程服务器上运行的网站,并希望从正在发生的异常中获取一些信息。我无法安装VS或使用远程调试,并且一直试图使用各种版本的WinDbg但收效甚微。在我的本地测试中,我可以让WinDbg打破C ++异常,或者我抛出的CLR异常,但是不能获得比“扔掉的东西”更多的信息。
WinDbg是可行的方式,还是有另一种方式,还是因为没有足够的日志而搞砸了?
答案 0 :(得分:17)
将WinDbg附加到进程,然后输入以下命令:
.symfix
sxe clr
sxd av
.loadby sos clr
g
执行将继续(在go命令之后)并且每当抛出CLR异常(或任何其他未处理的异常)时将中断。每当它打破CLR异常时,你会看到:
(xxxx.xxxx): CLR exception - code e0434352 (first chance)
然后你可以使用像!pe
这样的SOS命令来打印异常类型,!ClrStack
来转储堆栈,!dso
来转储堆栈中的托管对象等。
编辑:我在sxe
和sxd
命令中输入了拼写错误。感谢@MStodd注意到这一点。