Что это значит в GDB? - PullRequest
       20

Что это значит в GDB?

1 голос
/ 22 июня 2010

Программа получила сигнал SIGSEGV, Ошибка сегментации. 0x08049795 в execute_jobs () Текущий язык: авто; в настоящее время asm

(gdb) информационный символ 0x08049795 execute_jobs + 22 в разделе .text

(gdb) ptype 0x08049795 type = int

Как получить номер строки, на которой произошла ошибка?

Ответы [ 2 ]

7 голосов
/ 22 июня 2010

Ваш двоичный файл не был скомпилирован с отладочной информацией.Перестройте как минимум с -g (или -ggdb, или -ggdb -g3, см. GCC manual .)

Точные строки из вывода GDB:

(gdb) info symbol 0x08049795 execute_jobs + 22 in section .text

означает, что инструкция по адресу 0x08049795, что составляет 22 байта от начала функции execute_jobs, породила ошибку сегментации.

(gdb) ptype 0x08049795 type = int

Здесь вы запрашиваете тип целого числа, и GDB радостно отвечает,Сделайте

(gdb) x/10i 0x08049795

или

(gdb) disassemble execute_jobs

, чтобы увидеть действительные инструкции.

2 голосов
/ 22 июня 2010

Команда gdb "bt" покажет вам обратную трассировку.Если вы не повредили стек, это должно показать последовательность вызовов функций, которые приводят к segfault.Чтобы получить более значимую информацию, убедитесь, что вы скомпилировали вашу программу с отладочной информацией, добавив -g в командную строку gcc / g ++.

...