Смешанное программирование на C / C ++: ошибка сегментации GDB - PullRequest
0 голосов
/ 09 марта 2011

Я всегда сталкиваюсь с падением gdb, когда пытаюсь напечатать определенно правильную структуру / переменную. И часто происходит сбой, если я пытаюсь вызвать другую функцию в GDB. Я обнаружил, что это может произойти, только если код смешан на C / C ++.

Например,

%> p anotherFunction()
Segmentation fault

Вот небольшой пример моего типичного сценария:

example.cc:

class foo(){
    public void bar();
};

void foo::bar(){
    int i=12345;
    printf("%d", i);
}

foo * pfoo;

extern "C" call_foo(){
     pfoo = new foo();
     pfoo->bar();
}

в примере, если я остановлюсь на printf и попытаюсь выполнить «p i» в gdb, это приведет к сбою.

Обратите внимание, что это только пример, пожалуйста, не ищите ошибку в этом примере. Такой сбой происходит везде, но иногда все в порядке.

Полагаю, это потому, что я отлаживал из кода C (в нашем примере call_foo) в код C ++, и у gdb возникли проблемы с переключением контекста.

Пожалуйста, помогите, если у вас есть идеи. Это действительно сильно влияет на мою производительность: (....

Кстати, я уже пробовал другую версию GDB. Кажется, проблема существует в каждой версии, включая последнюю. И я также попытался очистить / valgrind, чтобы проверить мои программы, и я не увидел никаких ошибок с программой.

1 Ответ

1 голос
/ 11 марта 2011

Любой сбой в GDB - это ошибка в GDB. Пожалуйста, отправляйте сообщения об ошибках в GDB bugzilla .

Если в вашем примере происходит сбой нескольких версий GDB, проблема может быть в вашем компиляторе (но даже в этом случае GDB не должен аварийно завершать работу).

...