我是WinDBG的新手,并尝试分析IIS 8.0为ASP.Net Web应用程序生成的小型故障转储文件。我可以看到有些调用会反复重复,并导致堆栈溢出。以下是这些电话:
000000350eccaa00 000007fdc466c6e3 System.IO.__Error.WinIOError(Int32, System.String)
000000350eccaa50 000007fdc386e706 System.IO.FileStream.Init(System.String, System.IO.FileMode, System.IO.FileAccess, Int32, Boolean, System.IO.FileShare, Int32, System.IO.FileOptions, SECURITY_ATTRIBUTES, System.String, Boolean, Boolean, Boolean)
000000350eccab40 000007fdc387a466 System.IO.FileStream..ctor(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, Int32, System.IO.FileOptions, System.String, Boolean, Boolean, Boolean)
000000350eccabf0 000007fdc38793e2 System.IO.StreamWriter..ctor(System.String, Boolean, System.Text.Encoding, Int32, Boolean)
000000350eccaca0 000007fdc3879306 System.IO.StreamWriter..ctor(System.String, Boolean, System.Text.Encoding, Int32)
000000350eccace0 000007fdc38fe262 System.IO.StreamWriter..ctor(System.String, Boolean)
000000350eccad50 000007fdc4143d1f System.IO.File.AppendText(System.String)
000000350eccad90 000007fd65519778 Custom.External.dll!Unknown
000000350eccae00 000007fd6551826f Custom.External.dll!Unknown
000000350eccae70 000007fd6550e465 Custom.External.dll!Unknown
000000350eccaf10 000007fd6550e92e Custom.External.dll!Unknown
000000350eccaf50 000007fd65519873 Custom.External.dll!Unknown
000000350ecccf28 000007fdc4c9feb5 [HelperMethodFrame: 000000350ecccf28]
如您所见,Custom.External.dll调用不显示有关正在调用哪些函数的信息。如何将此DLL加载到WinDBG中,以便它可以正确调试这些调用?
答案 0 :(得分:1)
这看起来不像堆栈溢出。堆栈溢出通常需要在堆栈上进行5次以上的调用(只要堆栈之前没有被其他东西填充)。从方法名称,它看起来像一个IOException。要获取异常的类型,请键入
~#s; *** Switch to the thread with the exception
.exr -1; *** Native exception info
.loadby sos clr; *** Load .NET extension
!pe; *** Use .NET extension to get .NET exception info
!clrstack; *** Might differ from the stack in the exception
除此之外,您可能没有外部DLL的符号。如果它是第三方库,你不能对它做很多事情。如果它是您自己的DLL,请将您的PDB放入目录(而不是存储MS符号的位置)并执行
.sympath+ c:\mydirectory
.reload
然后再次执行命令,看看情况是否有所改善。