Есть ли простой способ посмотреть пары ключ-значение в словаре с помощью sos?

Я использую SOS.dll через WinDBG, просматривая аварийный дамп. Учитывая адрес объекта Dictionary, есть ли простой способ сбросить его содержимое, например..

Key1 -> Value1
Key2 -> Value2
...
KeyN -> ValueN

Я вижу, что нет команды !DumpDictionary :(


person noctonura    schedule 25.04.2012    source источник


Ответы (1)


Нет, но PSSCOR2/4 предлагает некоторую поддержку коллекций. Посмотрите, в частности, на !dc. SOSEX поддерживает это: !mdt -e:2. Эта команда предлагает сбросить указанный объект и расширить его на 2 уровня.

person Steve Johnson    schedule 25.04.2012
comment
Я попробовал использовать общий словарь, но он пожаловался: 0:012› !do 014ba5d0 Name: System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Int32, mscorlib]] 0:012› !dc 014ba5d0 Сбор дампа Сбора пройден. 0x014ba5d0 не является поддерживаемым объектом коллекции. Цепочка показывает: psscor4: изображение 4.0.0.4, API 1.0.0, построено Вт, 01 февраля, 15:39:38 2011 - person Marc Sherman; 26.04.2012
comment
Хорошо, я думал, что !dc поддерживает словарь. Попробуйте !sosex.mdt -e:2 или -e:3. - person Steve Johnson; 27.04.2012
comment
Это сработало! И похоже, что у одного из моих разработчиков есть ошибка, так как ключ равен нулю: 0:012> !mdt 014ba5d0 -e:3 014ba5d0 (System.Collections.Generic.Dictionary2[[System.String, mscorlib],[System.Int32, mscorlib]]) Count = 1 [0] (System.Collections.Generic.Dictionary2+Entry[[System.String, mscorlib],[System.Int32 , mscorlib]]) VALTYPE (MT=73a90790, ADDR=014be4f0) ключ: NULL (System.__Canon) значение: 0x0 (System.Int32) - person Marc Sherman; 27.04.2012
comment
Остерегайтесь взглянуть на свойство подсчета словаря. Поскольку выделение KeyValuePair Collection является динамическим, платформа выделяет больше фрагментов (чтобы выполнять меньше распределений). В моем случае Dictionary.count = 60d и моя коллекция записей состоит из 89 элементов. Каждый элемент с 61-го по 89-й является нулевым (ключ и значение). - person Benjamin Baumann; 05.12.2013