我可以设置一个 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 提出:
我是否必须修改一些系统文件来说明 /home/my/a.out 应该由 gdb 启动并自动附加?
如何让 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?
上面的脚本会自动完成。
在 windows,我可以设置 globalflag 将程序的启动与调试器相关联,因此即使我从脚本调用程序,调试器也会启动我的程序并能够在一些代码行。
那么如何在 linux 上使用 gdb 执行此操作?例如,我已经 /home/my/a.out 由 gcc 使用 -g 选项编译,我希望谁调用 a.out,它将由 gdb 提出:
我是否必须修改一些系统文件来说明 /home/my/a.out 应该由 gdb 启动并自动附加?
如何让 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?
上面的脚本会自动完成。