У меня есть алгоритм, который «иногда» не прерывал рекурсию и заканчивался переполнением стека. Теперь я хочу отладить эту ситуацию. gdb указывает мне прямо на строку, где я перезаписываю вкладку стека, но невозможно получить stacktrace, потому что gdb требует бесконечного времени, чтобы развернуть стек и отобразить его в ddd.уменьшить размер стека в отладочной сессии, чтобы поймать бесконечную рекурсию
Теперь я просто хочу уменьшить размер стека, чтобы получить коррупцию намного раньше. Поэтому мне нужно, чтобы уменьшить стек до текущей задачи. В этом нет ни одного потока, поэтому это не должно быть большой проблемой.
Но я понятия не имею, имеет ли сам gdb возможность манипулировать стеком (размером) или мне нужно программно изменить размер в начале моей проги, или я могу уменьшить размер из командной строки os (linux) после запуска сеанса отладки.
Возможно, возможно также остановить остановку, если дерево вызовов достигнет максимальной глубины, если у gdb есть такая опция.
Использование ulimit -s не может помочь, поскольку это влияет на сеанс отладки, а не только на программу, которая должна быть отлажена. Есть ли возможность установить ulimit -s из gdb? Но ваша связь с программным сокращением stacksize подходит для моей проблемы. Возможно, вы можете изменить свой ответ для других пользователей. – Klaus
Я обновил свой ответ – user2807083
Чтобы установить ulimit только в цель, попробуйте '(gdb) установить exec-wrapper sh -c 'ulimit -s 32; exec" $ 0 "" $ @ "''. Подробнее о семантике 'exec-wrapper' [здесь] (http://stackoverflow.com/a/27510210/2554472). –