核心操作是在 Run | Edit Configurations 中选中配置,在 Program arguments 栏输入空格分隔的参数(含空格需手动加双引号),临时配置不保存参数,须保存为永久配置才能固化;远程调试时该字段无效,需在目标端启动带参程序。

Run | Edit Configurations 里填 Program arguments
调试时传命令行参数,核心操作就在 Run | Edit Configurations 对话框里。打开后选中当前调试配置(比如 CMake Application),在右侧找到 Program arguments 输入框,直接填入空格分隔的参数即可,例如:--verbose --input data.json。
注意:这个字段只影响程序启动时的 argv,和环境变量、工作目录是分开设置的。如果参数含空格或特殊字符,CLion 不会自动加引号,需手动用双引号包裹,比如:"path/to file.txt" --mode=debug。
调试嵌入式或远程目标时,参数可能被 gdbserver 忽略
当你用 gdbserver 远程调试(如 Docker 容器或 Linux 设备),Program arguments 字段填的内容默认不会透传给 gdbserver 启动的进程——因为 gdbserver 本身只负责转发调试协议,不解析业务参数。
正确做法是:
- 在目标机器上手动启动带参数的程序:
gdbserver :2345 ./myapp --verbose --port=8080 - CLion 中配置为
Remote GDB Debug类型,并把Host和Port指向gdbserver监听地址 -
Program arguments字段此时留空,否则可能引发重复传参或解析冲突
临时配置 vs 永久配置:参数容易“消失”的原因
点击工具栏绿色虫子图标直接调试,CLion 默认创建的是临时配置,它的 Program arguments 不会保存。下次再点虫子,又得重输。
要让参数固化,必须转成永久配置:
- 运行一次临时调试 → 点击右上角配置名旁的
▶图标 → 选Save Configuration - 或提前进入
Run | Edit Configurations→ 左上角点+→ 选CMake Application模板 → 手动填写所有字段(包括参数)
永久配置图标不透明,临时配置半透明;带红色叉号说明路径或参数格式有误,比如可执行文件不存在,或参数里用了未定义的宏。
参数依赖 CMake 构建类型,Debug 和 Release 行为可能不同
如果你的程序逻辑根据 argc/argv 做条件分支,而 CMakeLists.txt 里用了 add_definitions(-DDEBUG) 或类似开关,要注意:参数本身不触发宏定义,但构建类型会影响代码是否编译进相关分支。
例如,某段解析 --dump-memory 的代码被包在 #ifdef DEBUG 里,那即使你在 Release 模式下传了该参数,实际也不会生效。
验证方式:
- 看工具栏右下角显示的当前 CMake profile(如
Debug/Release) - 必要时在
Run | Edit Configurations的Build target下拉菜单中切换 profile - 确保你调试的二进制确实包含你期望处理参数的那段逻辑
参数本身没玄机,但和构建上下文耦合时,最容易在换 profile 后发现“明明传了却不响应”。


















