У меня есть проект на основе C-and-С++, который я только что собрал и скомпоновал впервые, и он вызывает ошибки при выполнении. Я попытался запустить его в GDB, чтобы получить обратную трассировку, и увидел это:
gdb) run
Starting program: /home/jon/controlix-code/bin/controlix
During startup program terminated with signal SIGSEGV, Segmentation fault.
(gdb) bt
No stack.
(gdb)
Я предполагаю, что это происходит сбой до вызова main(), но кроме этого я не имею понятия. Я не смог найти много об этой ситуации в Google, поэтому я решил спросить здесь.
Скомпилируйте и свяжите ваше приложение с символами отладки. Для g++
и clang++
это -g
компилятора и компоновщика.
Пример:
(gdb) r
Starting program: ~/src/test/debug/gcc/test
Program received signal SIGSEGV, Segmentation fault.
__static_initialization_and_destruction_0 (__initialize_p=__initialize_p@entry=1, __priority=__priority@entry=65535) at ~/src/test/test.cc:51
51 X x(0);
Сообщение об ошибке "Во время запуска программа завершается с сигналом SIGSEGV, Ошибка сегментации". выглядит необычно, хотя Убедитесь, что пользовательский обработчик сигналов SIGSEGV
не установлен.
Один из подходов - перехват всех исключений перед запуском:
catch throw
run
И если это не поможет, возможно, вам придется пошагово выполнить сборку с самого начала. Но прежде чем сделать это,
break main
run
и пошаговое выполнение кода с помощью шага и следующего должно привести вас к виновнику.