LINUX.ORG.RU

Стабильно разные результаты при запуске программы из gdb и просто так.


0

0

В моей программе стоит assert(0) в определённом месте.
Я собираюсь с debug'ом и запускаю программу 10 раз.
Ни разу не вылетели по assert'у.
Затем 10 раз из gdb - 10 раз вылетаю по assert'у.

Кто может объяснить в чём дело (без ссылок на магию, шаманство итп).

Спасибо.

1. Телепаты -- в отпуске.

2. Такое часто случается. Как простая гадалка, могу предположить некоторые варианты:

а) программа параллельная и у тебя случаются райсы или volatile не хватает;

б) где-нибудь при обработке событий таймауты слишком маленькие (скорее всего, кстати);

в) Фокус ввода слишком хитро грабится (или наоборот, не приходит туда, куда надо);

итд.

Die-Hard ★★★★★
()

Наверно программа собиралась с NDEBUG, с которым assert() в glibc игнорируется, а gdb наверно находит assert() в debugging information и интерпретирует его самостоятельно. Покажи саму программу и как она собирается.

bbk123 ★★★★★
()
Ответ на: комментарий от bbk123

> а gdb наверно находит assert() в debugging information и интерпретирует его самостоятельно

"это фантастика"

anonymous
()
Ответ на: комментарий от bbk123

2bbk123:

assert(), вообще говоря, макро. Если NDEBUG был задан, от него вообще ничего не остается, и gdb его найти не сможет...

Die-Hard ★★★★★
()
Ответ на: комментарий от bbk123

list выдает код как есть, не пропуская его через препроцессор ( именно
он убивает assert'ы )

aton
()

Могу предположить, что это у тебя что-то с работой с памятью (типа, к примеру, где-нибудь используешь неинициализированое значение - а оно может оказаться разным под дебаггером и без). Попробуй через valgrind программу пропустить - он такие ошибки хорошо находит.

Ну или может, как уже говорили, какой-нибудь race condition

slav ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.