CLION中GDB调试无法访问内存,如何配置GDB?
问题分析与解决
核心原因
- 你尝试修改的内存地址
0x100403055属于只读内存段(通常是程序的字符串常量区),操作系统会标记这类内存为不可写,无论GDB调试还是直接运行程序,写入操作都会失败。 - 代码中
token函数里的*s='\0'操作,如果是针对字符串字面量(比如直接传递"xxx"这类字面量作为参数),必然触发该问题——C语言中字符串字面量默认存储在只读数据段,不允许修改。
解决方案(无需特殊GDB开关)
- 修正参数传递方式:避免直接传递字符串字面量给
token函数,改用可修改的内存存储字符串:- 栈内存方式(适合短字符串):
char input_str[] = "你的测试字符串"; // 将字面量复制到栈内存,具备可写权限 token(input_str); - 堆内存方式(适合长字符串或动态分配场景):
char *input_str = strdup("你的测试字符串"); // 复制字面量到堆内存,可写 if (input_str != NULL) { token(input_str); free(input_str); // 使用完毕后释放堆内存 }
- 栈内存方式(适合短字符串):
- 编译选项确认:检查编译配置,确保没有额外强制只读的选项(默认情况下,编译器会将字符串字面量放入只读段,这是标准行为,无需修改编译开关)。
- GDB验证内存属性:在调试时,执行
info files命令查看内存段权限,确认0x100403055所在段是否标记为r--(只读),进一步验证原因。
附你提供的相关内容
完整main.c代码
// 粘贴你的main.c代码内容
GDB调试错误输出
Cannot access memory at address 0x100403055
程序运行输出
所有测试用例均失败的具体输出内容
内容的提问来源于stack exchange,提问作者P Moran
相关产品推荐
相关产品推荐

