将WinDbg附加到我的ASP.NET MVC应用程序并在发生异常时调用!ClrStack -a
时,我看不到本地或参数值。我看到的只有<NO DATA>
。
为什么会这样?我可以检查项目中的哪些设置?
我很欣赏我可以通过!dso
调用查看问题中的对象,并在输出中找到我感兴趣的对象,但这对我来说不是一个好的解决方案,因为我需要确切地知道对象是什么传递给一个特定的函数 - 我不想花费多少时间选择对象地址并对它们进行!do
。
该应用程序以DEBUG
模式构建。查看堆栈时,所有方法和类型都出现在输出中,所以我假设符号没有问题,但我愿意尝试任何必要的命令来重新同步或更新符号(如果需要)。 p>
CPU架构为ANY CPU
,我们正在运行Windows Server 2008 R2 64位。
我尝试使用SOSEX的!mk
!mframe
和!mdv
命令来列出param和locals,但它们显示<UNAVAILABLE>
。
编辑:
以下是我看到的输出类型示例:
答案 0 :(得分:1)
为什么会这样?
对于由JIT编译器(您的情况)或发布版本(由编译器)优化的代码,会发生这种情况。
我可以查看项目中的哪些设置?
如果尚未完成,请务必检查符号路径并添加Microsoft符号。
.symfix c:\debug\symbols
.reload
接下来,检查WinDbg是否可以使用lm
找到应用程序的符号。它应该显示&#34;私人pdb符号&#34;。如果没有,请运行
.sympath+ <path to your PDBs>
除此之外,SOSEX让您的生活更轻松。请尝试以下方法:
!mk; *** Managed stack
!mframe <frame>; *** Switch to frame
!mdv; *** Dump values - This will at least give you the type
!mdv <frame>; *** Same as before but include !mframe
!mdso; *** Similar to !dso