Я записал приложение 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
Любая справка ценилась бы.
Анализ дамп-файлов - занятие не для слабонервных и требует некоторой тренировки. Отличным введением являются первые несколько глав книги Advanced .NET Debugging, где показано, как использовать инструменты отладки для Windows, расширение отладчика SOS (необходимое для сопоставления управляемого кода с нативными вызовами, что вам и требуется здесь), которое является частью .NET SDK, и расширение отладчика SOSEX, которое добавляет пару мощных команд расширения к SOS.
Если вы никогда раньше не использовали NTSD, WinDbg, SOS или если такие термины, как относительный виртуальный адрес, вам ни о чем не говорят, я настоятельно рекомендую прочитать первые главы этой книги. Она требует вложения всего нескольких часов, и внезапно перед вами откроется совершенно новый мир. Она не превратит отладку в легкий бриз (это вряд ли возможно, когда проблемы сложны), но она покажет вам правильный путь для решения такого рода проблем.
Боюсь, что простой просмотр приведенного выше дампа мало о чем говорит. Если вы не можете воспроизвести ошибку из Visual Studio, NTSD или WinDbg - ваш друг. Единственное, что я могу сказать, это то, что ваша точка входа - _CorExeMain из mscoree.dll. Но это загрузочная точка каждой сборки .NET. Позже загружается форма и выполняется некоторый код, но что именно? Без вашего исполняемого файла, PDB и, желательно, исходных файлов, будет трудно сказать что-то полезное.