您好我正在使用c ++ / eclipse的全新安装。我使用的是Cross GCC,我的所有选项都是
-O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -v
当应用程序崩溃时,因为我在c ++上刷新自己,它只是很好地退出,没有堆栈跟踪,没有嘿,你有一个seg错误消息。没有。没有得到错误输出说崩溃的位置是不可用的。
我错过了什么简单的步骤或标志?
我写出界限的例子。
cout << "this will crash! " << endl;
int foo[1000];
for (int i = 0; i <= 3000 ; i++)
foo[i] = i;
cout << "!Hello World!!!" << endl; // prints !!!Hello World!!!
输出
this will crash!
没有别的。
谢谢! 哦,我正在为调试器运行GDB。调试器可以用于断点等。
答案 0 :(得分:1)
你确定它正在用-O0进行编译吗?
当我使用-O2编译此代码时,编译器检测到初始化数组没有外部副作用或依赖性,并完全忽略它。
.LC0:
.string "this will crash! "
main:
subq $8, %rsp
movl $17, %edx
movl $.LC0, %esi
movl std::cout, %edi
call std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)
movl std::cout, %edi
call std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
xorl %eax, %eax
addq $8, %rsp
ret
subq $8, %rsp
movl std::__ioinit, %edi
call std::ios_base::Init::Init()
movl $__dso_handle, %edx
movl std::__ioinit, %esi
movl std::ios_base::Init::~Init(), %edi
addq $8, %rsp
jmp __cxa_atexit