Причина различий между машинами

Мы пытаемся отследить некоторые ошибки разбивки стека в сгенерированном коде. Проблема в том, что ошибки разрушения стека не являются на 100% детерминированными и происходят только на одном компьютере, а не на других. Какие возможные причины могут быть для различия в поведении?

Мы запускаем gcc, используя флаги защиты стека.

1 ответ

Попробуйте использовать Valgrind

Memcheck: детектор ошибок памяти

Если речь идет о потоках и времени, это может случиться в редких или непредсказуемых случаях. Я видел, как многопоточный код работает 99 раз из 100.... и затем терпит неудачу. Если вам повезет, то это просто ошибка перезаписи стека, которая происходит постоянно, но имеет последствия.

Ptrcheck: экспериментальный детектор переполнения кучи, стека и глобального массива

-fstack-protector + valgrind ==> отладка переполнения стека?

Вы можете попробовать включить канареек с помощью gcc"s -fstack-protector-all вариант.

Другие вопросы по тегам