我需要使用Eclipse(gdb)在Linux上调试程序。该程序以root身份运行并且非常大。带调试符号的二进制文件大约250MB,启动后有超过60个运行线程。
我正在考虑最佳解决方案:
我认为1号(gdbserver)是最好的解决方案,遗憾的是它不可靠。 gdb和gdbserver之间的连接丢失。我认为在eclipse< - >之间传输的大量数据存在问题。 gdb< - > gdbserver的。
Number 2(以root身份运行eclipse)意味着以root身份运行每个进程,因此也会干扰版本控制系统,因为Eclipse插件将使用root用户而不是我的用户来更改版本控制的文件。
我没有尝试过3号(suid gdb)。你怎么看待这件事?它有用吗? 我知道suid root gdb和没有root-Password一样安全,但是我的机器仅用于开发和调试。当然,可能会有一个“启用/禁用”脚本,仅在必要时设置suid位。
你还有其他建议吗?
答案 0 :(得分:2)
较少侵入性(不需要乱用suid)是将自己配置为在/ etc / sudoers中以root身份运行gdb,然后运行:
sudo xauth merge~ / .Xauthority
sudo gdb
其中需要第一个命令以允许root连接到X服务器
答案 1 :(得分:1)
1)或3)听起来像是很好的解决方案。
gdb< - > gdbserver流量的数量永远不会很大。丢失的连接意味着你没有使用可靠的传输协议(你使用哪个连接协议 你试过本地套接字吗?),或者你的gdb / gdbserver版本中有一个错误(它的版本是什么?)
您也可以考虑4:首先将程序更改为而不是需要root权限。任何大型程序都会有bug。 Bugs + suid-root => OWND机器。大概你会把这个程序发给你的客户。如果他们遭受OWND机器,他们可以追查你的损失。
通常只有一小组操作真正需要root权限,而这些操作(如果不经常)最好由“辅助二进制”执行(这是suid-root,但不是全部运行)时间,并且很小=>不太可能有错误。)