Можно ли войти в функцию-член, определенную в файле .dll?

Я загрузил SDK с NVIDIA и использую Visual Studio 2015 для запуска файлов демонстрационного проекта, представленных в SDK.

Файлы демо-проекта в SDK работали, как и ожидалось, пока я не сделал небольшие изменения в коде (если вам нужны подробности об изменениях, см. Последний абзац).

После внесения этих изменений строка в коде, кажется, работает вечно. Используя отладчик, я обнаружил, что в этой строке кода есть функция-член, которая ничего не возвращает, и поэтому поток программы просто застревает в этой строке. Я попытался войти в эту функцию, но она определена в .dll файл, который пришел с SDK.

Visual Studio сообщает, что файл символов не загружен и файл PDB не найден на сервере Microsoft. Отладчик позволяет мне увидеть код дизассемблирования, но я не знаю, смогу ли я определить проблему, используя это.

Так что теперь я застрял в строке кода, потому что функция-член, определенная в файле .dll, не будет ничего возвращать и просто продолжает работать (я оставил ее работающей более часа, и все же она ничего не возвращала ).

Я хочу определить причину, по которой это происходит, но я не могу увидеть исходный код функции-члена, поэтому понятия не имею, что происходит внутри функции-члена или как ее отладить. Есть ли способ определить причину этой проблемы? Можно ли как-то увидеть исходный код функции-члена таким образом, чтобы я мог понять, что происходит?

Подробнее об изменениях, которые я сделал:

Я отделил это от основной части вопроса, потому что не считаю это очень актуальным, но это может быть полезно для ответчика. SDK объединяет видео в одно видео (создавая 360 просмотров видео). Демонстрационный проект работает нормально, пока я использую демонстрационные видеофайлы. Видеофайлы подаются в проект с использованием аргументов командной строки. Когда я передаю свои собственные видеофайлы в демонстрационный проект, именно тогда я сталкиваюсь с этой проблемой, в противном случае функция-член успешно возвращается, и проект успешно создает сшитое видео. Единственное, что я изменил, — это ввод в проект (то есть видеофайлы), я вообще не изменил исходный код.

0

Решение

Если поставщик DLL не доставляет исходный код, вы, очевидно, не сможете его увидеть. Это был бы обычный способ справиться с этим — если они не являются открытым исходным кодом, их исходный код является интеллектуальной собственностью компании, поэтому, конечно, они не показывают его вам.

Если это открытый исходный код, вы, как правило, можете загрузить отладочные DLL-файлы (которые содержат исходный код). Microsoft также поставляет много исполняемых библиотек DLL в версии с исходным кодом (но, конечно, не самой Windows). Проверьте в SDK, есть ли отладочная версия этой DLL, и свяжите ее с той, которую вы используете в данный момент.

Итак, в двух словах, вы не можете увидеть это, если они не дадут вам.

0

Другие решения

Как заявили VTT и Aganju, я не могу войти в функцию-член, определенную в DLL, если исходный код не предоставлен мне вместе с DLL. Это отвечает на то, что я спросил. В моем конкретном случае я работал с NVIDIA VRWorks 360 Video SDK, проблема была вызвана отсутствием правильного кодека для сшиваемых видеофайлов. Хотя это нигде не упоминается в документации по SDK, необходимо использовать видеокодек H264 — MPEG-4 AVC (часть 10) (AVC1).

0