我可以设置一个 linux 程序由 gdb 启动和附加吗?

Can I set a linux program to be started and attached by gdb?

在 windows,我可以设置 globalflag 将程序的启动与调试器相关联,因此即使我从脚本调用程序,调试器也会启动我的程序并能够在一些代码行。

那么如何在 linux 上使用 gdb 执行此操作?例如,我已经 /home/my/a.out 由 gcc 使用 -g 选项编译,我希望谁调用 a.out,它将由 gdb 提出:

  1. 我是否必须修改一些系统文件来说明 /home/my/a.out 应该由 gdb 启动并自动附加?

  2. 如何让 gdb 自动附加它然后在 'main' 和 运行 处中断?

Do I have to modify some system file to say, /home/my/a.out should be started by gdb and automatically attach?

您无需修改​​任何 系统 文件即可实现此目的。改为修改 /home/my/a.out

将原始二进制文件移至新名称:

mv /home/my/a.out /home/my/a.out.orig

用shell脚本替换/home/my/a.out

cat > /home/my/a.out <<'EOF'
#!/bin/sh
exec gdb -ex start --args /home/my/a.out.orig "$@"
EOF
chmmod +x /home/my/a.out

How to make gdb auto-attach it and then break at 'main' and run?

上面的脚本会自动完成。