我需要使用Eclipse(gdb)在Linux上debugging一个程序。 该程序以root身份运行,并且相当大。 带debugging符号的二进制文件大小约为250MB,启动后有超过60个正在运行的线程。
我正在考虑最好的解决scheme:
我认为数字1(gdbserver)将是最好的解决scheme,不幸的是它不工作可靠。 gdb和gdbserver之间的连接丢失了。 我认为在eclipse < – > gdb < – > gdbserver之间传输大量的数据是有问题的。
编号2(以root身份运行eclipse)意味着以root用户身份运行每个进程,因此也会干扰版本控制系统,因为Eclipse插件将使用root用户而不是我的用户来更改版本控制的文件。
我没有尝试3号(suid gdb)。 你怎么看待这件事? 它是否工作? 我知道一个suid root gdb和没有root密码一样安全,但是这个机器只用于我的开发和debugging。 当然,可以有一个“启用/禁用”脚本,只在必要时才设置suid位。
你有什么其他的build议?
1)或3)听起来像是很好的解决方案。
gdb < – > gdbserver流量的数量永远不会很大。 丢失的连接意味着你没有使用可靠的传输协议(你使用哪种连接协议?你尝试过使用本地套接字吗?),还是你的gdb / gdbserver版本(它是哪个版本?
你也可以考虑4:改变程序首先不需要root权限。 任何大型程序都会有错误。 错误+ suid-root => OWND机器。 大概你会把这个程序发送给你的客户。 如果他们遭受OWND机器,他们可以追究你的损失。
通常只有一小部分操作确实需要root权限,而这样的操作(如果足够少的话)最好由一个“助手二进制”来执行(它是suid-root,但它并不是一直运行,并且很小=>不太可能有错误)。
不那么干扰(不需要乱用suid)是将自己配置为在/ etc / sudoers中以root身份运行gdb,然后运行:
sudo xauth合并〜/ .Xauthority
sudo gdb
其中需要第一个命令来允许根连接到X服务器