Программа зависает под GDB, когда происходит исключение - PullRequest
3 голосов
/ 20 ноября 2011

Я скомпилировал с g ++ простую тестовую программу:

int main()
{
  try
  {
    printf("before\n");
    throw 1;
  }
  catch(int i)
  {
    printf("catched int\n");
  }
  catch(...)
  {
    printf("catched(...)\n");
  }
}

Обычно работает нормально с отладочной информацией или без нее. Но при отладке с помощью gdb он всегда висит на «throw 1;» поэтому я не могу отлаживать программы, которые обычно выдают исключения. Последняя информация от отладчика:

Catchpoint 1 (exception thrown), 0x00007ffff7b8f9e0 in __cxa_throw () from /usr/lib/libstdc++.so.6

Мои параметры компиляции и компоновки:

g++ -Wshadow -Wunreachable-code -Wswitch-enum -Wswitch-default -Wextra -Wall  -pg -g -m64    -c main.cpp

g++ -o exec/exception_problem obj/main.o -pg

Моя среда: Ubuntu 10.10, 64bit; g ++ / gcc 4.4.5; GDB 7,2; отлажен под кодовыми блоками svn rev 7440

Есть идеи, в чем проблема?

Дополнительная информация: Последние две строки журнала GDB:

Catchpoint 1 (exception thrown), 0x00007ffff7b8f9e0 in __cxa_throw () from /usr/lib/libstdc++.so.6
>>>>>>cb_gdb:

Последний символ в журнале - двоеточие. командная строка GDB:

/usr/bin/gdb -nx -fullname -quiet -args exec/exception_problem 

Я не нашел * gdbinit * в моем домашнем каталоге; глобальный gdbinit пуст. Возможно ли, что кодовые блоки подготавливают определенный gdbinit и помещают его в gdb?

С наилучшими пожеланиями для всех.

1 Ответ

1 голос
/ 20 ноября 2011

Catchpoint 1 (exception thrown) ...

Есть ли в вашем .gdbinit что-то, о чем вы нам не рассказали? (Возможно catch throw?)

Действительно ли Catchpoint 1 - последняя строка, которую печатает GDB? Вот что я вижу:

Reading symbols from /tmp/a.out...done.
Catchpoint 1 (throw)
(gdb) run
before
Catchpoint 1 (exception thrown), __cxxabiv1::__cxa_throw (obj=0x602090, tinfo=0x601060, dest=0) at ../../../../src/libstdc++-v3/libsupc++/eh_throw.cc:70
70  ../../../../src/libstdc++-v3/libsupc++/eh_throw.cc: No such file or directory.
    in ../../../../src/libstdc++-v3/libsupc++/eh_throw.cc
(gdb) c
catched int
[Inferior 1 (process 16008) exited normally]
(gdb) q
...