Как отладить исполняемый файл с помощью GDB, когда он падает при запуске?

1

У меня есть проект на основе 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, поэтому я решил спросить здесь.

  • 2
    Возможно, полезно: как отладить сбой перед основным?
  • 0
    Проверьте все глобальные переменные с помощью конструкторов или существенной логики инициализации. Я предполагаю, что у вас есть смурфтон кода, и минимальный воспроизводимый пример не может быть и речи?
Показать ещё 9 комментариев
Теги:
gdb

2 ответа

2

Скомпилируйте и свяжите ваше приложение с символами отладки. Для 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 не установлен.

0

Один из подходов - перехват всех исключений перед запуском:

catch throw
run

И если это не поможет, возможно, вам придется пошагово выполнить сборку с самого начала. Но прежде чем сделать это,

break main
run

и пошаговое выполнение кода с помощью шага и следующего должно привести вас к виновнику.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню