【问题标题】:how to see my managed objects on the stack?如何在堆栈上查看我的托管对象?
【发布时间】:2010-04-09 03:35:29
【问题描述】:

我在 VisualStudio 中使用 SOS.dll 来调试我的 C# 程序。程序如下。

调试命令是!DumpStackObjects

class Program
{
    static void Main()
    {
        Int32 result = f(1);
    }

    static Int32 f(Int32 i)
    {
        Int32 j = i + 1;
        return j;            <===========BreakPoint is here
    }
}

我在Visual Studio的即时窗口中输入“!dso”命令后,结果如下:

操作系统线程 ID:0xf6c (3948)

ESP/REG 对象名称

为什么什么都没有?我认为应该有 args i 和局部变量 j。

感谢您回答我的幼稚问题...

【问题讨论】:

    标签: .net debugging sos


    【解决方案1】:

    !dumpstackobject 将堆栈上的引用转储到对象。 IE。您不会使用此命令看到值类型。使用!clrstack -l 查看本地变量(使用-p 查看参数,-a 用于两者)。

    【讨论】:

    • 谢谢,布赖恩。 SOS.dll 中是否有任何命令可以获取堆栈上的变量列表?我必须使用 WinDbg 吗?
    • 请记住,本地/参数可能存储在寄存器中,因此对于优化的构建,您可能无法看到所有细节 - 即使在 WinDbg 中也是如此。
    • 另外,既然你是在 VS 中加载 SOS,为什么不直接使用 Locals、Watch 或 Immediate 窗口来观看本地人呢?
    • 谢谢布赖恩,您的回答非常有用。我只想以最原生和最原始的方式查看堆栈上发生的事情。
    • 我在 VS 中使用 SOS 的经验有限,但我经常从 WinDbg 使用它。您还应该检查 sosex.dll 和 psscor2.dll。
    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 2019-01-19
    • 2023-02-06
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多