借助 gdbserver 实现在 CLion 中以 root 权限调试
基本思路
实际上最简单的方式是以 root 权限运行 CLion,但是这种方法不太清真,所以不用。
基本思路是借助 gdbserver 用远程调试实现以 root 权限运行需要调试的程序。
详细步骤
安装 gdbserver
首先要确认已经安装了 gdbserver,如果没有的话 apt 系的发行版直接安装包 gdbserver:
sudo apt install gdbserver
以 root 权限启动 gdbserver
这一步可以在 CLion 内建的 Terminal 中操作,也可以使用其他终端:
sudo gdbserver localhost:2333 /path/to/program
这条命令中 localhost:2333 表示监听本地 2333 端口,localhost 可以省略直接写作 :2333,这样可以在其他机器上连接本机运行的 gdbserver 实现“真”远程调试,如果没有这种需求的话最好还是限制只监听本地地址。
端口号 2333 也可以随意,只要没有被占用就好,/path/to/program 是需要调试的程序的路径。
配置 CLion 的远程调试器
在菜单 Run -> Edit Configurations 中添加 GDB Remote Debug,也可以直接在右上角调试工具的下拉菜单中选择 Edit Configurations 。
- 点击左上角的加号,然后选择 GDB Remote Debug,如上图配置;
- Name 是这个远程调试器的显示名称,会显示在主窗口右上角的调试菜单里;
- 'target remote' args 这一项填 tcp:localhost:2333,与前面我们运行 gdbserver 的选项一致;
- 下面的 Path mappings 是本地与远程的路径映射,由于我们的情况是本地与远程实际上是同一台机器,所以都填 / 就可以了,如果是真正的远程调试,需要按实际情况如实填写;
- 其余选项可以留空。
开始调试
完成前面两步后,在主窗口右上角调试工具的下拉菜单中选择我们刚刚添加的远程调试器 localhost:2333,单击调试按钮即可与本地调试一样开始调试了。
后记
后来发现 CLion 内置的 gdb 不能从 remote target 接收调试符号,配置为系统上的 /usr/bin/gdb 就好了。