Windbg - модуль, не загружающий «DLL, не найденный в списке изображений»

StackOverflow https://stackoverflow.com/questions/4497408

  •  12-10-2019
  •  | 
  •  

Вопрос

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

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

Я скачал Sosex, который поддерживает .net 4 изhttp://www.stevestechspot.com/ (32 -битная версия) The Sos.dll (From "C: Program Files (x86) Инструменты отладки для Windows (x86) clr10 sos.dll") версия 6.12.2.633.

Выпустили следующие команды:
Sympath+ "... папка Exe и Dll"
.loadby sos clr
. Загрузить Sosex.dll

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

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 нагрузка без проблемы из того же каталога. (Я не обеспокоен самими исключением, я посадил код, который создает, проблема. Проблема заключается в создании хорошей среды отладки).

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top