使用gdbserver的重编译/调试工作流是什么?每次重编需重启服务吗?
关于重新编译后是否需要重启gdbserver的解答
不需要每次重新编译都重启gdbserver,你可以通过以下更高效的流程简化操作:
- 终止当前调试进程:在gdb客户端执行
kill命令结束正在运行的程序,此时gdbserver不会退出,会回到等待连接的状态。 - 更新目标设备上的程序:将重新编译后的新
demo二进制文件替换到目标设备的/home/root/目录下。 - 重新加载程序并连接:
- 在主机端gdb中执行
file /path/to/host-compiled/demo(指定本地交叉编译生成的带调试信息的二进制文件),重新加载符号表。 - 执行
target remote 10.24.0.236:2000重新连接到gdbserver,之后用run启动新的程序实例即可。
- 在主机端gdb中执行
另外,你还可以用gdbserver的复用监听模式优化流程:
启动gdbserver时加上--once参数:
gdbserver --once :2000 /home/root/demo
这个参数会让gdbserver在一次调试会话结束后自动重启监听,等待下一次连接。后续重新编译替换程序后,直接在主机gdb端重新连接并加载新符号即可,无需手动重启gdbserver。
本质上,gdbserver只是提供调试通道和程序托管能力,只要它处于运行状态,就能加载新的程序实例(前提是目标设备上的二进制文件已更新),重启gdbserver只是最直接但非必需的操作。
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

