You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Mac CLion使用Toolchains Docker容器无法获取valgrind memcheck输出

解决步骤

1. 修复arm64架构下valgrind版本兼容性问题

你使用的M1芯片为arm64架构,Ubuntu 20.04官方源内置的valgrind 3.15.0版本对arm64支持存在严重缺陷,极易出现运行无输出、崩溃的问题,需要手动编译安装最新稳定版valgrind:

  • 先安装编译依赖:
    apt update && apt install -y wget bzip2 build-essential
  • 下载valgrind最新稳定版源码包,解压后进入源码目录
  • 执行编译安装命令:
    ./configure --prefix=/usr/local && make -j$(nproc) && make install
  • 验证安装:执行valgrind --version确认版本为最新稳定版即可。

2. 调整Docker容器启动权限

valgrind运行需要额外的系统权限,你当前的启动命令权限不足,需要修改docker run参数,新增--privileged参数:
docker run -d --privileged --cap-add sys_ptrace -p127.0.0.1:2222:22 --name clion_remote_env clion/remote-cpp-env:0.5
如果不想开启完全特权模式,也可以额外新增--cap-add SYS_ADMIN参数替代。

3. 确认编译配置符合valgrind要求

valgrind需要带调试符号、无高阶编译优化的二进制文件才能正常输出结果:

  • 在CLion中将CMake构建模式设置为Debug
  • 确认编译参数中包含-g调试符号参数,不存在-O2/-O3等优化参数

4. 验证valgrind运行状态

先通过ssh进入容器,手动测试valgrind是否能正常输出:

  • 编写简单的测试C代码
#include <stdlib.h>
int main() {
    int* p = malloc(sizeof(int));
    *p = 1;
    return 0;
}
  • 编译代码:gcc -g test.c -o test
  • 执行valgrind检测:valgrind --leak-check=full ./test
    如果手动执行有内存泄漏输出,说明valgrind本身正常,只需在CLion的valgrind配置中,将valgrind执行路径设置为你手动安装的路径/usr/local/bin/valgrind即可;如果手动执行仍无输出,优先检查前两步的配置是否正确。

备选方案

如果上述操作仍无法解决,可以将Docker基础镜像替换为Ubuntu 22.04,其官方源内置的valgrind 3.18.1版本对arm64架构的支持更为完善,无需手动编译即可正常使用。

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:24:05