在docker内部使用gdb调试时刻遇到了gdb如下报错信息:
warning: Error disabling address space randomization: Operation not permitted
原因
地址随机化是linux一项安全特性,它允许内核进程启动每次加载库的时候都在随机化的分布在进程虚拟内存地址空间上(早期固定的库要加载到固定地方,如果固定地方被占用才加载到别地方。会造成多次加载程序,其库地址都不变。如此有安全隐患)。在gdb调试中gdb默认需要关闭linux的地址随机化功能,可以通过gdb 命令set disable-randomization off关闭。如果在地址随机化下调试同一段程序,多次run时候可以看到它的运行地址和函数地址不一致。
解决方案
回到宿主机,cd /var/lib/docker/containers/,如果这一步需要权限,且使用sudo报错,解决方案参照sudo cd 找不到命令
sudo: cd:找不到命令
sudo: “cd”是 shell 内置命令,它无法直接运行。
sudo: -s 选项必须在特权 shell 中使用。
sudo: the -D option may be used to run a command in a specific directory.
进入正确的容器ID文件夹,
先systemctl stop docker
然后vim hostconfig.json
把“Privileged”:false改成true,保存退出。
再systemctl start docker
重启docker容器。搞定