发生异常时,程序在gdb下冻结

时间:2011-11-20 17:16:44

标签: debugging exception gcc gdb hang

我用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; 在codeblocks 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 *; global gdbinit为空。是否有可能代码块准备特定的gdbinit并将其放入gdb?

对所有人表示最好的问候。

1 个答案:

答案 0 :(得分:1)

  

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