windbg - модуль не загружается "dll не найден в списке изображений" - PullRequest
1 голос
/ 21 декабря 2010

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

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

Я скачал sosex, который поддерживает .net 4 из http://www.stevestechspot.com/ (32-битная версия) версия sos.dll (из "C: \ Program Files (x86) \ Средства отладки для 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 загружаются без проблем из одного каталога. (Меня не касается само исключение, я создал код, который создается. Проблема в настройке хорошей среды отладки).

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

Ответы [ 2 ]

3 голосов
/ 26 января 2011

Мне довелось ответить на этот вопрос лично, но вот документированная история на случай, если кто-нибудь еще наткнется на нее: 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 и, следовательно, ее символы.

0 голосов
/ 16 августа 2016

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

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

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

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

...