Отладчик Visual Studio не может найти какой-либо идентификатор, даже если символы загружены - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь отладить программу в Visual Studio, для которой у меня есть символы, но нет исходного кода (это игра Unity, рассматриваемый источник для UnityPlayer.dll. У меня есть источник дляактуальный exe-файл).Символы загружаются правильно, я могу взломать отладчик и увидеть стеки вызовов с именами функций, как я ожидаю.

Однако, когда я пытаюсь добавить точку останова функции, она не работает: точка останова добавляется, но в окне точки останова появляется небольшой значок ошибки, и она никогда не срабатывает.

Если я дважды щелкну на кадре стека, я смогу попасть в окно разборки, и в строке «Адрес» правильно отобразится имя функции.Однако, если я пытаюсь ввести любое имя символа на панели - включая просто копирование того, которое уже показывает - я получаю сообщение об ошибке, в котором говорится "идентификатор" независимо от того, что "не определено".Как будто какая-то часть Visual Studio не знает о загруженных символах.

Одна подозрительная вещь, которую я заметил, заключается в том, что в окне стека вызовов все кадры, не входящие в настоящий exe-файл, отображаются с «Неизвестным»язык.Я понятия не имею, что является причиной этого.

Вот изображение, которое, мы надеемся, сделает это немного яснее: enter image description here

Что я могу сделать, чтобы это исправить, илипо крайней мере, обойти проблему как-то?Я сталкивался с этим на VS 2017 и пытался обновить его до последней версии и установить VS 2019, но ничего не помогло.

1 Ответ

0 голосов
/ 20 сентября 2019

Обратите внимание, что в именах, которые он вам показывает, вы также получаете типы параметров.Мол, он показывает вам FMOD_OS_Time_Sleep(unsigned int), а не просто FMOD_OS_Time_Sleep.Это связано с тем, что имя искажено, по обеим сторонам имени добавляются случайные символы, чтобы кодировать, сколько параметров оно принимает и какие типы эти параметры.

Одна из возможностей состоит в том, что он ожидает, что вы добавите искаженное представление имени.Вы также можете попробовать ввести имя точно так, как оно отображается в стеке вызовов, я бы попробовал как с UnityPlayer.dll!, так и без него.В противном случае запустите strings на dll, чтобы получить искаженное представление имени функции, и попробуйте это.

...