У меня есть ситуация, когда я запускаю ряд модульных тестов, и один из них вызывает ошибку сегментации. Симптом, похоже, связан с другим тестовым случаем, который проходит примерно 30 тестовых случаев до неудачного. Очевидно, что существует определенная зависимость между тестовыми примерами, и я могу легко включить и отключить ошибку сегментации, комментируя предыдущий тестовый пример. Google Test/Mock 1.6.0 используется в качестве тестовой среды. Бинарный файл теста полностью написан на C++ (gcc 4.6.3). Он однопоточный (если только Google Test не создает потоки).Почему ошибка сегментации не воспроизводится в gdb?
Однако, когда я запускаю все тестовые примеры в gdb, нет ошибки сегментации, и это то, что меня озадачивает.
Каковы реалистичные причины, по которым возникла ошибка сегментации при запуске двоичного файла в терминале, но не при запуске одного и того же двоичного кода через gdb? Я думаю, что все немного медленнее, когда gdb запускает код, но я не вижу, как это повлияет на результат.
Я просто делаю это не видеть никакой вины:
gdb MyBinary
run
Последние строки терминала распечатке:
[ PASSED ] 368 tests.
[Inferior 1 (process 28349) exited normally]
И это, чтобы увидеть ошибку:
MyBinary
Последняя строка терминальная распечатка:
Segmentation fault
Вы, вероятно, не будете знать, пока не найдете ошибку. До тех пор, пока вы можете каким-то образом воспроизвести ошибку, вы не должны слишком одержимы обстоятельствами, в которых это происходит, пока у вас не будет причин думать, что они важны. –
Вы можете попробовать запустить единичный тест под valgrind, чтобы узнать, какие ошибки памяти ему удалось обнаружить. –
Кстати, вы можете ограничить размер дампа 'core' до разумной цифры (например, 500 Мбайт по крайней мере) и запустить' gdb' post mortem на 'core' –