【问题标题】:!ClrStack -a call in ASP.NET MVC application shows <NO DATA>!ClrStack - ASP.NET MVC 应用程序中的调用显示 <NO DATA>
【发布时间】:2015-04-20 15:24:25
【问题描述】:

将 WinDbg 附加到我的 ASP.NET MVC 应用程序并在发生异常时调用 !ClrStack -a 时,我没有看到 locals 或 params 值。我看到的只是&lt;NO DATA&gt; 出现。

为什么会这样?我可以检查项目中的哪些设置?

我很感激我可以通过!dso 调用看到问题中的对象并在输出中找到我感兴趣的对象,但这对我来说不是一个好的解决方案,因为我需要确切地知道传递到的对象一个特定的功能 - 我不想花很多时间挑选每个对象地址并对其进行!do

该应用程序是在DEBUG 模式下构建的。查看堆栈时,所有方法和类型都会出现在输出中,因此我假设符号没有问题,但我愿意尝试任何必要的命令来重新同步或更新符号(如果需要)。

CPU 架构是 ANY CPU,我们运行的是 Windows Server 2008 R2 64 位。

我尝试使用 SOSEX 的 !mk !mframe!mdv 命令列出参数和本地,但它们显示 &lt;UNAVAILABLE&gt;

编辑:

这是我看到的输出类型的示例:

【问题讨论】:

标签: asp.net-mvc debugging windbg


【解决方案1】:

为什么会这样?

这发生在由 JIT 编译器(您的情况)或发布版本(由编译器)优化的代码上。

我可以检查项目中的哪些设置?

始终检查符号路径并添加 Microsoft 符号(如果尚未完成)。

.symfix c:\debug\symbols
.reload

接下来,检查 WinDbg 是否可以使用 lm 找到应用程序的符号。它应该显示“私有 pdb 符号”。如果没有,请运行

.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

【讨论】:

  • 我更新了我的问题以告知我尝试使用 SOSEX。明天我回到办公室时,我会试试.symfix 命令。为此干杯。
  • @JasonEvans:还要检查lm 的输出。添加 .sympath+ &lt;your PDBs&gt; 如果它说的不是“私有 PDB 符号”。我也将此添加到我的答案中。
  • 我晒黑了lm,看到我的代码的符号是(deferred)。我读了this SO question,但我被困住了。你可以强制 WinDbg 加载符号,就像不要延迟加载它们一样吗?
  • 嗯,好的。我刚刚运行.reload /f 来强制加载符号。完成后我会看看这是否会有所不同。
  • @JasonEvans:我对ld * 有更好的经验来加载所有模块的符号。恕我直言,.reload /f 仍然只重新加载那些已经加载的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
相关资源
最近更新 更多