
GDB Debugger 调试器
如何使用 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?
本文一共
603 个汉字, 你数一下对不对.
.
.