如何使用 GDB 或 LLDB 调试器重复运行程序直到发生错误
在调试程序时,有时候我们希望一直运行程序直到遇到错误。GDB(GNU 调试器)和 LLDB(LLVM 调试器)都提供了自动化此过程的方法。
这在调试一些不稳定的程序非常有用,例如有时候写的一些单元测试可能随机崩溃SegFault。最近我在调试一个测试每跑1000次就有一次崩溃的时候就发现gdb/lldb调试器非常有用。
简介:GDB vs LLDB
GDB(GNU 调试器)和 LLDB(LLVM 调试器)是用于低级别应用程序调试的强大工具。GDB 传统上用于由 GCC 编译的程序,而 LLDB 是 LLVM 项目的一部分,与 Clang 无缝配合。两者都提供强大的功能,但 GDB 在 Linux 环境中更常见,而 LLDB 在 macOS 上以及处理 Swift 时更受青睐。
自动化执行直到发生错误
调试重复性任务可能很乏味。通过自动化这些任务,直到发生错误,可以节省大量时间和精力。以下是如何在 GDB 和 LLDB 中设置重复执行直到遇到错误的步骤。
GDB 脚本
下面是一个 GDB 脚本,它会重复执行,直到发生错误:
repeat_until_error.gdb
while 1
run
if $_exitcode != 0
echo "发生错误,退出码:$_exitcode\n"
break
end
end
要运行此脚本,将其保存为 repeat_until_error.gdb,然后使用以下命令执行 GDB:
gdb -q -x repeat_until_error.gdb ./your_program
或者,当你处于 gdb 提示符时,运行:
source repeat_until_error.gdb
“run” 命令用于启动程序,你可以为它添加参数,例如:
run param1 param2 ...
你也可以使用 “r” 作为 “run” 的简写。
LLDB 脚本
类似地,在 LLDB 中,你可以使用以下脚本实现相同的效果:
repeat_until_error.lldb
while (1)
run
process launch
if (process status != 0)
script print("发生错误,退出码:", lldb.process.GetExitStatus())
break
end
end
要运行此脚本,将其保存为 repeat_until_error.lldb,然后运行:
lldb --source repeat_until_error.lldb ./your_program
或者,在 lldb 提示符处运行:
source repeat_until_error.lldb
在 “run” 命令之后,你还可以通过附加参数来启动程序,例如:
run param1 param2
总结
GDB 和 LLDB 都提供了方便的方法来自动化调试任务,选择使用哪种工具通常取决于你所使用的平台和工具链。GDB 与 GCC 的集成使其成为 Linux 开发者的首选,而 LLDB 在与 Clang 和 macOS 的无缝配合方面同样强大。
自动化重复的调试命令可以为你节省大量时间和精力 —— 无论你使用 GDB 还是 LLDB,这些脚本都能帮助你简化工作流程。
gdb / lldb 调试
英文:How to Repeat Until Errors using GDB or LLDB Debugger?
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK
