Как упоминается в заголовке, у меня есть проблема, когда один исполняемый файл большого проекта, который дает ошибку сегментации при его запуске, но скомпилирован в обычном режиме, а не при отладке.Сегментация, когда не выполняется на отладочном
Мы работаем над серверами Linux Linux и кодом в основном C++. Через bt в gdb я смог увидеть, где именно возникает проблема, что подводит меня к вопросу. Файл является автоматически сгенерированным, который не менялся годами. Разница в том, что мы обновили сторонний компонент gSOAP. Перед обновлением сторонней версии он работал нормально как на отладочном, так и на нет.
С флагом отладки проблема исчезает волшебно (для новичков, подобных мне). Я извиняюсь, но его не представляется возможным включить много кода, только строку, которая является:
/*------------------------------------------------------------.
| yynewstate -- Push a new state, which is found in yystate. |
`------------------------------------------------------------*/
yynewstate:
/* In all cases, when you get here, the value and location stacks
have just been pushed. So pushing a state here evens the stacks. */
yyssp++;
yysetstate:
*yyssp = yystate; <------------------ THIS LINE
Таким образом, любая помощь будет оценена. Я действительно не понимаю, почему эта проблема поднимается и какие шаги я должен предпринять для ее решения.
EDIT, я не ожидаю, что вы решите этот конкретный случай для меня, так как более подробно, чтобы помочь мне понять, почему в программировании это может произойти, мой случай в этом коде является лишь примером.
Мы не знаем, на что указывает 'yyssp', или как большой буфер переполняется - если он был инициализирован вообще. Просто невозможно сказать, что происходит с этим маленьким кодом. –
@Paul Я упоминаю, что я не могу включить больше кода, вопрос более общий, как программа может работать нормально при компиляции в режиме отладки и не запускаться при компиляции в обычном режиме. , конечно, вы не можете понять из этого кода, я хочу понять лес, а не дерево. – thahgr
И есть бесконечное количество причин, которые могут произойти. Мы можем начать случайным образом воображать некоторые из них, но это не поможет. Каждая вещь из '#ifdef DEBUG' блокирует компиляторам, инициализирующим переменные для отладки, которые не инициализируются в оптимизированных сборках, в разные библиотеки отладки/выпуска, чтобы ... –