Как обойти "Двоичный файл не был собран с отладочной информацией"? - PullRequest
0 голосов
/ 14 марта 2009

Я пытаюсь отладить C DLL, которую я использую с программой Delphi. Я построил DLL с Visual C ++, с включенной отладочной информацией. Я создал программу Delphi с Delphi 2009, с включенной отладочной информацией. Но, очевидно, они используют разные форматы, потому что, когда я пытаюсь присоединить отладчик VC ++ к моей программе, он говорит, что «двоичный файл не был собран с отладочной информацией» и даже не примет в качестве допустимых точек останова, которые я поставил в коде C, который был собран с отладочной информацией в формате, понятном VC ++.

Кто-нибудь знает, как я могу заставить это работать?

Ответы [ 6 ]

2 голосов
/ 15 марта 2009

Когда вы говорите "не примет как действительные" точки останова отладки в коде C, что вы имеете в виду именно? Разве это не позволяет им? Если да, то была ли DLL загружена, когда вы устанавливаете точки останова? Я считаю, что это может упростить дело, если я подожду установки точек останова до тех пор, пока не буду уверен, что соответствующая DLL была загружена. Если это не то, что происходит, уточните, что вы подразумеваете под «действительными» контрольными точками.

Другие варианты: установить точки останова функции или скомпилировать DLL с помощью стратегически размещенных вызовов DebugBreak().

Вы уверены, что загружается правильная DLL (то есть отладочная версия)? Опять же, даже правильная DLL загружается, я не уверен, что ошибка обязательно относится к DLL, а не только к основному исполняемому файлу. Или могут возникнуть проблемы с загрузкой базы данных символов, как предлагает jdigital, при условии, что вы извлекаете их для отладочных сборок вашей DLL. Даже без отладочных символов отладка должна быть выполнимой, тем более что это DLL, вы можете работать с экспортированными символами.

Это не COM-компонент? Если это так, я бы дважды проверил, что отладочная версия была зарегистрирована до того, как вы запустите ваш процесс.

Опять же, мне все равно было бы интересно услышать, что именно происходит, когда вы пытаетесь установить точку останова. Если вы перейдете в окно точек останова в VS, это должно прояснить, почему точка останова не может быть установлена, если это то, что происходит.

Хм. У меня нет большого опыта работы с /Z7, у вас все еще есть файл .obj для DLL? Документы, кажется, подразумевают, что это необходимо для отладки. В качестве альтернативы я бы попытался построить с /Zi вместо этого и получить .pdb для этой присоски.

1 голос
/ 15 марта 2009

Не уверен насчет Visual C ++ (он вообще не установлен), но, возможно, это поможет ...

Если вы писали DLL в Delphi и использовали ее из C ++ и хотели отладить DLL, вы бы открыли исходный код для DLL в Delphi и установили точку останова. Затем вы используете Run | Parameters и устанавливаете приложение C ++ в качестве исполняемого файла хоста и нажимаете run в IDE Delphi. Затем среда IDE запускает приложение C ++ и запускает его как обычно, пока не будет достигнута точка останова в DLL, а затем сломается, как и следовало ожидать.

Есть ли что-то подобное в VC ++? (Вы не сказали, какую версию VC ++, какую версию Visual Studio или более раннюю IDE вы использовали.)

Если нет, единственная альтернатива, о которой я могу подумать, - это создать быстрое приложение VC ++, которое использует DLL, и вместо этого отлаживать его.

1 голос
/ 14 марта 2009

Форматы отладки не стандартизированы - в основном вы не можете использовать Delphi для отладки скомпилированного кода MS или наоборот.

Вы можете отлаживать DLL-библиотеки Delphi в Delphi и использовать эти DLL-библиотеки с другими приложениями, не скомпилированными с Delphi, при условии, что вы отметили функции Delphi для экспорта. То, что вы не можете сделать, это символически отлаживать эти DLL в стороннем отладчике, который должен был бы по крайней мере понимать искажение имен в Object Pascal.

0 голосов
/ 01 февраля 2019

Десять лет спустя, и это происходит со мной, при отладке пользовательской библиотеки DLL, используемой в Team Developer, установке команды отладки для запуска Team Developer IDE. Цель состоит в том, чтобы пройти по стороннему коду до момента вызова экспортированной функции из DLL.

Запуск отладчика запускает IDE без ошибок, но запуск проекта TD в TD IDE вызывает исключение в VS для DLL, используемой TD IDE.

Как игнорировать исключения извне проекта? Кто-нибудь смог обойти это с '09?

0 голосов
/ 17 апреля 2009

Убедитесь, что DLL открыта в папке отладки, а не в другой папке.

0 голосов
/ 15 марта 2009

Вы указали отладчику символы для вашей DLL? Если есть какие-либо сомнения, попробуйте запустить с Filemon , чтобы проверить, не работает ли отладчик при попытке загрузить символы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...