gcc не генерирует информацию отладчика при использовании -g, -ggdb, -g3 или -ggdb3 - PullRequest
2 голосов
/ 16 мая 2010

Я использую GCC 4.4.1 и GDB 7.0-Ubuntu в Ubuntu 9.10. Однако GCC не будет генерировать информацию отладчика при использовании любого из следующих ключей: -g, -g3, -ggdb или -ggdb3. Поэтому, когда я запускаю программу с помощью GDB, создается впечатление, что информация отладчика не генерируется. Я создал очень простые тестовые исходные файлы в новой пустой папке.

Вот один пример:

#include <stdlib.h>
#include <stdio.h>
int main (int argc, char **argv)
{
     char    msg[4];
     // allocate 4 bytes on the stack
     strcpy (msg, "hello world");
     // overflow 
     printf ("%s\n", msg);
     return 0;
}

ОБНОВЛЕНИЕ: вот моя последовательность командной строки:
gcc -g ./mytest.c -o mytest
GDB ./mytest

ОБНОВЛЕНИЕ: Ранее я включил MALLOC_CHECK_ = 1, чтобы проверить проблему переполнения стека в коде. И это работает, поэтому я получаю трассировку стека. Но трассировка стека не отличается от того, включаю я отладочную информацию или нет. То, что я ожидал увидеть с информацией отладчика, это номер строки файла, в котором проблема возникла в GDB. Однако этого не происходит.

Ответы [ 3 ]

1 голос
/ 16 мая 2010

Работает нормально. Я запустил отладчик на моем компьютере. Я должен был добавить

#include <string.h>

чтобы скомпилировать его. Я назвал файл debugger.c. Вот шаги:

gcc -g debugger.c 
gdb a.out

который запустит отладчик

GNU gdb 6.3.50-20050815
... 
...
(gdb) run
Starting program: /Developer/stackoverflow/extern/a.out 
Reading symbols for shared libraries +. done

Program received signal SIGABRT, Aborted.
0x00007fff88040886 in __kill ()
(gdb) backtrace
#0  0x00007fff88040886 in __kill ()
#1  0x00007fff880e0e4f in __abort ()
#2  0x00007fff880d5693 in __chk_fail ()
#3  0x00007fff8802f851 in __strcpy_chk ()
#4  0x0000000100000f04 in main (argc=1, argv=0x7fff5fbff958) at debugger.c:9
(gdb) 

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

Edit2: Читая ваши правки, кажется, что ваша проблема не в том, что вы запускаете отладчик, а получаете информацию, где ваш код не удался Вы можете использовать backtrace для достижения этого.

0 голосов
/ 16 мая 2010

Ваш комментарий говорит, что вы запустили:

gcc -ggdb ./test.c -o test.o

Это, вероятно, не то, что вы хотите.

gcc -ggdb -o mytest test.c

скорее всего будет успешным. Если GDB использует его, значит у вас что-то не так с вашей установкой gcc или gdb.

0 голосов
/ 16 мая 2010

Вы хотите:

gcc -g test.c -o mytest
gdb mytest

Никогда не называйте ничего "test" - это конфликтует со встроенной оболочкой. И "test.o" по соглашению будет именем объектного файла, а не исполняемым файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...