.net 我可以在不附加VS调试器的情况下从CLR异常获取stacktrace吗?

.net 我可以在不附加VS调试器的情况下从CLR异常获取stacktrace吗?,.net,debugging,iis-6,windbg,.net,Debugging,Iis 6,Windbg,我有一个在远程服务器上运行的网站,希望从正在发生的异常中获取一些信息。我无法安装VS或使用远程调试,一直在尝试使用各种版本的WinDbg,但收效甚微。在我的本地测试中,我可以让WinDbg破解C++异常,或者我抛出的CLR异常,但不能获得比“抛出什么”更多的信息。 WinDbg是一种方法,还是有其他方法,或者我因为没有足够的日志记录而陷入困境?将WinDbg附加到流程中,然后输入以下命令: .symfix sxe clr sxd av .loadby sos clr g 执行将继续(go命令后

我有一个在远程服务器上运行的网站,希望从正在发生的异常中获取一些信息。我无法安装VS或使用远程调试,一直在尝试使用各种版本的WinDbg,但收效甚微。在我的本地测试中,我可以让WinDbg破解C++异常,或者我抛出的CLR异常,但不能获得比“抛出什么”更多的信息。
WinDbg是一种方法,还是有其他方法,或者我因为没有足够的日志记录而陷入困境?

将WinDbg附加到流程中,然后输入以下命令:

.symfix
sxe clr
sxd av
.loadby sos clr
g
执行将继续(go命令后),并在抛出CLR异常(或任何其他未处理的异常)时中断。每当它在CLR异常时中断时,您会看到:

(xxxx.xxxx): CLR exception - code e0434352 (first chance)
然后您可以使用SOS命令,如
!pe
打印异常类型,
!ClrStack
要转储堆栈,
!dso
将托管对象转储到堆栈中等


编辑:我在
sxe
sxd
命令中有输入错误。感谢@MStodd注意到这一点。

我想说,您需要更好的日志记录,yesI会临时设置在抛出异常时创建一个迷你转储,然后使用WinDbg查看迷你转储。我稍后会在我混乱的机器上尝试,但看起来不错。对于.NET 2.0,我需要
.loadby sos mscorwks
而不是
.loadby sos clr
。听起来不错吧?@MStodd,那也应该行。在.Net 2.0中,您可以使用
mscorwks
mscorsrv
(用于服务器模式应用程序),而在.Net 4.0中,您可以使用
mscoreei
clr`只是当前执行引擎的快捷方式。我注意到有时
clr
不起作用,在这种情况下,可以使用
mscoreei
mscorwks
mscorsrv
@SevaTitov。请问您为什么建议禁用访问冲突中断?(sxd av)通常托管的NullReferenceException最初表现为一个av,因此我认为最好启用对这些异常的中断。@Dono,据我所知,在某些情况下,CLR会将av作为某种内部机制,可能与内存探测有关。该AV的每个实例都是由CLR本身在内部处理的,所以应用程序没有副作用。请注意,
sdx av
会禁用第一次机会自动中断异常,而不是第二次。如果您的代码存在导致AV的实际问题,它很可能会再次出现异常,windbg将像往常一样中断,并允许您调查问题。我已经获得了windbg的新Windows应用商店版本。我不知道如何执行这些命令。