![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| d06osipov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 1.11.2006 Репутация: нет Всего: нет |
Когда я запускаю программу с GDB (или откомпилированную для Debug в Visual Studio) она работает нормально. Ошибки (неправильная работа --- заезжание на чужую память и т. п.) начинаются только когда программа запущена без отладчика --- отследить их в этом случае затруднительно. Самое интересное, что программа использует исключительно стандартные средства. Может у кого нибудь есть информация о том, как может меняться поведение программы при запуске с отладчиком и без?
|
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Велика вероятность того, что имеет место некорректное обращение с памятью - в смысле логически программа написана неверно (допускается выход за границы массива, разыменование невалидных указателей и т.д.). Такие ошибки как раз могут приводить к глюкам или падению программы в одних случаях и быть незаметными в других... И дело тут не обязательно в отладчике. Возможно, при запуске на другом компе твоя прога упадёт и в дебаге.
Это сообщение отредактировал(а) UnrealMan - 7.9.2007, 21:41 |
|||
|
||||
| d06osipov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 1.11.2006 Репутация: нет Всего: нет |
Да, но при использовании отладчика, ничего подобного не проявляется. Как может отладчик влиять на выполнение программы, которая не использует ничего, кроме <stack>, <list>, <assert.h>, <fstream> и <iostream>.
|
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Да влиять может что угодно. Ошибки с памятью характерны непредсказуемостью своего проявления. Помню случай, когда одна прога месяцами успешно работала на одном компе, а при переносе на другой комп завалилась при первом же запуске
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
d06osipov, такое поведение еще возможно, когда у тебя какие-нибудь локальные указатели не инициализируются перед использованием. В режиме отладки они могут автоматически инициализироваться 0, а в релизе нет.
|
|||
|
||||
| dizzy1984 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 675 Регистрация: 15.2.2007 Репутация: 3 Всего: 25 |
Кроме того, отладчик может расставлять данные в памяти не так, как будет в релизе, скажем, в релизе некоторые переменные могут быть помещены в регистры.
Вообще релиз и дебаг версия много чем различаются. Это сообщение отредактировал(а) dizzy1984 - 10.9.2007, 10:19 |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
d06osipov, под линух есть очень мощная штука. Valgrind называется. Она показывает абсолютно любые баги с памятью (включая предполагаемые утечки). К ней еще желательно графическую обертку Valkyrie поставить. Поищи на эту тему. Меня не раз выручала.
Правда там с настройками слегка попариться придется. -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
SaDFromSpb, я пользую следующие: valgrind --tool=memcheck -v --leak-check=full --log-file=filename.log ./program
|
|||
|
||||
| d06osipov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 72 Регистрация: 1.11.2006 Репутация: нет Всего: нет |
Всем спасибо, причина найдена. Часть памяти высвобождалась, или нет в зависимости от значения булевой переменной, которую я забыл инициализировать. Надо сказать, что мне повезло, потому как память на самом деле должна была высвобождаться при правильной работе, однако, при этом давала знать о себе следующая ошибка, так что программа работала неправильно и с дебагером, что мне удалось заметить.
SaDFromSpb. У меня, к сожалению, Windows, правда с Cygwin. Это сообщение отредактировал(а) d06osipov - 12.9.2007, 18:14 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |