Архив

Архив за 2008 год

Silverlight Отладка с помощью WinDbg и SOS

19 декабря 2008 Нет комментариев

Введение

В предыдущем посте Silverlight Отладка с Visual Studio, я показал, что Visual Studio представляет собой мощный и удобный инструмент для отладки управляемых приложений. Но для некоторых сложных сценариев отладки, например, утечки памяти, тупик, беглых процесс / нить, отладки ядра, а также расширенные удаленных / аварии / интерфейс отладки и т.д., WinDbg (или CDB, NTSD, Ы), как правило, предпочтительнее, если не единственный вариант.

Средства отладки для Windows,

Обзор

WinDbg входит в состав средств отладки для Windows, пакета:

image_thumb5

Хотя WinDbg является GUI программы, она в основном используется как отладчик командной строки, как (и часто) Ы, ЦКБ и NTSD, и один и тот же двигатель отладки и команд. Это очень мощный и расширяемый, особенно хорошо подходит для системы / низкоуровневой отладки драйверов, как и других компонентов операционной системы. Она требует хорошего знания аппаратных средств, операционной системы и компилятора, чтобы получить максимальную отдачу от инструментов. Это большой (или идеальный, я должен сказать :-) для родных отладки, с его обширной и расширяемой команды и графического пользовательского интерфейса. Управляемая поддержка отладки осуществляется через расширение отладки SOS, не так хорошо, как родной отладки, но есть огромное значение в том, в состоянии сделать комплексной отладки всей управляемых и собственных границ, так и для Silverlight, это единственный инструмент, который я отдаю себе отчет в , который может загрузить SOS и не интегрированы отладки.

Команды

WinDbg / CDB / NTSD / кд были вокруг в течение долгого времени, поэтому они очень хорошо документированы. Он настоятельно рекомендуем вам прочитать средств отладки для Windows, на microsoft.com и MSDN . Здесь я только дать краткий обзор своей команды, чтобы дать вам почувствовать и быстрого доступа. Все команды идут с помощью во время выполнения (через |?. Помощь |! Помочь [<cmd>] см. ниже), так что обзор, как правило, достаточно, чтобы получить работу.

WinDbg имеет три набора команд:

Стандартные команды

Прежде всего:

  • B * команд, чтобы установить / очистить / список / включить / отключить точки останова на адрес или доступа
  • D * Команды для исследования памяти (стек / кучу, локальные / глобальные переменные и параметры), E * Команда для изменения памяти и S * для поиска памяти
  • К * Команды для изучения стека вызовов
  • P, T, G * Команды для контроля исполнения

ниже? Команда выхода отличный обзор и частые ссылки для людей, использующих WinDbg / CDB / NTSD / Ы:

0:006>?

Открытое Debugger.chm для полной документации отладчик

B [C | D | E] [<bps>] - очистить / отключить / включить точку останова (ы)
BL - список точек останова
BA <access> <size> <addr> - набор процессоров останова
BP <address> - набор мягкой останова
D [тип] [<range>] - дамп памяти
DT [-п | у] [[MOD] имя!] [[-П | у] полях]
[Адрес] [-л список] [[] | с | я | а | г [#] | V] - дамп, используя информацию о типе
DV [<name>] - сбросить локальные переменные
E [тип] <address> [<values>] - ввод значений памяти
G [H | N] [= <address> [<address> ...]] - перейти
К <count> - StackTrace
КП <count> - StackTrace с исходными аргументами
LM [к | л | и | V] - список модулей
Л.Н. <expr> - список ближайших символов
Р [= <addr>] [<value>] - шаг за
Q - бросить курить
R [[<reg> [= <expr>]]] - вид или набор регистров
S [<opts>] <range> <values> - поиск памяти
SX [{е | D | я | п} [-с "CMD1"] [-c2 "cmd2"] [-х] {Исключение | события | *}] - фильтр событий
Т [= <address>] [<expr>] - след в
U [<range>] - дизассемблировать
версия - шоу отлаживаемого и отладочная версия
X [<* | Модуль>!] <* | Символ> - вид символов
? <expr> - дисплей выражение
? <expr> - дисплей C + + выражение
$ << Имя файла> - извлекать из командного файла

Нажмите Enter ...

<expr> унарные Ops: + - не горе DWO qwo пои привет низкой
двоичный Ops: + - * / мода (%) и (&) XOR (^) или (|)
сравнения: == (=) <> =
Операнды: число в текущем счисления, общественный символ, <reg>
<type>: B (байт), W (слово), г [с] (двойное [с символами]),
(ASCII), с (двойное и Char) и (Unicode), л (список)
F (флоат), D (двухместный), с | S (ASCII / Unicode строка)
д (quadword)
<pattern>: [! (п | <dll-name>)] <var-name> (? <var-name> может включать в себя и *)
<range>: <address> <address>
: <address> L <count>

Пользователь в режиме опций:
~ - Нити список статус
~ # С - по умолчанию набор нить
| - Список процессов статус
| # С - по умолчанию набор процессов

x86 вариантов:
DG <selector> - свалка селектор
<reg>: [е] топор, [е] Ьх, [е] си [е] ах, [е] си, [е] ди, [е] б.п., [е] зр [е] р [ е] й,
AL, AH, BL, BH, CL, CH, DL, DH, CS, DS, ES, FS, GS, SS
dr0, DR1, DR2, DR3, DR6, DR7
fpcw, fpsw, fptw, st0-ST7, mm0-mm7
xmm0-xmm7
<flag>: IOPL, в, д, если тс, SF, ZF, AF, PF, CF
<addr>: # <16-битной защиты в режиме [сегментов:] Адрес>,
И <V86-mode [seg:]address>

Открытое Debugger.chm для полной документации отладчик

Мета команды

Те, начинаются с точки, в основном, для продвинутых отладки. Некоторые важные команды, которые вы должны знать:

  • . Symfix и. Sympath для использования сервера символов
  • . Srcfix и. Srcpath для использования исходного сервера
  • . Нагрузки. Loadby. Выгрузки. Цепи. Setdll для управления расширениями отладки
  • . Сервер. Пульт дистанционного управления для удаленной отладки

Это стоит вашего времени, чтобы ознакомиться с сервера символов, исходный сервер и удаленной отладки, они сделают вашу жизнь намного проще. Ниже выхода помочь команде.:

0:006>. Помощь
. команды:
. Отказаться - отказаться от текущего процесса
. Allow_exec_cmds [0 | 1] - команды управления исполнения
. Allow_image_mapping [0 | 1] - управление по запросу файла образа отображения
. Apply_dbp [<options>] - добавить текущую точку останова данным государством
Регистрация контексте
. АНМ [<options>] - установить разборки вариантов
. Т-[<options>] - ясно разборки вариантов
. Приложить <proc> - придают <proc> в следующем исполнении
. Блок {<commands>} - скобки набор команд для выполнения вложенных
. Bpsync [0 | 1] - особое поведение точки останова для многопоточных debuggees
. Перерыв - вырваться из окружающего цикла
. Взлом - перерыв в КД
. Кэш [<options>] - виртуальное управление кэш-памятью
. Вызов Fn (<arg1>, <arg2>, ...) - запуск функции в отлаживаемом
. Catch {} <commands> - поймать сбои в командах
. Цепи - список текущих расширений
. Childdbg <0 | 1> - поворот дочерний процесс отладки включен или выключен
. Клиентов - список активных клиентов
. CloseHandle [<options>] [<handle>] - закрыть данную ручку
. Продолжать - продолжать окружающего цикла
. Copysym [<options>] <path> - копии текущих файлов символ в каталог
. Создать <command line> - создать новый процесс
. Createdir [<options>] [<path>] - возможности контроля процесса создания
. CXR <address> - свалка контексте записи на указанный адрес
к * после этого дает CXR стека
. Dbgdbg - отладчик для текущего отладчик
. Debug_sw_wow [0 | 1] - позволяет взаимодействие с программной эмуляции WOW
. Отделить - оторваться от текущего процесса / свалку
. Dml_file <file> - выход DML содержимое файла
. Dml_flow <start> <addr> - показать основной поток блок кода
. Dml_start [<options>] - судоходный обзор отладчик деятельности
. Do {} <commands> (<cond>) - выполнить <commands> до <cond> равна нулю
. Водителей - Эта команда была снята -. Использование "лм" или перезагрузка-л)
. Свалку [<options>] <filename> - создать файл дампа на хост-системе
. Dvalloc [<options>] <bytes> - VirtualAlloc памяти отлаживаемого
. Dvfree [<options>] <offset> <bytes> - VirtualFree памяти отлаживаемого
. Эхо ["<string>" | <string>] - отголосок строк
. Echotime - время выхода отладчик
. Echotimestamps [0 | 1] - переключить выход на метку события
. Ecxr - свалка контексте рекорд для текущего исключения
. Effmach [<machine>] - изменить текущий тип машины
. Еще {} <commands> - если / то / еще условное выполнение
. ELSIF (<cond>) {<commands>} [<else clauses>] - если / то / иначе условный
выполнение
. Enable_long_status [0 | 1] - свалки LONG типов по умолчанию базу
. Enable_unicode [0 | 1] - свалки массив USHORT / указатели и Юникод
. Endsrv <id> - отключить данный двигатель сервер
. Endpsrv - привести к удаленному серверу текущей сессии, чтобы выйти
. Enumtag - перечисляет доступные отмеченных данных
. Event_code - дисплей кэшированные инструкции событие
. Журнал событий - дисплей журнал последних событий
. События - отображения и выбора доступных событий
. Eventstr - отображать любом случае строки зарегистрирован отлаживаемого
. Exepath [<dir> [, ...]] - набор исполняемых пути поиска
. Exepath + [<dir> [, ...]] - добавления пути поиска исполняемых
. Выражение - контроль выражений
. Exptr <address> -. Делать EXR и РГК для EXCEPTION_POINTERS.
. EXR <address> - свалка исключением записи на указанный адрес
. Extmatch [<opts>] <pattern> - отображать все расширения соответствует шаблону
. Extpath <opts> [<dir> [, ...]] - установить пути расширения поиска
. Extpath + <opts> [<dir> [, ...]] - добавление расширения путь поиска
. Е + - набор текущего кадра стека вызывающей текущего кадра
. Е-- установить текущий фрейм стека вызываемой из текущего кадра
. Волокна <address> - задает контекст волокна по адресу
сбрасывает контексте, если адрес не указан
. Fiximports <pattern> - попытки связать импорт изображений
. Fnent <address> - свалка функцию входа для данного кода адреса
. Fnret <fnaddr> [<retval>] - дисплей отформатированный возвращаемого значения
. Для (<init>; <cond>; <step>) {} <commands> - выполнить <commands> и
<step> до <cond> является
нулевой
. Force_radix_output [0 | 1] - свалки целых типов по умолчанию базу
. Force_system_init [<options>] - силой до системы инициализации, если возможно
. Force_tb - насильственно позволит филиал трассировки
. Еогеасп [выбирает] (<alias> {<tcmds>}) {} <ecmds> - выполнить <ecmds> для
каждый знак в
выход <tcmds>
. FPO <options> - контроль коррекции FPO информации
. Рамы [<frame>] - установить текущий кадр стека для местных жителей
. Форматов <expr> - показывает результат выражения в различных форматах
. Помощь [<options>] - показать эту справку
. Holdmem <options> [диапазон] - хранить и сравнивать данные памяти
. Если (<cond>) {<commands>} [<else clauses>] - если / то / иначе условный
выполнение
. Ignore_missing_pages [0 | 1] - управление ядро резюме свалки отсутствует
Сообщение страницы ошибок
. Imgscan <options> - сканирование памяти для изображений, PE
. Jdinfo <jdi_addr> - интерпретировать информацию AeDebug
. Kframes <count> - набор по умолчанию глубина трассировки стека
. Kill - убить текущий процесс
. Lastevent - отображать последние события, которые произошли
. Оставить - выход включающего поймать.
. Линий - переключение нагрузки символ линии
. Нагрузка <name> - добавить это расширение DLL для расширения цепочки
. Loadby <name> <mod> - добавить расширение DLL в модуль
каталог расширения цепочки
. Язык [<locale>] - установить текущей локали
. Лог - дисплей журнала статус
. Logopen [<file>] - открыть новый файл журнала
. Logappend [<file>] - добавить в файл журнала
. Logclose - закрыть файл журнала
. Netsyms [0 | 1] - разрешить / запретить чистый символ пути
. Netuse [<options>] - управление чистых подключений
. NoShell - отключение команд оболочки
. Noversion - отключить проверку версии расширения
. Ofilter <pattern> - выходной фильтр отлаживаемого против заданному шаблону
. Ocommand <prefix> - удовольствие выход с данного префикса, как команда
. Opendump <file> - открыть файл дампа
. Outmask <mask> - бит в текущую маску выходной
. Outmask-<mask> - ясно бит в текущем маска выходной
. Pcmd [<options>] - контроль за приглашение команды
. Поп [<options>] - поп-государство
. Prefer_dml [0 | 1] - управление DML режим по умолчанию
. Printf "<format>", <args…> - форматированный вывод
. Процесс [<address>] - устанавливает неявный процесс
сброс по умолчанию, если не указан адрес
. Prompt_allow [<options>] - управление, какая информация может быть отображена
в командной строке
. Нажатием [<options>] - толчок состоянии
. Quit_lock [<options>] - замки сессии против неожиданного отказа от курения
. Readmem <file> <range> - чтение памяти сырья из файла
. Record_branches [0 | 1] - контроль записи процессора ветвлений
. Перезагрузки [<image.ext> [= <address>, <size>]] - перезагрузка символов
. Перезагрузки - запрашивать сессии перезагрузки
. Удаленный <pipename> - начало remote.exe сервер
. Безопасность [0 | 1] - запретить деятельность опасной для принимающей
. Send_file <options> - отправлять файлы на удаленном сервере
. <options> Сервер - сервер запуска двигателя
. Серверов - список активных серверов удаленного
. Setdll <name> - отладчик будет искать расширения в этой DLL первая
. Оболочки [<command>] - выполнять команды оболочки
. Show_read_failures [<opts>] - управление дополнительный выход отказ чтения
. Show_sym_failures [<opts>] - управление дополнительный выход символ неудачи
. Сна <milliseconds> - отладчик спит заданной длительности
полезно для предоставления доступа к машине, что это
на сломанной в NTSD-й
. Srcfix [<path extra>] - исправление источник путь поиска
. Srcfix + [<path extra>] - добавление фиксированного путь поиска источников
. Srcnoisy [0 | 1] - управление подробный источник выходной нагрузки
. Srcpath [<dir> [, ...]] - установить исходный путь поиска
. Srcpath + [<dir> [, ...]] - добавление источника путь поиска
. Step_filter [<opts>] ["<pattern> [; <pattern> ...]"] - модели Набор символов
пропустить при пошаговом
. Symfix [<localsym>] - исправление символ пути поиска
. Symfix + [<localsym>] - добавление фиксированного путь поиска символа
. Symopt <flags> - опции набора символов
. Symopt + <flags> - опции набора символов
. Symopt-<flags> - четкие варианты символа
. Sympath [<dir> [, ...]] - установить путь поиска символа
. Sympath + [<dir> [, ...]] - добавлять символ пути поиска
. Нить [<address>] - задает контекст нити по адресу
сброс контекста по умолчанию, если не указан адрес
. Время - отображает информацию сеанса
. TTIME - отображает информацию нить времени
. TList - список запущенных процессов
. Typeopt <flags> - Множество / четкие варианты типа
. Выгрузить <name> - удалить это расширение DLL из списка расширение библиотеки
. Unloadall - удалить все расширения библиотеки из списка расширений библиотеки
. После - проснуться sleep'ing отладчик.
. Время (<cond>) {} <commands> - выполнить <commands> время <cond> не равна нулю
. Writemem <file> <range> - пишите физической памяти в файл

Используйте ". Чч <command>" или открытого Debugger.chm в каталоге отладчики, чтобы получить
Подробную документацию по команде.

Расширение команды

Те, с начала!, Как правило, на определенной территории, как SOS расширение команды для управляемых отладки. Вы можете использовать! <ext>. Помощи к списку команд расширения, нравится! Exts.help. Для продвинутых отладки системы, такие как обнаружение утечек памяти, тупик и т.д., вы должны быть хорошо знакомы с тем, расширение команды.

СОС

Обзор

SOS является аббревиатурой от Сына Strike (не спрашивайте, почему), расширение отладки для управляемых отладки. Я считаю, что было изобретено CLR команды CLR отладки, так что была вокруг в течение долгого времени, и есть много полезной информации в Интернете. Некоторые Рекомендуемая литература:

Каждая версия среды CLR имеет собственную SOS (NET Framework 3.5 все еще использует CLR 2.0 и Silverlight имеет свои CLR.):

Каталог C: \ Program Files \ Средства отладки для Windows \ clr10
09/19/2007 7:01 вечера 948784 SOS.dll
1 файл (ы) 948 784 байт

Каталог C: \ Program Files \ Microsoft Silverlight \ 2.0.31005.0
10/05/2008 2:16 утра 495424 SOS.dll
1 файл (ы) 495 424 байт

Каталог C: \ Windows \ Microsoft.NET \ Framework \ v1.1.4322
07/15/2004 12:35 утра 319488 SOS.dll
1 файл (ы) 319 488 байт

Каталог C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727
07/27/2008 10:03 392184 SOS.dll
1 файл (ы) 392 184 байт


Команды

SOS во время выполнения помощь настолько велико, что вы почти не нуждаются в другой документ, кроме нескольких проб и ошибок и некоторое разочарование :-)

0:016>! Помощь
---------------------------
SOS является DLL отладчика расширения предназначены для помощи в отладке управляемого
программ. Функции, перечисленные категории, то примерно в порядке
значение. Сочетание имен популярных функций перечислены в скобках.
Тип »! Помощи <functionname>" для детальной информации по этой функции.

Объект экспертизы инспекции кода и стека
--------------------
DumpObj (делать) Темы
DumpArray (да) CLRStack
DumpStackObjects (DSO) IP2MD
DumpHeap U
DumpVC DumpStack
GCRoot EEStack
ObjSize GCInfo
FinalizeQueue EHInfo
PrintException (PE) COMState
TraverseHeap BPMD

Изучение структуры данных CLR диагностических утилит
--------------------
DumpDomain VerifyHeap
EEHeap VerifyObj
Name2EE FindRoots
SyncBlk HeapStat
DumpMT GCWhere
DumpClass ListNearObj (ЛНО)
DumpMD GCHandles
Token2EE GCHandleLeaks
EEVersion FinalizeQueue (F)
DumpModule FindAppDomain
ThreadPool SaveModule
DumpAssembly PROCINFO
DumpSigElem StopOnException (SOE)
DumpRuntimeTypes DumpLog
DumpSig VMMap
RCWCleanupList VMStat
DumpIL MinidumpMode
AnalyzeOOM (ао)

Изучение истории других GC
--------------------
HistInit FAQ
HistStats
HistRoot
HistObj
HistObjFind
HistClear

Демонстрация образцов Debug

Я буду использовать тот же самый простейший Silverlight приложения в предыдущем посте ( Silverlight Отладка С помощью Visual Studio ), чтобы продемонстрировать Отладка в WinDbg отладки с SOS:

image_thumb

Вот журнал отладки с моей аннотации (начинаются с / /):

/ / Создать символ путь использовать сервер символов
0:013>. Sympath
Символ путь поиска: <empty>
0:013> symfix C:. \ Users \ ningz \ AppData \ Local \ Temp \ Symbols
0:013>. Sympath
Символ путь поиска: SRV * C: \ Users \ ningz \ AppData \ Local \ Temp \ Symbols \ * \ символы \ символы

/ / Добавляем PDB путь для применения отлаживается
0:013> Sympath +. "C: \ Users \ ningz \ Documents \ Visual Studio 2008 \ Projects \ SilverlightApplication1 \ SilverlightApplication1 \ Bin \ Debug"
Символ путь поиска: SRV * C: \ Users \ ningz \ AppData \ Local \ Temp \ Symbols *
http://msdl.microsoft.com/download/symbols;
C: \ Users \ ningz \ Documents \ Visual Studio 2008 \ Projects \ SilverlightApplication1 \ SilverlightApplication1 \ Bin \ Debug

/ / Загрузить все символы
0:013>. Перезагрузки
Перезагрузка текущей модулей

/ / Создать источник путь для использования исходного сервера
0:013>. Srcpath
Источник путь поиска: <empty>
0:013>. Srcfix
Источник путь поиска: SRV *
0:013> srcpath +. "C: \ Users \ ningz \ Documents \ Visual Studio 2008 \ Projects \ SilverlightApplication1 \ SilverlightApplication1"
Источник путь поиска: SRV *, C: \ Users \ ningz \ Documents \ Visual Studio 2008 \ Projects \ SilverlightApplication1 \ SilverlightApplication1

/ / Загрузить SOS. Пожалуйста, обратите внимание:
/ / 1. кажется mscorwks заменяется CoreCLR в Silverlight
/ / 2. . вместо loadby, вы также можете использовать нагрузки. "C: \ Program Files \ Microsoft Silverlight \ 2.0.31005.0 \ SOS.dll"
0:013>. Loadby SOS CoreCLR
Loaded C: \ Program Files \ Microsoft Silverlight \ 2.0.31005.0 \ SOS расширение DLL

/ / Установить точки останова для кнопки обработчик события нажатия
0:013>! Bpmd SilverlightApplication1 SilverlightApplication1.Page.Button_Click
Найдено 1 методы ...
MethodDesc = 03983a30
Добавление до точки останова ...
0:013> бл
0 е 0428215b 0001 (0001) 0: ****
0:013> г
ModLoad: 70800000 7080c000 C: Windowssystem32dwmapi.dll

/ / Нажать на кнопку и ворваться в Отладка в WinDbg
Breakpoint 0 хит
*** ВНИМАНИЕ: Невозможно проверить контрольную сумму SilverlightApplication1.dll
! SilverlightApplication1 Button_Click:
04850398 55 PUSH EBP
Комплексная отладка управляется не поддерживает перечисление локальных переменных.
Смотрите http://dbg/managed.htm для более подробной информации.
Управляемый обработки кадров не удалось, HRESULT 0x80004005

/ / Сравнить! Потоков и ~ * выходной
0:005>! Темы / / список управляемых потоков только
Нитей: 3
UnstartedThread: 0
BackgroundThread: 3
PendingThread: 0
DeadThread: 0
Hosted Время: есть
PreEmptive GC Alloc замок
ID OSID ThreadOBJ государства GC контексте числа доменов APT исключений
5 1 1b08 043576e0 220 инвалидов 04f9f214: 04f9ffe8 06f529d8 0 STA
9 2 928 043689c8 B220 Enabled 00000000:00000000 0433c738 0 MTA (Finalizer)
10 3 1e8c 06f509d0 1220 включен 00000000:00000000 0433c738 0 УКН
0:005> ~ * / / список все темы
0 ID: 162c.1a28 Suspend: 1 Теб: 7ffde000 незамерзшей
Начало: Iexplore wWinMainCRTStartup (00a52d79)
Приоритет: 0 Класс приоритета: 32 Affinity: 3
2 ID: 162c.1020 Suspend: 1 Теб: 7ffdc000 незамерзшей
Начало: OLE32 CRpcThreadCache :: RpcWorkerThreadEntry (76dfe0cc)
Приоритет: 0 Класс приоритета: 32 Affinity: 3
3 ID: 162c.1e00 Suspend: 1 Теб: 7ffda000 незамерзшей
Начало: NTDLL TppWaiterpThread (778ab61b)
Приоритет: 0 Класс приоритета: 32 Affinity: 3
4 ID: 162c.1f00 Suspend: 1 Теб: 7ffd9000 незамерзшей
Начало: MSVCRT _endthreadex +0 x6f (76162da8)
Приоритет: 0 Класс приоритета: 32 Affinity: 3
. 5 ID: 162c.1b08 Suspend: 1 Теб: 7ffd8000 незамерзшей
Начало: IEFrame CTabWindow :: _TabWindowThreadProc (6c163fdb)
Приоритет: 0 Класс приоритета: 32 Affinity: 3
7 ID: 162c.170 Suspend: 1 Теб: 7ffd6000 незамерзшей
Начало: npctrl CXcpDispatcher :: DispatcherTimerCallback (6a6d16f4)
Приоритет: 0 Класс приоритета: 32 Affinity: 3
8 ID: 162c.1cd0 Suspend: 1 Теб: 7ffd5000 незамерзшей
Начало: CoreCLR DebuggerRCThread :: ThreadProcStatic (640eb5cd)
Приоритет: 0 Класс приоритета: 32 Affinity: 3
9 ID: 162c.928 Suspend: 1 Теб: 7ffd4000 незамерзшей
Начало: CoreCLR Thread :: intermediateThreadProc (63fb8e4f)
Приоритет: 0 Класс приоритета: 32 Affinity: 3
10 Id: 162c.1e8c Suspend: 1 Теб: 7ffd3000 незамерзшей
Начало: CoreCLR Thread :: intermediateThreadProc (63fb8e4f)
Приоритет: 0 Класс приоритета: 32 Affinity: 3
11 Id: 162c.1fac Suspend: 1 Теб: 7ffaf000 незамерзшей
Начало: agcore CMulticoreTaskScheduler :: WorkerThread (660547de)
Приоритет: 0 Класс приоритета: 32 Affinity: 3
12 Id: 162c.1b78 Suspend: 1 Теб: 7ffae000 незамерзшей
Начало: agcore CMulticoreTaskScheduler :: WorkerThread (660547de)
Приоритет: 0 Класс приоритета: 32 Affinity: 3
13 Id: 162c.1d18 Suspend: 1 Теб: 7ffdb000 незамерзшей
Начало: NTDLL RtlUserThreadStart (778c9a78)
Приоритет: 0 Класс приоритета: 32 Affinity: 3
Управляемый обработки кадров не удалось, HRESULT 0x80004005
Комплексная отладка управляется не поддерживает перечисление локальных переменных.
Смотрите http://dbg/managed.htm для более подробной информации.

/ / Сравнить! Clrstack и к выходной
0:005>! Clrstack-р / / список управляемых кадры стека только
OS Тема Id: 0x1b08 (5)
ESP EIP
0450f850 04800398 SilverlightApplication1.Page.Button_Click (System.Object, System.Windows.RoutedEventArgs)
ПАРАМЕТРЫ:
это (<CLR reg>) = 0x04f59c78
Отправитель (<CLR reg>) = 0x04f5b948
е (0x0450f854) = 0x04f9f1f0

0450f858 048cde0d System.Windows.Controls.Primitives.ButtonBase.OnClick ()
ПАРАМЕТРЫ:
это (0x0450f864) = 0x04f5b948

0450f870 048cdd10 System.Windows.Controls.Button.OnClick ()
ПАРАМЕТРЫ:
это = <No Data>

0450f880 048cdc3d
ПАРАМЕТРЫ:
это (0x0450f884) = 0x04f5b948
е (0x0450f880) = 0x04f9f188

0450f890 048cdba1 System.Windows.Controls.Control.OnMouseLeftButtonUp (System.Windows.Controls.Control, System.EventArgs)
ПАРАМЕТРЫ:
Ctrl = <No Data>
е = <No Data>

0450f8a0 0483a0e7 MS.Internal.JoltHelper.FireEvent (IntPtr, IntPtr, Int32, System.String)
ПАРАМЕТРЫ:
unmanagedObj (0x0450f8f8) = 0x04355c48
unmanagedObjArgs (0x0450f8f4) = 0x0707be00
argsTypeIndex (0x0450f928) = 0x000000a9
EventName (0x0450f924) = 0x04f9f16c

0450fa74 63ef17b0 [GCFrame: 0450fa74]
0450fb30 63ef17b0 [ContextTransitionFrame: 0450fb30]
0450fc28 63ef17b0 [UMThkCallFrame: 0450fc28]
0:005> KP / / список всех кадров стека
ChildEBP RetAddr
0450f868 048cde0d SilverlightApplication1! Button_Click (<HRESULT 0x80004001>)
0450f868 048cdd10 System_Windows! System.Windows.Controls.Primitives.ButtonBase.OnClick (<HRESULT 0x80004001>) +0 X5D
0450f878 048cdc3d System_Windows! System.Windows.Controls.Button.OnClick (<HRESULT 0x80004001>) +0 x48
0450f888 048cdba1 System_Windows! System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp (<HRESULT 0x80004001>) +0 x85
0450f898 0483a0e7 System_Windows! System.Windows.Controls.Control.OnMouseLeftButtonUp (<HRESULT 0x80004001>) +0 x41
0450f91c 63ef17b0 System_Windows! MS.Internal.JoltHelper.FireEvent (<HRESULT 0x80004001>) +0 x1b7
0450f934 63ef5f98 CoreCLR! CallDescrWorker +0 x33
0450f9b0 63f032bc CoreCLR! CallDescrWorkerWithHandler +0 x8e
0450f9d0 63f0345c CoreCLR! ForwardCallToManagedMethod +0 x55
0450faf4 63fc4abf CoreCLR! DoUMThunkCallWorker +0 x199
0450fbe0 04c513d2 CoreCLR! DoUMThunkCall +0 x1b4
ВНИМАНИЕ: Frame IP не в одном из известных модулей. Следующие кадры могут быть неправильными.
0450fc10 6607e0db 0x4c513d2
0450fc70 6a6dc1fc agcore! CCoreServices :: CLR_FireEvent +0 x183
Управляемый обработки кадров не удалось, HRESULT 0x80004005
0450fc84 6a6dc187 npctrl! CommonBrowserHost :: CLR_FireEvent +0 x2a
0450fcc8 6a6dc048 npctrl! CControlBase :: ScriptCallback +0 x366
0450fd08 6a6dc013 npctrl! CXcpDispatcher :: OnScriptCallback +0 х ^ Е
0450fd14 6a6dbfef npctrl! CXcpDispatcher :: OnWindowMessage +0 X3A
0450fd2c 7731f8d2 npctrl! CXcpDispatcher :: WindowProc +0 x7f
0450fd58 7731f794 USER32! InternalCallWinProc +0 x23
0450fdd0 77320008 USER32! UserCallWinProcCheckWow +0 x14b

/ / Изучить кучу, обратите внимание на удобство сильные типизированных кучу объектов,
/ / Вместо нетипизированные байты, как в родной куче
0:005>! DumpHeap типа SilverlightApplication1
Размер Адрес MT
04f4f31c 046336b0 36
04f59c78 04633a6c 68
всего 2 объектов
Статистика:
MT графа TotalSize Имя класса
046336b0 1 36 SilverlightApplication1.App
04633a6c 1 68 SilverlightApplication1.Page
Всего 2 объектов
0:005>! Сделать 04f59c78
Имя: SilverlightApplication1.Page
MethodTable: 04633a6c
EEClass: 0463196c
Размер: 68 (0x44) байт
Файл: SilverlightApplication1, Version = 1.0.0.0, культура = нейтральной, PublicKeyToken = NULL
Поля:
MT смещение поля типа VT Attr Значение имени
047d97a0 40000dc 4 ... al.NativeResource экземпляр 0 04f5a5c0 m_nativePtr
04853ab8 40000df 8 ... System.Windows]], экземпляр 0 00000000 _valueTable
047d9874 40000e0 с ... reTypeEventHelper экземпляр 0 04f5a600 _coreTypeEventHelper
04856388 40000e3 10 ... bject, Mscorlib]], экземпляр 0 04f79a58 _treeChildren
047ae03c 40000e4 14 ... rnal.IManagedPeer экземпляр 0 00000000 _treeParent
03d50a90 40000dd 2B0 System.IntPtr 1 общей статической StaticNativePointer
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 00000000 <<
03d50f28 40000de 2В4 System.Boolean 1 выложенных статический _isCoreCreate
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 0 <<
047ae384 40000e1 8 .... DependencyObject 0 общей статической PropertyReferencesHolder
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f489b8 <<
04661618 40000e2 с ... 0 flection.Assembly общей статической _executingAssembly
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 00000000 <<
047d0b90 40000f1 18 ... rs.AutomationPeer экземпляр 0 00000000 m_pAP
047d7404 40000e8 10 ... 0 ependencyProperty общей статической OpacityProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a4a8 <<
047d7404 40000e9 14 ... 0 ependencyProperty общей статической ClipProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a4d0 <<
047d7404 40000ea 18 ... 0 ependencyProperty общей статической RenderTransformProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a4f8 <<
047d7404 40000eb 1c ... ependencyProperty 0 общей статической OpacityMaskProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a50c <<
047d7404 40000ec 20 ... 0 ependencyProperty общей статической RenderTransformOriginProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a534 <<
047d7404 40000ed 24 ... 0 ependencyProperty общей статической IsHitTestVisibleProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a548 <<
047d7404 40000ee 28 ... 0 ependencyProperty общей статической VisibilityProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a570 <<
047d7404 40000ef 2, ... 0 ependencyProperty общей статической RenderSizeProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a598 <<
047d7404 40000f0 30 ... 0 ependencyProperty общей статической UseLayoutRoundingProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a5ac <<
00000000 4000108 1c, экземпляр 0 00000000 BindingValidationError
04856ae4 400010a 20 ... angedEventHandler экземпляр 0 00000000 DPChanged
048bc8a4 400010b 24 ... angedEventHandler экземпляр 0 00000000 DataContextChanged
03d50f28 400010c 2с System.Boolean 1 экземпляр 0 _isDataContextBound
0481f43c 400010d 28 ... angedEventHandler экземпляр 0 00000000 _sizeChanged
047d7404 40000f2 34 ... 0 ependencyProperty общей статической TriggersProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a144 <<
047d7404 40000f3 38 ... 0 ependencyProperty общей статической ResourcesProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a158 <<
047d7404 40000f4 3c ... ependencyProperty 0 общей статической LanguageProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a180 <<
047d7404 40000f5 40 ... 0 ependencyProperty общей статической ActualWidthProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a194 <<
047d7404 40000f6 44 ... 0 ependencyProperty общей статической ActualHeightProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a1a8 <<
047d7404 40000f7 48 ... 0 ependencyProperty общей статической WidthProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a1bc <<
047d7404 40000f8 4с ... ependencyProperty 0 общей статической HeightProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a1d0 <<
047d7404 40000f9 50 ... 0 ependencyProperty общей статической MinWidthProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a1e4 <<
047d7404 40000fa 54 ... 0 ependencyProperty общей статической MaxWidthProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a1f8 <<
047d7404 40000fb 58 ... 0 ependencyProperty общей статической MinHeightProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a20c <<
047d7404 40000fc 5c ... ependencyProperty 0 общей статической MaxHeightProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a220 <<
047d7404 40000fd 60 ... 0 ependencyProperty общей статической HorizontalAlignmentProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a234 <<
047d7404 40000fe 64 ... 0 ependencyProperty общей статической VerticalAlignmentProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a248 <<
047d7404 40000ff 68 ... 0 ependencyProperty общей статической MarginProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a25c <<
047d7404 4000100 6c ... ependencyProperty 0 общей статической StyleProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a284 <<
047d7404 4000101 70 ... 0 ependencyProperty общей статической ParentProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a2ac <<
047d7404 4000102 74 ... 0 ependencyProperty общей статической NameProperty
>> Домена: Соотношение 0433c738: NotInit 06f529d8: 04f5a2c0 <<
047d7404 4000103 78 ...ependencyProperty 0 shared static TagProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a2d4 <<
047d7404 4000104 7c ...ependencyProperty 0 shared static TagInternalProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a2fc <<
04851464 4000105 80 ...ndows.RoutedEvent 0 shared static LoadedEvent
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a420 <<
047d7404 4000106 84 ...ependencyProperty 0 shared static CursorProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a440 <<
047d7404 4000107 88 ...ependencyProperty 0 shared static InstanceDelegateStoreProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a468 <<
047d7404 4000109 8c ...ependencyProperty 0 shared static DataContextProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a494 <<
047a1e2c 400010e 90 ...rence, mscorlib]] 0 shared static _staticDelegateList
>> Domain:Value 0433c738:NotInit 06f529d8:00000000 <<
00000000 4000264 30 ...angedEventHandler 0 instance 00000000 IsEnabledChanged
047d7404 4000252 430 ...ependencyProperty 0 shared static IsTabStopProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59ce4 <<
047d7404 4000253 434 ...ependencyProperty 0 shared static TabIndexProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59cf8 <<
047d7404 4000254 438 ...ependencyProperty 0 shared static TemplateProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d20 <<
047d7404 4000255 43c ...ependencyProperty 0 shared static TabNavigationProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d48 <<
047d7404 4000256 440 ...ependencyProperty 0 shared static PaddingProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d70 <<
047d7404 4000257 444 ...ependencyProperty 0 shared static HorizontalContentAlignmentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d98 <<
047d7404 4000258 448 ...ependencyProperty 0 shared static VerticalContentAlignmentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59dc0 <<
047d7404 4000259 44c ...ependencyProperty 0 shared static BackgroundProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59de8 <<
047d7404 400025a 450 ...ependencyProperty 0 shared static BorderBrushProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59dfc <<
047d7404 400025b 454 ...ependencyProperty 0 shared static BorderThicknessProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e10 <<
047d7404 400025c 458 ...ependencyProperty 0 shared static FontSizeProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e24 <<
047d7404 400025d 45c ...ependencyProperty 0 shared static FontFamilyProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e4c <<
047d7404 400025e 460 ...ependencyProperty 0 shared static ForegroundProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e60 <<
047d7404 400025f 464 ...ependencyProperty 0 shared static FontWeightProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e88 <<
047d7404 4000260 468 ...ependencyProperty 0 shared static FontStyleProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59eb0 <<
047d7404 4000261 46c ...ependencyProperty 0 shared static FontStretchProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59ed8 <<
047d7404 4000262 470 ...ependencyProperty 0 shared static DefaultStyleKeyProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59eec <<
047d7404 4000263 474 ...ependencyProperty 0 shared static IsEnabledProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59f00 <<
04857f14 4000265 478 ... System.Windows]] 0 shared static _resourceDictionaryCache
>> Domain:Value 0433c738:NotInit 06f529d8:04f5cae4 <<
03cf5668 4000266 47c System.Object[] 0 shared static _controlDelgates
>> Domain:Value 0433c738:NotInit 06f529d8:04f59f14 <<
047d7404 4000501 77c ...ependencyProperty 0 shared static ContentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59cd0 <<
04852580 4000002 34 ...ows.Controls.Grid 0 instance 04f79770 LayoutRoot
04852a10 4000003 38 ...s.Controls.Button 0 instance 04f5b948 button
03d50f28 4000004 3c System.Boolean 1 instance 1 _contentLoaded

// two lines above is the button object of the page object
// remember its address 04f5b948 , since we will refer to it later
// we can get the same address for the button object via dumpheap command:
0:005> !dumpheap -mt 04852a10
Address MT Size
04f5b948 04852a10 92
total 1 objects
Статистика:
MT Count TotalSize Class Name
04852a10 1 92 System.Windows.Controls.Button
Total 1 objects
0:005> !gcwhere 04f5b948 // button is in gen0, since there is no GC yet
Address Gen Heap segment begin allocated size
04f5b948 0 0 04f40000 04f41000 04f9fff4 0x5c(92)
0:005> !gcroot 04f5b948 // see who's holding reference to the button object
Note: Roots found on stacks may be false positives. Run "!help gcroot" for
more info.
// registry references
ecx:Root: 04f59c78(SilverlightApplication1.Page)->
04f5b948(System.Windows.Controls.Button)->
edx:Root: 04f5b948(System.Windows.Controls.Button)->
// stack references
Scan Thread 5 OSTHread 1b08
ESP:450f860:Root: 04f5ca18(System.Windows.RoutedEventHandler)->
04f59c78(SilverlightApplication1.Page)->
04f5b948(System.Windows.Controls.Button)->
ESP:450f864:Root: 04f5b948(System.Windows.Controls.Button)->
ESP:450f874:Root: 04f5b948(System.Windows.Controls.Button)->
ESP:450f884:Root: 04f5b948(System.Windows.Controls.Button)->
ESP:450f894:Root: 04f5b948(System.Windows.Controls.Button)->
ESP:450f8d4:Root: 04f5b948(System.Windows.Controls.Button)->
ESP:450f8e4:Root: 04f5b948(System.Windows.Controls.Button)->
Scan Thread 9 OSTHread 928
Scan Thread 10 OSTHread 1e8c
// domain references
DOMAIN(06F529D8):HANDLE(Pinned):46412f8:Root: 05f44260(System.Object[])->
04f45234(System.Collections.Generic.List`1[[System.Object, mscorlib]])->
04f59980(System.Object[])->
04f59c78(SilverlightApplication1.Page)->
04f5b948(System.Windows.Controls.Button)->
Managed frame processing failed, HRESULT 0x80004005
Integrated managed debugging does not support enumeration of local variables.
See http://dbg/managed.htm for more details.

// examine the button object itself
0:005> !do 04f5b948
Name: System.Windows.Controls.Button
MethodTable: 04852a10
EEClass: 0482e5f0
Size: 92(0x5c) bytes
File: c:\Program Files\Microsoft Silverlight\2.0.31005.0\System.Windows.dll
Fields:
MT Field Offset Type VT Attr Value Name
047d97a0 40000dc 4 ...al.NativeResource 0 instance 04f5bd58 m_nativePtr
04853ab8 40000df 8 ... System.Windows]] 0 instance 04f5c0bc _valueTable
047d9874 40000e0 c ...reTypeEventHelper 0 instance 04f5bd88 _coreTypeEventHelper
04856388 40000e3 10 ...bject, mscorlib]] 0 instance 04f5bee8 _treeChildren
047ae03c 40000e4 14 ...rnal.IManagedPeer 0 instance 04f79770 _treeParent
03d50a90 40000dd 2b0 System.IntPtr 1 shared static StaticNativePointer
>> Domain:Value 0433c738:NotInit 06f529d8:00000000 <<
03d50f28 40000de 2b4 System.Boolean 1 shared static _isCoreCreate
>> Domain:Value 0433c738:NotInit 06f529d8:0 <<
047ae384 40000e1 8 ....DependencyObject 0 shared static PropertyReferencesHolder
>> Domain:Value 0433c738:NotInit 06f529d8:04f489b8 <<
04661618 40000e2 c ...flection.Assembly 0 shared static _executingAssembly
>> Domain:Value 0433c738:NotInit 06f529d8:00000000 <<
047d0b90 40000f1 18 ...rs.AutomationPeer 0 instance 00000000 m_pAP
047d7404 40000e8 10 ...ependencyProperty 0 shared static OpacityProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a4a8 <<
047d7404 40000e9 14 ...ependencyProperty 0 shared static ClipProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a4d0 <<
047d7404 40000ea 18 ...ependencyProperty 0 shared static RenderTransformProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a4f8 <<
047d7404 40000eb 1c ...ependencyProperty 0 shared static OpacityMaskProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a50c <<
047d7404 40000ec 20 ...ependencyProperty 0 shared static RenderTransformOriginProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a534 <<
047d7404 40000ed 24 ...ependencyProperty 0 shared static IsHitTestVisibleProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a548 <<
047d7404 40000ee 28 ...ependencyProperty 0 shared static VisibilityProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a570 <<
047d7404 40000ef 2c ...ependencyProperty 0 shared static RenderSizeProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a598 <<
047d7404 40000f0 30 ...ependencyProperty 0 shared static UseLayoutRoundingProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a5ac <<
00000000 4000108 1c 0 instance 00000000 BindingValidationError
04856ae4 400010a 20 ...angedEventHandler 0 instance 00000000 DPChanged
048bc8a4 400010b 24 ...angedEventHandler 0 instance 00000000 DataContextChanged
03d50f28 400010c 2c System.Boolean 1 instance 0 _isDataContextBound
0481f43c 400010d 28 ...angedEventHandler 0 instance 00000000 _sizeChanged
047d7404 40000f2 34 ...ependencyProperty 0 shared static TriggersProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a144 <<
047d7404 40000f3 38 ...ependencyProperty 0 shared static ResourcesProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a158 <<
047d7404 40000f4 3c ...ependencyProperty 0 shared static LanguageProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a180 <<
047d7404 40000f5 40 ...ependencyProperty 0 shared static ActualWidthProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a194 <<
047d7404 40000f6 44 ...ependencyProperty 0 shared static ActualHeightProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a1a8 <<
047d7404 40000f7 48 ...ependencyProperty 0 shared static WidthProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a1bc <<
047d7404 40000f8 4c ...ependencyProperty 0 shared static HeightProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a1d0 <<
047d7404 40000f9 50 ...ependencyProperty 0 shared static MinWidthProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a1e4 <<
047d7404 40000fa 54 ...ependencyProperty 0 shared static MaxWidthProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a1f8 <<
047d7404 40000fb 58 ...ependencyProperty 0 shared static MinHeightProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a20c <<
047d7404 40000fc 5c ...ependencyProperty 0 shared static MaxHeightProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a220 <<
047d7404 40000fd 60 ...ependencyProperty 0 shared static HorizontalAlignmentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a234 <<
047d7404 40000fe 64 ...ependencyProperty 0 shared static VerticalAlignmentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a248 <<
047d7404 40000ff 68 ...ependencyProperty 0 shared static MarginProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a25c <<
047d7404 4000100 6c ...ependencyProperty 0 shared static StyleProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a284 <<
047d7404 4000101 70 ...ependencyProperty 0 shared static ParentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a2ac <<
047d7404 4000102 74 ...ependencyProperty 0 shared static NameProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a2c0 <<
047d7404 4000103 78 ...ependencyProperty 0 shared static TagProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a2d4 <<
047d7404 4000104 7c ...ependencyProperty 0 shared static TagInternalProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a2fc <<
04851464 4000105 80 ...ndows.RoutedEvent 0 shared static LoadedEvent
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a420 <<
047d7404 4000106 84 ...ependencyProperty 0 shared static CursorProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a440 <<
047d7404 4000107 88 ...ependencyProperty 0 shared static InstanceDelegateStoreProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a468 <<
047d7404 4000109 8c ...ependencyProperty 0 shared static DataContextProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5a494 <<
047a1e2c 400010e 90 ...rence, mscorlib]] 0 shared static _staticDelegateList
>> Domain:Value 0433c738:NotInit 06f529d8:00000000 <<
00000000 4000264 30 ...angedEventHandler 0 instance 00000000 IsEnabledChanged
047d7404 4000252 430 ...ependencyProperty 0 shared static IsTabStopProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59ce4 <<
047d7404 4000253 434 ...ependencyProperty 0 shared static TabIndexProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59cf8 <<
047d7404 4000254 438 ...ependencyProperty 0 shared static TemplateProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d20 <<
047d7404 4000255 43c ...ependencyProperty 0 shared static TabNavigationProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d48 <<
047d7404 4000256 440 ...ependencyProperty 0 shared static PaddingProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d70 <<
047d7404 4000257 444 ...ependencyProperty 0 shared static HorizontalContentAlignmentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59d98 <<
047d7404 4000258 448 ...ependencyProperty 0 shared static VerticalContentAlignmentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59dc0 <<
047d7404 4000259 44c ...ependencyProperty 0 shared static BackgroundProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59de8 <<
047d7404 400025a 450 ...ependencyProperty 0 shared static BorderBrushProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59dfc <<
047d7404 400025b 454 ...ependencyProperty 0 shared static BorderThicknessProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e10 <<
047d7404 400025c 458 ...ependencyProperty 0 shared static FontSizeProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e24 <<
047d7404 400025d 45c ...ependencyProperty 0 shared static FontFamilyProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e4c <<
047d7404 400025e 460 ...ependencyProperty 0 shared static ForegroundProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e60 <<
047d7404 400025f 464 ...ependencyProperty 0 shared static FontWeightProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59e88 <<
047d7404 4000260 468 ...ependencyProperty 0 shared static FontStyleProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59eb0 <<
047d7404 4000261 46c ...ependencyProperty 0 shared static FontStretchProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59ed8 <<
047d7404 4000262 470 ...ependencyProperty 0 shared static DefaultStyleKeyProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59eec <<
047d7404 4000263 474 ...ependencyProperty 0 shared static IsEnabledProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f59f00 <<
04857f14 4000265 478 ... System.Windows]] 0 shared static _resourceDictionaryCache
>> Domain:Value 0433c738:NotInit 06f529d8:04f5cae4 <<
03cf5668 4000266 47c System.Object[] 0 shared static _controlDelgates
>> Domain:Value 0433c738:NotInit 06f529d8:04f59f14 <<
03cf44e8 40002b4 34 System.Object 0 instance 00000000 _treeContent
047d7404 40002b3 530 ...ependencyProperty 0 shared static ContentTemplateProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5bd30 <<
047d7404 40002b5 534 ...ependencyProperty 0 shared static ContentProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5bd44 <<
03d50f28 40005aa 40 System.Boolean 1 instance 1 _isLoaded
03d50f28 40005ab 41 System.Boolean 1 instance 1 _isMouseCaptured
03d50f28 40005ac 42 System.Boolean 1 instance 0 _isSpaceKeyDown
03d50f28 40005ad 43 System.Boolean 1 instance 0 _isMouseLeftButtonDown
04852208 40005ae 48 System.Windows.Point 1 instance 04f5b990 _mousePosition
048b5f98 40005af 38 ...mation.Storyboard 0 instance 00000000 _currentState
03d50f28 40005b0 44 System.Boolean 1 instance 0 _suspendStateChanges
0481fae0 40005b1 3c ...outedEventHandler 0 instance 04f5ca18 Click
047d7404 40005a6 7e0 ...ependencyProperty 0 shared static ClickModeProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5ba7c <<
047d7404 40005a7 7e4 ...ependencyProperty 0 shared static IsFocusedProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5bb38 <<
047d7404 40005a8 7e8 ...ependencyProperty 0 shared static IsMouseOverProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5bbd8 <<
047d7404 40005a9 7ec ...ependencyProperty 0 shared static IsPressedProperty
>> Domain:Value 0433c738:NotInit 06f529d8:04f5bc40 <<

// dump button.Click field (9 lines above)
0:005> !do 04f5ca18
Name: System.Windows.RoutedEventHandler
MethodTable: 0481fae0
EEClass: 0482c99c
Size: 32(0x20) bytes
File: c:\Program Files\Microsoft Silverlight\2.0.31005.0\System.Windows.dll
Fields:
MT Field Offset Type VT Attr Value Name
03cf44e8 40001e0 4 System.Object 0 instance 04f59c78 _target
04663c58 40001e1 8 ...ection.MethodBase 0 instance 00000000 _methodBase
03d50a90 40001e2 c System.IntPtr 1 instance 463c08c _methodPtr
03d50a90 40001e3 10 System.IntPtr 1 instance 0 _methodPtrAux
03cf44e8 40001e4 14 System.Object 0 instance 00000000 _invocationList
03d50a90 40001e5 18 System.IntPtr 1 instance 0 _invocationCount

0:005> !do -nofields 04f59c78 // verify _target is page
Name: SilverlightApplication1.Page
MethodTable: 04633a6c
EEClass: 0463196c
Size: 68(0x44) bytes
File: SilverlightApplication1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

// verify _methodPtr points to Button_Click
// see how they are all linked together
0:005> ln 463c08c
(0463c08c) SilverlightApplication1.Page.Button_Click(System.Object, System.Windows.RoutedEventArgs)
0:005> u 463c08c // jit-ed method stub
SilverlightApplication1.Page.Button_Click(System.Object, System.Windows.RoutedEventArgs):
0463c08c b8303a6304 mov eax,4633A30h
0463c091 89ed mov ebp,ebp
0463c093 e900431c00 jmp SilverlightApplication1!Button_Click ( 04800398 )
0463c098 0000 add byte ptr [eax],al
0463c09a 0000 add byte ptr [eax],al
0463c09c 0000 add byte ptr [eax],al
0463c09e 0000 add byte ptr [eax],al
0463c0a0 0000 add byte ptr [eax],al
0:005> u eip // jit-ed native code
SilverlightApplication1!Button_Click:
04800398 55 push ebp
04800399 8bec mov ebp,esp
0480039b 83ec08 sub esp,8
0480039e 894dfc mov dword ptr [ebp-4],ecx
048003a1 8955f8 mov dword ptr [ebp-8],edx
048003a4 833d7435630400 cmp dword ptr ds:[4633574h],0
048003ab 7405 je SilverlightApplication1!Button_Click+0x1a (048003b2)
048003ad e8862a895f call coreclr!JIT_DbgIsJustMyCode (64092e38)
0:005> !ip2md 04800398
MethodDesc: 04633a30
Method Name: SilverlightApplication1.Page.Button_Click(System.Object, System.Windows.RoutedEventArgs)
Class: 0463196c
MethodTable: 04633a6c
mdToken: 06000008
Module: 046333b4
IsJitted: yes
CodeAddr: 04800398
0:005> !dumpil 04633a30
ilAddr = 047e03fe
IL_0000: nop
IL_0001: ret

When I have time, I may write a blog post on CLR internals, to demonstrate how objects are laid out in memory, how method calls are dispatched etc.

Заключение

Это длинный пост, но все же едва составляют обзор WinDbg и SOS. Хорошее понимание CLR важно для кодирования и отладки, WinDbg с SOS является лучшим инструментом для изучения CLR и делают передовые отладки. Надеюсь, что это короткое еще длинный пост поможет вам начать работу в изучении CLR и Silverlight. Спасибо!

Technorati Теги: , , , ,
Tags: , , , Категории: Debug , Silverlight Tags: , , ,