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

CLION中GDB调试无法访问内存,如何配置GDB?

问题分析与解决

核心原因

  • 你尝试修改的内存地址0x100403055属于只读内存段(通常是程序的字符串常量区),操作系统会标记这类内存为不可写,无论GDB调试还是直接运行程序,写入操作都会失败。
  • 代码中token函数里的*s='\0'操作,如果是针对字符串字面量(比如直接传递"xxx"这类字面量作为参数),必然触发该问题——C语言中字符串字面量默认存储在只读数据段,不允许修改。

解决方案(无需特殊GDB开关)

  1. 修正参数传递方式:避免直接传递字符串字面量给token函数,改用可修改的内存存储字符串:
    • 栈内存方式(适合短字符串):
      char input_str[] = "你的测试字符串"; // 将字面量复制到栈内存,具备可写权限
      token(input_str);
      
    • 堆内存方式(适合长字符串或动态分配场景):
      char *input_str = strdup("你的测试字符串"); // 复制字面量到堆内存,可写
      if (input_str != NULL) {
          token(input_str);
          free(input_str); // 使用完毕后释放堆内存
      }
      
  2. 编译选项确认:检查编译配置,确保没有额外强制只读的选项(默认情况下,编译器会将字符串字面量放入只读段,这是标准行为,无需修改编译开关)。
  3. GDB验证内存属性:在调试时,执行info files命令查看内存段权限,确认0x100403055所在段是否标记为r--(只读),进一步验证原因。

附你提供的相关内容

完整main.c代码

// 粘贴你的main.c代码内容

GDB调试错误输出

Cannot access memory at address 0x100403055

程序运行输出

所有测试用例均失败的具体输出内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:01:38