gpt4 book ai didi

debugging - 如何在 10 秒后暂停程序的执行并获取回溯?

转载 作者:行者123 更新时间:2023-12-02 22:34:37 25 4
gpt4 key购买 nike

遗留程序很可能会在某些病态输入上陷入无限循环。我有超过 1000 个这样的实例,但是,我怀疑其中绝大多数都会触发相同的错误。因此,我想将 >1000 个实例减少到根本不同的实例。第一步是在 10 秒后暂停应用程序并收集回溯。

如果我运行:

gdb --batch --command=backtrace.txt --args ./legacy_program

使用 backtrace.txt

run
bt

10 秒后,我在同一个终端中按下 Ctrl + C,我得到了我想要的回溯。

现在,我想自动执行此操作。我尝试发送 SIGINT (预期相当于 Ctrl + C)来自另一个终端但我不再得到回溯。以下是我的一些失败的尝试 GDB how to stop execution without a breakpoint?这些都没有任何影响:

pkill -SIGINT gdb 
kill -SIGINT 5717

其中 5717 是唯一正在运行的 gdb 的 pid。发送SIGINTlegacy_program以同样的方式确实杀死它,但随后我没有得到回溯:

Program received signal SIGINT, Interrupt.
Quit

如何以编程方式暂停 legacy_program 的执行10 秒后得到回溯?

<小时/><子>这篇文章的动机是我无法在 StackOverflow 上找到这个问题的答案。另请注意[提出并回答自己的问题不仅可以,而且是明确鼓励的。](https://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own -问题/)

最佳答案

显然,这是 gdb 中已知的 (bug) 功能,请参阅 GDB is not trapping SIGINT. Ctrl+C terminates program when should break gdb.尝试从其他终端发送 SIGSTOP:

pkill -STOP legacy_program 

它可以在我的机器上运行。

请注意,您不必在调试器中运行legacy_program。启用核心转储

ulimit -c unlimited 

并发送程序SIGTRAP使其崩溃,然后从核心转储中获取回溯。因此,启动程序:

./legacy_program

从另一个终端:

pkill -TRAP legacy_program 

回溯可以这样获得:

gdb --batch -ex=bt ./legacy_program core

关于debugging - 如何在 10 秒后暂停程序的执行并获取回溯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35603042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com