Я выполняю многопоточную программу, а иногда получаю ошибку сегментации. Следовательно, чтобы эффективно отладить эту ошибку, я бы воспользовался функцией gdb
.Ошибка при отладке, но ошибка при нормальном выполнении
Обычно я записывал весь свой объектный файл в файл сценария оболочки, как следует.
g++ ObjectFile.o ObjectFile2.o LogicFile.cpp -lpthread LogicExe
для отладки, я просто добавил -g
расширение позади.
g++ ObjectFile.o ObjectFile2.o LogicFile.cpp -lpthread LogicExe -g
Далее, я хотел бы использовать эту команду gdb LogicExe
, а затем run LogicExe
.
Несмотря на то, что многократная работа не происходит, при отсутствии компиляции при отсутствии компиляции без функции gdb
и -g
.
Почему отладчик не обнаруживает ошибку сегментации, как обычное выполнение?
Мой хрустальный шар говорит, что у вас, вероятно, есть условие гонки, и отладчик меняет время между потоками, что больше не вызывает проблем (как часто). Но это невозможно узнать, не видя кода. Пожалуйста, опубликуйте [SSCCE] (http://sscce.org) в своем вопросе. –
Когда вы меняете сразу две вещи, иногда трудно сказать, что вызвало проблему. Можете ли вы попробовать это: не скомпилирована ли версия без '-g' или работает корректно при запуске с помощью gdb? –
@MarkPlotnick, когда я компилирую без '-g', ошибка сегментации будет возникать время от времени, однако, когда я запускаю в формате' -g' и 'gdb', ошибка сегментации никогда не произойдет, несмотря на то, сколько раз я их запускаю. –