远程调试配置
远程调试 配置允许您在 gdbserver 或 lldb-server 下进行远程调试。 如果您已经拥有带有调试信息的可执行文件,并且不需要 CLion 为您构建项目,请使用此配置。 此配置独立于特定的构建系统或项目格式。
使用此配置,您可以远程调试由 任意构建系统 构建的应用程序。 唯一的要求是调试符号必须存在于本地机器上。
目标平台
如果目标环境支持 gdbserver,则没有限制。
您的程序可以在任何操作系统上远程运行,包括基于 Linux 的嵌入式系统(如 Raspbian OS ,参见 Raspberry Pi OS 指南 )、云平台或 Docker 容器中。 您可以连接到符合远程 gdbserver 协议的 任意 GDB stub ,例如,使用 Qemu 调试操作系统内核,或使用 OpenOCD 调试已刷写的固件。
CLion 捆绑的 GDB 默认用作客户端调试器,构建时支持 多架构 ,这使其适用于各种 Linux/Windows/macOS 和嵌入式场景的远程跨平台调试。 在下方找到支持目标的完整列表。
捆绑 GDB 支持的远程目标
您可以以 macOS、Linux、Android、Apple TV/Apple Watch 以及其他支持 lldb-server 的平台为目标。 请参阅 LLDB 文档中的 本地系统。
工作流程的一般步骤
以下是远程 GDB/LLDB 调试步骤的简要说明。 每个步骤的更多详细信息将在后续章节中提供。
准备一个 带有调试信息的二进制文件。 如有需要,请使用跨平台工具链。
在远程 LLDB 的情况下,调试器不会自动下载任何调试符号或系统库,因此它们应存在于本地机器上。 对于从 macOS 到 Linux 或从 Linux 到 macOS 的跨平台调试,请通过 musl (或其他替代方案)进行交叉编译,这将附带所需的库。
确保放置 远程机器上的二进制文件 和 本地机器上的符号文件。
通常,调试可执行文件本身可以很好地用作符号文件,或者也可以是一个单独的文件。
在 CLion 中, 创建一个 远程调试 配置。 您指定的设置对于调试器能够在远程会话期间停止在断点处至关重要,因此我们建议您仔细检查配置设置。
启动程序在 远程机器上的 gdbserver/lldb-server 下运行。
回到 CLion,开始 调试您在步骤 3 中创建的配置。
创建远程调试配置
转到 运行 | 编辑配置 ,点击
,然后从模板列表中选择 远程调试。

指定以下设置:
调试器
选择客户端调试器:捆绑 GDB / 捆绑 LLDB、工具链 GDB 调试器之一或自定义 GDB 二进制文件。
'target remote' 参数 (适用于 LLDB 的 'process connect' url)
在此字段中,提供与远程系统的连接。
对于 GDB,这是 IP 地址后跟端口号(如我们的示例中所示)或 另一种格式 的连接详细信息。
对于 LLDB,使用
connect://host:port表示法,例如connect://127.0.0.1:1234。符号文件
这是本地机器上包含调试符号的文件路径,可以是目标上运行的可执行文件的未剥离副本,或仅包含调试信息的 ELF 文件。
最新版本的 GDB 客户端可以自动从 gdbserver 传输符号,因此如果目标上运行的可执行文件是未剥离的二进制文件,留空此字段也可能正常工作。
CLion 在 g[dbserver] 模式下使用 lldb-server,这需要您手动传输所有文件。
路径映射
使用此窗格提供目标机器上的路径(远程 列),以映射到主机上的本地路径(本地 列)。
系统根目录
Sysroot由 GDB/LLDB 客户端用于访问本地系统上带有调试符号的目标库副本(以便在库代码中设置断点和查找源代码行)。大多数最新版本的 GDB 可以自动下载文件,因此无需指定此字段。 但是,请注意,自动下载可能会显著减慢调试过程。
如果您选择手动将库复制到非默认的本地目录,并希望 GDB 使用它,请在此字段中设置其路径。
对于 LLDB,当调试在与主机不同的远程平台上构建且未使用交叉编译的二进制文件时,必须指定 sysroot。 例如,如果您从 macOS 调试到远程 Linux,而二进制文件链接到 Linux 系统库。
在 gdbserver/lldb-server 下远程启动您的程序
要在目标上启动您的应用程序,您可以使用远程终端或调用 CLion 的内置 SSH 终端 (运行 并提供凭据)。
运行 gdbserver 并带有两个参数:
设备名称(用于串行连接)或带端口号的 TCP 主机名(如下示例中的
:1234)。要调试的可执行文件的路径和文件名,后跟程序输入参数(如果有)。

对于 LLDB,使用类似
lldb-server g *:1234 ./binary的命令启动 lldb-server。在 macOS 上,使用 debugserver 作为 lldb-server:
debugserver 0.0.0.0:1234 ./binary。 默认情况下,debugserver 位于 /Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/Resources/debugserver (作为 Xcode 分发的一部分)或 /Library/Developer/CommandLineTools/Library/PrivateFrameworks/LLDB.framework/Versions/A/Resources/debugserver (作为命令行工具的一部分)。Gdbserver/lldb-server 然后在入口点挂起程序并等待客户端调试器连接。
启动远程调试会话
调试共享库
要调试共享库,请在本地机器上的 ~/.gdbinit 或 .lldbinit 中添加以下命令。 有关访问和编辑脚本的更多信息,请参阅 使用 .gdbinit/.lldbinit 配置文件。
为 GDB 设置 solib-search-paths
但是,默认情况下,此命令在调试器启动时执行,在附加到远程目标之前(请参阅相应的 问题)。 作为此问题的解决方法,您可以使用 GDB hooks:
define target hookpost-remote set solib-search-path /path/to/my.so:/path/to/sysroot:/path/to/vendorlibs break main # if you also need the debug sessions to pause at the beginning end通过这种方式,GDB 将在每次连接到远程目标时执行挂钩中指定的
set solib-search-path。适用于 LLDB 的
settings set target.exec-search-paths /path/to/libs
