返回

程序员自动化设置未来共享库断点的秘诀:用 GDB 一键搞定

Linux

使用 GDB 自动设置未来共享库断点

问题陈述

作为程序员,您希望在未来加载的共享库中自动设置断点。这在自动化测试和脚本场景中非常有用,但需要每次手动确认。

解决方案

通过使用 --auto-solib-breakpoint 标志或 set breakpoint pending on 命令,您可以让 GDB 在加载共享库时自动设置所有断点。

使用 --auto-solib-breakpoint 标志

步骤 1: 创建一个包含以下命令的文件,例如 cmds.gdb

set args /home/shlomi/conf/bugs/kde/font-break.txt
b IA__FcFontMatch
r

步骤 2: 使用以下命令自动化 GDB 会话:

gdb --command=cmds.gdb --auto-solib-breakpoint

使用 set breakpoint pending on 命令

步骤 1: 在 GDB 会话中执行以下命令:

set breakpoint pending on

步骤 2: 继续您的调试会话,当加载新共享库时,所有未解决的断点都将自动设置。

注意事项

  • --auto-solib-breakpoint 标志可能会导致大量断点,降低性能。在需要时使用,并在调试完成后禁用。
  • set breakpoint pending on 仅在加载新共享库时设置未解决的断点,而 --auto-solib-breakpoint 设置所有断点。

结论

通过使用 --auto-solib-breakpoint 标志或 set breakpoint pending on 命令,您可以让 GDB 在未来加载的共享库中自动设置断点。这可以显著简化调试过程,特别是对于自动化场景。

常见问题解答

Q:--auto-solib-breakpoint 标志会影响所有 GDB 会话吗?

A:否,--auto-solib-breakpoint 标志仅影响当前 GDB 会话。

Q:可以手动禁用 --auto-solib-breakpoint 标志吗?

A:是的,执行 set breakpoint pending off 即可禁用该标志。

Q:--auto-solib-breakpoint 标志与 set breakpoint pending on 命令有什么区别?

A:--auto-solib-breakpoint 设置所有断点,而 set breakpoint pending on 仅设置未解决的断点。

Q:在哪些场景中应该使用 --auto-solib-breakpoint 标志?

A:当您希望在加载新共享库时自动设置所有断点时,建议使用 --auto-solib-breakpoint 标志,例如在自动化测试中。

Q:在哪些场景中应该使用 set breakpoint pending on 命令?

A:当您希望在加载新共享库时自动设置未解决的断点时,建议使用 set breakpoint pending on 命令,例如在交互式调试中。