我使用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,64位; g++/gcc 4.4.5; gdb 7.2; 在CodeBlocks SVN版本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 是空的。是不是 CodeBlocks 准备了特定的 gdbinit 文件并且将其放入 gdb 中呢?
祝好。