2010-04-09 14 views
1

Я использую SOS.dll в VisualStudio для отладки моей программы на 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!":

OS Id Тема: 0xf6c (3948)

ESP/REG Название объекта

Почему нет ничего лучше? Я думал, что должны быть аргументы i и локальная переменная j.

Спасибо за мой отвечать на мои наивные вопросы ...

ответ

3

!dumpstackobject дампов ссылки на стек к объектам. То есть вы не увидите типы значений с помощью этой команды. Используйте !clrstack -l, чтобы увидеть местных жителей (используйте -p, чтобы увидеть параметры, и -a для обоих).

+0

Спасибо, Брайан. Есть ли в SOS.dll команды для получения списка varibales в стеке? Нужно ли использовать WinDbg? – smwikipedia

+0

Имейте в виду, что локали/параметры могут храниться в регистрах, поэтому для оптимизированной сборки вы не сможете увидеть все детали - даже в WinDbg. –

+0

Кроме того, поскольку вы загружаете SOS в VS, почему бы просто не использовать окно Locals, Watch или Immediate для просмотра местных жителей? –

Смежные вопросы