我用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?
对所有人表示最好的问候。
答案 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