Предоставление символов отладчику VisualStudio для пользовательского кода.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Предоставление символов отладчику VisualStudio для пользовательского кода.

Сообщение Anonymous »

При условии, что кто-то генерирует собственный JIT-код (x64) на C++ в Windows (используя VirtualAlloc с MEM_EXECUTE), есть ли способ предоставить некоторые символы для отладчика Visual Studio, чтобы он распознавал имена функций? Сопоставление строк кода для меня не имеет значения.
По умолчанию, когда вы выполняете этот код с установленными действительными таблицами 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»