#debugging #exception #c builder #access-violation
#отладка #исключение #c builder #нарушение доступа
Вопрос:
Я пытаюсь профилировать проект на C в Embarcadero RAD Studio 2010. Для этого я хотел использовать AQTime, но столкнулся с небольшой проблемой.
Я могу скомпилировать и запустить приложение в режиме выпуска. Но когда я компилирую в режиме отладки, используя настройки, упомянутые в http://smartbear.com/support/viewarticle/18053 /, Я получаю нарушение доступа.
… ошибка с сообщением: «нарушение доступа по адресу 0x062324bd: чтение адреса 0x62324bd». Процесс остановлен. Для продолжения используйте Step или Run.
Кажется, это происходит, когда я загружаю кучу DLL при запуске. Но поскольку в режиме выпуска все идет хорошо, я, похоже, не могу понять, что может быть причиной. Когда происходит нарушение доступа, меня выбрасывает в ассемблер, а это не один из языков, которыми я свободно владею 😉
РЕДАКТИРОВАТЬ : При сканировании .exe с помощью Dependency Walker я получаю сообщение о том, что следующие файлы не могут быть найдены
CC32100MT.DLL
INET140.BPL
RTL140.BPL
VCL140.BPL
IESHIMS.DLL
Может ли это быть какой-то проблемой? Являются ли они специфичными для отладки или средство обхода зависимостей не предоставляет мне правильную информацию? Говорят, что те же файлы отсутствуют, когда я пытаюсь выпустить скомпилированную версию.
Я работаю на Windows 7 x64, если это может быть частью проблемы. Раньше у меня были проблемы с похожей символической ссылкой (user / AppData / Local …), которую MS использовала для некоторых папок. Примечательно, что когда я запускал сервер apache, папка htdocs на самом деле находилась не там, где думал сервер (и где она, казалось, была) 🙂
Ответ №1:
Вы пробовали отключить динамический rtl, который можно найти на панели параметров компоновщика C builder?
Комментарии:
1. Приятно, что сработало… Что это? Я предполагаю, что это была бы динамическая библиотека времени выполнения или что-то в этом роде 🙂 Либо включение среды выполнения в .exe, либо ее динамическое связывание. Или это что-то совершенно другое?
2. Динамический RTL указывает, должен ли компоновщик использовать статическое или динамическое связывание библиотеки времени выполнения. Снимая флажок, вы указываете, что компоновщик должен статически связать библиотеку времени выполнения. Это позволяет запускать исполняемый файл без необходимости в DLL-файлах среды выполнения, но увеличивает размер файла.