проанализируйте c# файл дампа приложения

Я записал приложение C#, которое работает хорошо на XP, но замораживании на Vista/7. Я получил дамп приложения (dmp файл) для анализа проблемы. Я не понимаю, как получить отслеживание стека в C# (поскольку у меня есть, конечно, исходный код). Я загрузил символы, но это, кажется, не загружает управляемый код, вот отслеживание стека:

ntdll.dll!_KiFastSystemCallRet@0()  
user32.dll!_NtUserWaitMessage@0()  + 0xc bytes  
System.Windows.Forms.ni.dll!68bb8ea8()  
[Frames below may be incorrect and/or missing, no symbols loaded for System.Windows.Forms.ni.dll]   
System.Windows.Forms.ni.dll!68bb8ea8()  
System.Windows.Forms.ni.dll!68bb8997()  
System.Windows.Forms.ni.dll!68bb87e1()  
System.Windows.Forms.ni.dll!68b75931()  
mscorwks.dll!_CallDescrWorker@20()  + 0x33 bytes    
mscorwks.dll!_CallDescrWorkerWithHandler@24()  + 0x9f bytes 
mscorwks.dll!MethodDesc::CallDescr()  + 0x15a bytes 
mscorwks.dll!MethodDesc::CallTargetWorker()  + 0x1f bytes   
mscorwks.dll!MethodDescCallSite::CallWithValueTypes_RetArgSlot()  + 0x1a bytes  
mscorwks.dll!ClassLoader::RunMain()  - 0x39040 bytes    
mscorwks.dll!Assembly::ExecuteMainMethod()  + 0xa4 bytes    
mscorwks.dll!SystemDomain::ExecuteMainMethod()  + 0x416 bytes   
mscorwks.dll!ExecuteEXE()  + 0x49 bytes 
mscorwks.dll!__CorExeMain@0()  + 0x98 bytes 
mscoreei.dll!71f455ab()     
mscoree.dll!_ShellShim__CorExeMain@0()  + 0x227 bytes   
mscoree.dll!__CorExeMain_Exported@0()  + 0x8 bytes  
kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes    
ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes   
ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes

Любая справка ценилась бы.

5
задан akjoshi 12 January 2016 в 06:31
поделиться

1 ответ

Анализ дамп-файлов - занятие не для слабонервных и требует некоторой тренировки. Отличным введением являются первые несколько глав книги Advanced .NET Debugging, где показано, как использовать инструменты отладки для Windows, расширение отладчика SOS (необходимое для сопоставления управляемого кода с нативными вызовами, что вам и требуется здесь), которое является частью .NET SDK, и расширение отладчика SOSEX, которое добавляет пару мощных команд расширения к SOS.

Если вы никогда раньше не использовали NTSD, WinDbg, SOS или если такие термины, как относительный виртуальный адрес, вам ни о чем не говорят, я настоятельно рекомендую прочитать первые главы этой книги. Она требует вложения всего нескольких часов, и внезапно перед вами откроется совершенно новый мир. Она не превратит отладку в легкий бриз (это вряд ли возможно, когда проблемы сложны), но она покажет вам правильный путь для решения такого рода проблем.

Боюсь, что простой просмотр приведенного выше дампа мало о чем говорит. Если вы не можете воспроизвести ошибку из Visual Studio, NTSD или WinDbg - ваш друг. Единственное, что я могу сказать, это то, что ваша точка входа - _CorExeMain из mscoree.dll. Но это загрузочная точка каждой сборки .NET. Позже загружается форма и выполняется некоторый код, но что именно? Без вашего исполняемого файла, PDB и, желательно, исходных файлов, будет трудно сказать что-то полезное.

5
ответ дан 14 December 2019 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: