2016-04-13 2 views
0

Привет Я работаю со свежей установкой C++/eclipse. Я использую Cross GCC и мои все варианты выглядят какC++ на mac/eclipse не отображается ошибка при сбое

-O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -v 

Когда-либо сбой приложения, как я освежающий себя на C++, он просто выходит хорошо, нет трассировки стека, нет Эй, ты не имел сообщение об ошибке сегментный. НИЧЕГО. Невозможно получить сообщение об ошибке, указывающее, где произошел сбой.

Какой простой шаг или флаг мне не хватает?

Пример, когда я пишу путь за пределы.

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

Вы попробовали запустить его в 'gdb' из командной строки, чтобы узнать, что происходит? – trojanfoe

ответ

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 
Смежные вопросы