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

Debugging 当发生异常时,程序在gdb下冻结,debugging,exception,gcc,gdb,freeze,Debugging,Exception,Gcc,Gdb,Freeze,我用g++编译了一个简单的测试程序: int main() { try { printf("before\n"); throw 1; } catch(int i) { printf("catched int\n"); } catch(...) { printf("catched(...)\n"); } } 无论是否包含调试信息,正常工作正常。 但当用gdb调试时,它总是挂在“throw1;”行上,所以我无法调试程序,这通常会引

我用g++编译了一个简单的测试程序:

int main()
{
  try
  {
    printf("before\n");
    throw 1;
  }
  catch(int i)
  {
    printf("catched int\n");
  }
  catch(...)
  {
    printf("catched(...)\n");
  }
}
无论是否包含调试信息,正常工作正常。 但当用gdb调试时,它总是挂在“throw1;”行上,所以我无法调试程序,这通常会引发异常。 调试器的最后一个信息是:

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,64位; g++/GCC4.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

向大家问好

catchpoint1(引发异常)….

您的
.gdbinit
中有什么您没有告诉我们的吗?(可能是
catch-throw
?)

catchpoint1
真的是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

它到底是如何“挂起”的?您是否收到(gdb)提示?如果按Ctrl+C或Ctrl+Z会发生什么情况?Ctrl+C关闭程序和终端窗口,但块中的调试会话仍处于活动状态(调试日志中没有新信息)。在这之后,我可以使用stop按钮正常结束会话。实际上,最后两行是:Catchpoint 1(抛出异常),0x00007ffff7b8f9e0位于/usr/lib/libstdc++中的uu cxa_uthrow()中。所以。6>>>>>>>>>cb_gdb:日志中的最后一个字符是冒号。gdb命令行:/usr/bin/gdb-nx-fullname-quiet-args exec/exception_problem我在我的主目录中没有找到任何gdbinit;全局gdbinit为空。代码块是否可能准备特定的gdbinit并将其放入gdb?