Как отследить в внешне скомпилированную библиотеку в Visual C++
Я построил версию OpenSSL, не относящуюся к dll, на моем компьютере с Windows. В соответствии с инструкциями я изменил скрипт сборки, добавив в него символы отладки. Я могу ссылаться на них в порядке, и они бегут. Но когда я пытаюсь войти в функцию openssl из моего cpp-кода, она просто переходит. Я знаю, что это общий вопрос, но как мне это исправить? У меня есть весь исходный код и заголовки, но я думаю, что должен быть магический вызов, который я пропускаю, чтобы сообщить Visual Studio, где они находятся. Или что-то.
Спасибо! Mac-парень многострадальный-в-окна-земля
3 ответа
Вы можете использовать dumpbin
с /pdbpath
возможность найти файл символов для двоичного файла; если он не может найти символы, вам нужно переместить их туда, где он может их найти.
Путь к PDB обычно жестко закодирован в двоичном файле, поэтому вы не можете переместить PDB после того, как создали исполняемый файл. Вы можете использовать (без документов) /pdbpath:none
опция компоновщика для создания двоичного файла с относительным путем к его файлу PDB; затем вы можете поместить PDB рядом с двоичным файлом, и отладчик должен найти его.
Обратите внимание, что файлы PDB генерируются, только если двоичный файл связан с /DEBUG
вариант.
Когда вы создали OpenSSL, куда вы указали файл символов? Он находится в том же каталоге, что и ваш исполняемый файл?
Файлы символов (pdb) существуют только для модулей (exe и dll), а не для объектных файлов. Библиотека - это просто набор файлов.obj.
Если источник был скомпилирован с отладочной информацией, то она встраивается в файлы.obj, которые компоновщик извлечет в конечный файл pdb. Все, что вам нужно, это pdb, чтобы ваш exe мог видеть символы для кода OpenSSL.
Вам нужно будет установить исходный путь в отладчике, чтобы он включал каталог OpenSSL, чтобы иметь возможность выровнять эти символы с источником.
Если вы используете Visual Studio, убедитесь, что опция "Отладка только моего кода" (или что-то подобное) отключена в настройках отладчика... хотя я не думаю, что это влияет на код, скомпилированный в ваш exe-файл. Скорее всего, отладчик просто не знает, где находится источник.