GCC флаги для улучшения ловли ошибок во время выполнения? - PullRequest
1 голос
/ 10 ноября 2011

Я недавно портировал приложение Linux C ++ на Windows (через Visual Studio 2010 C ++ Express).В процессе я заметил, что исполняемый файл Windows имеет тенденцию обнаруживать незначительные ошибки в моем коде, что приводит к сбою программы.Но тот же код и ошибка, кажется, остаются незамеченными в Linux / GCC, и программа продолжит работать счастливо.Я видел такое поведение в прошлых программах, которые я пытался портировать.В качестве примера ошибки в моем коде пишется передача массива на 1 элемент.

Какие флаги можно включить, чтобы улучшить отслеживание ошибок во время выполнения в GCC?Я хочу, чтобы моя программа была такой же нестабильной, как версия Windows, когда она сталкивается с малейшей ошибкой во время выполнения.Или это больше зависит от ОС и находится вне контроля пользователя?

Ответы [ 2 ]

1 голос
/ 10 ноября 2011

Пример ошибки в моем коде - запись массива на 1 элемент.

Подобные ошибки обычно легко обнаруживаются Valgrind. Я бы посоветовал вам проверять свой код в Valgrind всегда, когда вы подозреваете, что такие ошибки - это сэкономит много времени во время отладки.

0 голосов
/ 10 ноября 2011

-fstack-protector-all + valgrind, вероятно, то, что вам нужно.Первый помогает штрафовать повреждения стека:

$ cat 1.c
int main() {
    char data[10];
    int x;
    data[10] = 'x';
    return 0;
}
$ gcc 1.c && ./a.out    
$ gcc -fstack-protector-all 1.c && ./a.out
Abort trap

, последний проверяет наличие проблем с кучей.

...