Это проблема, от которой я отказался. С большим количеством хаков и (в основном) молитв, вы можете получить решение, которое работает в данный момент времени на данной машине. Но в целом, похоже, нет приличного способа сделать это.
Вам потребуется получить позицию и размер стека вне вашей программы (в Linux вы можете получить его из /proc/<pid>/maps
). В вашей программе вы должны как-то проверить, где вы находитесь в стеке. Использование локальных переменных возможно, но нет реальной гарантии того, что они действительно находятся в стеке. Вы также можете попытаться получить значение из регистра указателя стека с помощью некоторой сборки.
Итак, теперь у вас есть местоположение стека, его размер и текущая позиция, и вы предполагаете, что знаете, в каком направлении растет стек. Когда вы собираетесь в режиме переполнения стека? Лучше не делать это близко к концу, потому что ваша оценка (то есть адрес локальной переменной или значение из указателя стека), вероятно, слишком оптимистична; нередко адресация памяти выходит за пределы указателя стека. Кроме того, вы не имеете ни малейшего представления о том, сколько места в стеке требуется любой данной функции (и функциям, которые она вызывает). Так что в конце вам придётся оставить немного места.
Я могу только посоветовать вам не входить в этот беспорядок и стараться избегать очень глубокой рекурсии. Вы также можете увеличить размер стека; в Windows вы должны скомпилировать это в исполняемый файл, я считаю.