Отладочные данные, которые не отображаются, могут означать, что раздел исполняемого файла, который содержит отладочную информацию, не был отображен в памяти. Если это аварийный дамп, ваши возможности ограничены, но если это живой сеанс отладки. Вы можете использовать команду WinDbg .pagein для получения данных. Для этого вам нужно знать адрес страницы. Если вы используете команду! Dh на начальном адресе модуля (который вы можете увидеть с помощью lm - в моем случае, lm mmsvcr90 для msvcr90.dll), вы можете увидеть что-то вроде это (прокручивая пути вниз):
Debug Directories(1)
Type Size Address Pointer
cv 29 217d0 20bd0 Can't read debug data cb=0
Это показывает, что данные отладки по смещению 217d0 от начала модуля имеют длину 29. Если вы попытаетесь сбросить эти байты, вы увидите (78520000 - начальный адрес модуля):
kd> db 78520000+217d0 l29
785417d0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
785417e0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ?? ????????????????
785417f0 ?? ?? ?? ?? ?? ?? ?? ??-?? ?????????
Если вы выполните .pagein / p 82218b90 785417d0, то F5, когда отладчик перестанет работать, вы увидите (82218b90 - это адрес _EPROCESS процесса, который я отлаживаю):
kd> db 78520000+217d0 l29
785417d0 52 53 44 53 3f d4 6e 7a-e8 62 44 48 b2 54 ec 49 RSDS?.nz.bDH.T.I
785417e0 ae f1 07 8c 01 00 00 00-6d 73 76 63 72 39 30 2e ........msvcr90.
785417f0 69 33 38 36 2e 70 64 62-00 i386.pdb.
Теперь выполнение .reload / f msvcr90.dll загрузит символы. Для аварийного дампа, если вы можете найти недостающие байты 0x29 (возможно, из другого дампа), вы сможете вставить их и загрузить символы таким образом.