Если я запускаю программу из оболочки, и она segfaults:
$ buggy_program
Segmentation fault
Это скажет мне, однако, есть ли способ заставить программы печатать обратную трассировку, возможно, запустив что-то вроде этого:
$ print_backtrace_if_segfault buggy_program
Segfault in main.c:35
(rest of the backtrace)
Я также предпочел бы не использовать strace или ltrace для такой информации, поскольку они будут печататься в любом случае ...
Извините, что приехал сюда через 2 года ... наткнулся, когда искал что-то еще. Добавим это для полноты.
1) Хотя я думаю, что принятый ответ отличный, он требует GDB. Метод, с которым я знаком, использует libSegFault.so.
Если вы запустите свое приложение с
Вы получите отчет с трассировкой, загруженными библиотеками и т. Д.
2)
catchsegv
Также доступен скрипт-обертка , который попытается использоватьaddr2line
для перевода адресов в имя файла + номер строки.Это гораздо более легкие решения, чем файлы core или gdb (например, хорошо для встроенных систем)
источник
LD_PRELOAD=libSegFault.so
хорошо, если он находится в пути DL.Тебе нужен друг каждого GDB
После того, как вы загрузили свой основной файл, команда 'backtrace' (сокращенно bt) выдаст вам текущий стек вызовов. Если вы запускаете свою программу изнутри GDB, вы можете установить произвольные точки останова, проверить содержимое памяти и т. Д.
источник
catchsegv
Это было упомянуто в другом ответе (но никоим образом не сфокусировано на). Это удобный инструмент в комплекте с проектом glibc. Он обеспечит обратную трассировку (и другую полезную отладочную информацию), только если программа действительно выполняет segfault.
Хорошая статья существует здесь .
Вы можете включить его в свои сценарии по своему усмотрению.
источник
Ubuntu (как проект) использует Apport для этого. Вы можете посмотреть, как они это сделали.
https://wiki.ubuntu.com/Apport
источник
/proc/sys/kernel/core_pattern
Вот слегка модифицированный вариант сценария от Кайла Брандта. Это улучшено следующими способами:
Автор сценария:
источник
-ex
вместо этого.gdb ... -ex 'set pagination off' -ex backtrace -ex quit