windbg - модуль, не загружающий dll, не найден в списке изображений

Я пытаюсь получить правильный стек вызовов для необработанного исключения в моем приложении VS2010 .net4 с помощью windbg. Основная программа - это консольное приложение. Эта dll правильно загружает символы. В том же каталоге у меня есть dll + соответствующий pdb, который не загружается.

Я запускаю приложение на Windows Server 2008 R2, 64 бит (VS не установлен). Но приложение было скомпилировано на 32 бит. Я использую отладчик winX86 для подключения к процессу.

Я загрузил sosex, который поддерживает .net 4, с http://www.stevestechspot.com/ (32-разрядная версия version) версия sos.dll (из "C: \ Program Files (x86) \ Debugging Tools for Windows (x86) \ clr10 \ sos.dll") - 6.12.2.633.

Выпущены следующие команды:
sympath + "... папка exe и dll"
.loadby sos clr
.load sosex.dll

При запуске! Mk получаю следующее:

Thread 0:
     ESP      EIP
00:U 0016ec6c 5f636578 0x5f636578
01:U 0016ec70 05f1380f SN!SN_MedistoreEngine::FetchNotes+0x13f [v:\mp\mp\src\sn\sn_medistoreengine.cpp @ 59]
02:M 0016edbc 07dd0db1 SN_Bridge.SNB_bridge.fetch_notes(IOD_Msg*, System.String, System.String, Boolean)(+0x4a IL)(+0x131 Native) [v:\mp\portal\commonutils\src\snb\snb_bridge.cpp, @ 142,0]
03:M 0016ef24 055bfde5 SN_Bridge.SNB_bridge.FetchNotesByStudyUId(System.String, System.String, System.Collections.Generic.List`1<SN_Bridge.SNB_StickyNote>)(+0x25 IL)(+0x55 Native) [v:\mp\portal\commonutils\src\snb\snb_bridge.cpp, @ 296,0]
04:M 0016efb0 055bfd22 
"xxx.Services.StickyNotes.dll" was not found in the image list.
Debugger will attempt to load "xxx.Services.StickyNotes.dll" at given base 00000000.

Please provide the full image name, including the extension (i.e. kernel32.dll)
for more reliable results.Base address and size overrides can be given as
.reload <image.ext>=<base>,<size>.
Unable to add module at 00000000

"xxx.ni.Services.StickyNotes.dll" was not found in the image list.
Debugger will attempt to load "xxx.ni.Services.StickyNotes.dll" at given base 00000000.

Please provide the full image name, including the extension (i.e. kernel32.dll)
for more reliable results.Base address and size overrides can be given as
.reload <image.ext>=<base>,<size>.
Unable to add module at 00000000
xxx.Services.StickyNotes.StickyNotesLogic.StickyNotesByStudyID(System.String, System.String, System.String)(+0x1d IL)(+0x52 Native)
05:M 0016efcc 055ba0ab SNConsole.Program.Main(System.String[])(+0x101 IL)(+0x24b Native) [D:\Documents and Settings\tamar\My Documents\Visual Studio 2010\Projects\SNConsole\Program.cs, @ 48,17]
06:U 0016f02c 72da21db clr+0x21db
07:U 0016f034 72dae021 clr!DllUnregisterServerInternal+0x8025
08:U 0016f090 72dbc58d clr!DllUnregisterServerInternal+0x16591

При запуске! Clrstack получаю следующее:

PDB symbol for clr.dll not loaded
OS Thread Id: 0x2984 (0)
Child SP IP       Call Site
0016edc8 5f636578 [InlinedCallFrame: 0016edc8] 
0016edc4 07dd0db1 SN_Bridge.SNB_bridge.fetch_notes(IOD_Msg*, System.String, System.String, Boolean) [v:\mp\portal\commonutils\src\snb\snb_bridge.cpp @ 142]
0016ef30 055bfde5 SN_Bridge.SNB_bridge.FetchNotesByStudyUId(System.String, System.String, System.Collections.Generic.List`1<SN_Bridge.SNB_StickyNote>) [v:\mp\portal\commonutils\src\snb\snb_bridge.cpp @ 296]
0016efb0 055bfd22 xxx.Services.StickyNotes.StickyNotesLogic.StickyNotesByStudyID(System.String, System.String, System.String)
0016efcc 055ba0ab SNConsole.Program.Main(System.String[]) [D:\Documents and Settings\tamar\My Documents\Visual Studio 2010\Projects\SNConsole\Program.cs @ 48]
0016f25c 72da21db [GCFrame: 0016f25c]

Как видите, в обоих случаях я получаю имя файла + номер строки в стеке, за исключением строки xxx.Services.StickyNotes.dll.

Я пробовал: .realod / f "" c: ... \ xxx.Services.StickyNotes.dll " - те же ошибки и
ld" c: ... \ xxx.Services.StickyNotes.dll ", в результате чего

Нет соответствующих модулей 'c: ... \ Bin \ xxx.Services.StickyNotes.dll'

использование! sym noisy не помогло, я думаю, он даже не пытается загрузить pdb, поскольку сам модуль не загружен.

Я не могу понять, почему эта конкретная dll не загружается. SN_Console.exe и SNB_Bridge.dll загружаются без проблем из одного и того же каталога. (Меня не интересует само исключение, я заложил код, который создает его. Проблема заключается в настройке хорошей среды отладки).

Заранее спасибо, Тамар


person tamar_el    schedule 21.12.2010    source источник


Ответы (2)


Мне довелось ответить на этот вопрос лично, но вот задокументированная история на случай, если кто-то еще наткнется на нее: http://blogs.microsoft.co.il/blogs/sasha/archive/2011/01/16/clr-4-does-not-use-loadlibrary-to-load-assemblies.aspx

Общая картина состоит в том, что CLR 4 не использует LoadLibrary для загрузки сборок, поэтому отладчик не может получить библиотеку DLL и, следовательно, ее символы.

person Sasha Goldshtein    schedule 26.01.2011

Вы можете указать отладчику расположение DLL в его адресном пространстве, используя:

.reload /f "c:...\xxx.Services.StickyNotes.dll=image_base_address"

image_base_address - это начало диапазона адресов, который эта DLL отображается в процессе. Вы можете найти это значение на панели DLL в Process Explorer.

Я написал об этом немного подробнее здесь < / а>.

person argaz    schedule 15.08.2016