我有一个“有时”不会中断递归并以堆栈溢出结束的算法。现在我想调试这种情况。 gdb直接指向我覆盖堆栈寄存器的那一行,但不可能获得堆栈跟踪,因为gdb需要无尽的时间来展开堆栈并将其显示在ddd中。在调试会话中减少堆栈大小以捕捉无尽的递归
我现在只是想减少堆栈大小以便早日获得腐败。所以我需要一种方法来减少为我的运行任务堆栈。没有涉及的线程,所以它不应该是这样。
但我不知道如果gdb本身有一个操纵堆栈(大小)本身的选项,或者我需要在编程开始时编程改变大小,或者我可以减小os命令行的大小(linux )开始调试会话后。
也许如果gdb有这样的选项,如果调用树达到最大深度,也可以停止。
使用ulimit -s不能提供帮助,因为这会影响调试会话,而不仅仅是应该调试的程序。有没有机会从gdb设置ulimit -s?但是,以编程方式减少堆栈大小的链接适合我的问题。也许你可以改变你的答案给其他用户。 – Klaus
我更新了我的答案 – user2807083
要仅在目标中设置ulimit,请尝试使用'(gdb)set exec-wrapper sh -c'ulimit -s 32; exec“$ 0”“$ @”'''。更多关于'exec-wrapper'的语义[这里](http://stackoverflow.com/a/27510210/2554472)。 –