GDB не печатает отладочную информацию - PullRequest
1 голос
/ 23 декабря 2009

когда я запускаю основной файл в gdb, gdb не показывает, откуда исходит ошибка или какая строка в приложении, которое вызывает проблему.

Я использую опции компилятора -g -DDEBUG -D_DEBUG, но это не помогает.

Любая помощь будет оценена, спасибо.

Ответы [ 2 ]

2 голосов
/ 23 декабря 2009

Вы можете взорвать свой стек. Например, после запуска следующей программы

#include <stdio.h>
#include <string.h>

int main(void)
{
  int a[10];

  memset(a, 0, 100 * sizeof a[0]);

  return 0;
}

и затем gdb на полученном core дает

$ gdb oflow core
[...]
Core was generated by `./oflow'.
Program terminated with signal 11, Segmentation fault.
#0  0x0000000000000000 in ?? ()

Вывод команд where и bt не очень полезен:

(gdb) where
#0  0x0000000000000000 in ?? ()
#1  0x0000000000000000 in ?? ()
(gdb) bt
#0  0x0000000000000000 in ?? ()
#1  0x0000000000000000 in ?? ()
0 голосов
/ 23 декабря 2009

хорошо, проблема решена. у меня была рекурсивная функция, которая возвращала строку, но проблема была в том, что ничего не возвращалось, но я до сих пор не понимаю, почему отладочная информация не была сгенерирована, когда я шагаю по коду, он показывает номера строк, на которые я иду через, но я думаю, потому что строка, в которой он получал ошибку, отсутствовала? так что не было точки останова для того, где это пошло не так? когда он пытался объединить себя, возвращаясь в функцию, используя «+ =», он переходил во второй вызов, но затем завершался сбоем в конце функции, потому что ничего не возвращалось. но разве это не должно было вызвать ошибку при первом вызове функции в строке, где он не вернулся?

спасибо.

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