linux - это - Как анализировать основной файл дампа программы с помощью gdb?




дамп оперативной памяти windows (6)

Моя программа работает следующим образом:

exe -p param1 -i param2 -o param3

Он разбился и сгенерировал основной файл дампа core.pid

Я хочу проанализировать файл дампа ядра

gdb ./exe -p param1 -i param2 -o param3 core.pid 

но gdb распознает параметры exe как входные данные gdb.

Как анализировать файл дампа ядра в этой ситуации?


Вы можете использовать ядро ​​с gdb разными способами, но передача параметров, которые должны быть переданы в исполняемый файл gdb, не является способом использования файла ядра. Это также может быть причиной, по которой вы получили эту ошибку. Основной файл можно использовать следующими способами:
gdb <executable> <core-file> или gdb <executable> -c <core-file> или

gdb <executable>
...
(gdb) core <core-file>

При использовании файла ядра вам не нужно передавать аргументы. Сценарий сбоя отображается в gdb (проверяется с версией gdb версии 7.1 на Ubuntu). Например:

$ ./crash -p param1 -o param2
Segmentation fault (core dumped)
$ gdb ./crash core
GNU gdb (GDB) 7.1-ubuntu
...
Core was generated by `./crash -p param1 -o param2'. <<<<< See this line shows crash scenario
Program terminated with signal 11, Segmentation fault.
#0  __strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99
99  ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
    in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S
(gdb) 

Если вы хотите передать параметры исполняемому файлу для отладки в gdb, используйте --args .
Например:

$ gdb --args ./crash -p param1 -o param2
GNU gdb (GDB) 7.1-ubuntu
...
(gdb) r
Starting program: /home/@@@@/crash -p param1 -o param2

Program received signal SIGSEGV, Segmentation fault.
__strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99
99  ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
    in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S
(gdb) 

Персональные страницы будут полезны для просмотра других опций gdb.


Вы можете проанализировать файл дампа ядра с помощью команды «gdb».

 gdb - The GNU Debugger

 syntax:

 # gdb executable-file core-file

 ex: # gdb out.txt core.xxx 

Благодарю.


Не имеет значения, если исполняемый файл имеет аргументы или нет, для запуска GDB в любом двоичном файле с сгенерированным файлом ядра. Синтаксис ниже.

Syntax: 
gdb <binary name> <generated core file>    
Eg: 
gdb l3_entity 6290-corefile    

позвольте мне привести пример ниже для большего понимания.

bash-4.1$**gdb l3_entity 6290-corefile**

**Core was generated** by `/dir1/dir2/dir3/l3_entity **Program terminated with signal SIGABRT, Aborted.**
#0
#1
#2
#3
#4
#5
#6  
#7  
#8  
#9  
#10 
(gdb)

Из вышеприведенного вывода вы можете догадаться о ядре, будь то NULL-доступ или SIGABORT и т. Д.

Эти номера от # 0 до # 10 являются кадрами стека GDB. Эти фреймы стека не относятся к вашему двоичному файлу. в вышеуказанных 0 - 10 кадрах, если вы подозреваете что-либо неправильное, выберите этот кадр

(gdb) frame 8 

Теперь, чтобы узнать подробности об этом:

(gdb) list + 

Чтобы исследовать проблему, вы можете напечатать ожидаемые значения переменных здесь в этот момент времени.

(gdb) print thread_name 

Несколько иной подход позволит вам полностью пропустить GDB. Если все, что вам нужно, это обратная трассировка, специфическая для Linux утилита «catchsegv» поймает SIGSEGV и отобразит обратную трассировку.


Просто пропустите параметры, gdb им не нужен:

gdb ./exe core.pid

Простое использование GDB для отладки файлов coredump:

gdb <executable_path> <coredump_file_path>

Файл Coredump для «процесса» создается, как файл «core.pid». После того, как вы войдете в подсказку gdb (при выполнении указанной выше команды), введите;

...
(gdb) where

Это даст вам информацию о стеке, где вы можете проанализировать причину сбоя / сбоя. Другая команда, для тех же целей;

...
(gdb) bt full

Это то же самое, что и выше. По соглашению он перечисляет всю информацию о стеке (что в конечном итоге приводит к месту сбоя).





coredump