По умолчанию, когда вы выполняете этот код с установленными действительными таблицами RT_FUNCTION, стек вызовов сможет показать правильную трассировку стека, но функции, очевидно, будут только адресами, а не именами:
Код: Выделить всё
Engine.dll!ae::event::handleException(_EXCEPTION_RECORD * exceptionRecord, unsigned __int64 establisherFrame, _CONTEXT * contextRecord, _DISPATCHER_CONTEXT * dispatcherContext) Zeile 104 C++
ntdll.dll!00007ffdeadf441f() Unbekannt
ntdll.dll!00007ffdead6e466() Unbekannt
ntdll.dll!00007ffdeadf340e() Unbekannt
> 0000016c80000102() Unbekannt // my code starts here
000000106348ff90() Unbekannt
0000016c40000002() Unbekannt
0000016c802e9170() Unbekannt
000000106348fee0() Unbekannt
0000016d27b1f2f0() Unbekannt
Я слышал, как люди создают полные PDB-файлы, даже для JIT-кода, но мне просто интересно, есть ли для этого более простое программное решение? Работа с PDB, которые, AFAIk, потребовали бы переключения на какой-то общий формат исполняемых файлов, была бы реальной затеей, которая на данный момент не стоила бы того. Тем более, что мне нужны только имена функций, а не полное сопоставление исходных строк/точки останова и т. д.
Потенциальные решения
Я обнаружил, что вы можете вызвать SymLoadModuleEx с SLMFLAG_VIRTUAL, а затем вызвать SymAddSymbol. Хотя все вызовы были успешными и в результате StackWalker распознал код, похоже, это вообще не повлияло на отладчик. Поэтому я предполагаю, что это просто повлияет только на те модули, которые могут быть запрошены приложением, а не на VS-отладчик. Если вы знаете иное, дайте мне знать.
Я Я также нашел документацию по поставщикам символов, но она очень поверхностна и даже не дает указания, с чего начать. Я даже не уверен, что это решит мою проблему. Если да, то есть ли какая-нибудь надежная полная документация по этой теме? Некоторые интерфейсы и методы являются документацией, но я до сих пор не имел дела с расширениями VS (а это, кажется, так и есть), и мне нужно будет изучить это с нуля. Здесь также было бы полезно узнать, есть ли у кого-нибудь опыт работы с этим, требует ли это даже меньше работы, чем создание PDB.
Или есть что-то еще, чего мне не хватает ? Я предполагаю, что будет какой-то способ предоставить символы, вызвав некоторые функции, точно так же, как у вас есть RtlAddFunctionTable для предоставления информации о размотке. Но у меня такое ощущение, что мне, возможно, не повезло.
Подробнее здесь: https://stackoverflow.com/questions/781 ... ustom-code
Мобильная версия