如何在GDB中美观打印C++ std::vector<std::string>的元素内容
GDB 美观查看
std::vector<std::string> 元素的解决方案 以下三种方案可按需选择:
方案一:开启GDB内置STL美化打印(推荐)
7.0及以上版本的GDB自带STL容器美化打印能力,默认即可隐藏内部冗余结构,仅展示有效内容。如果没有自动生效,可手动执行以下配置命令:
set print pretty onset print object onset print static-members off
配置完成后直接执行print myVector即可得到清晰输出,示例如下:
$1 = std::vector of length 3, capacity 4 = {"hello", "world", "test"}
方案二:临时手动打印(无需修改配置)
如果只是临时使用不想改动GDB配置,可以直接访问std::string内部存储字符串的指针字段,避开冗余结构:
- 打印单个位置的字符串:
print myVector[0]._M_dataplus._M_p - 批量打印所有元素,可使用GDB循环命令:
set $i = 0 while $i < myVector.size() print myVector[$i]._M_dataplus._M_p set $i = $i + 1 end
方案三:固化自定义命令(高频使用可选)
如果经常需要查看这类变量,可以把打印逻辑封装为自定义命令写入~/.gdbinit文件,后续GDB启动时会自动加载:
define print_vector_string set $vec = $arg0 set $i = 0 printf "std::vector<std::string> of length %d:\n", $vec.size() while $i < $vec.size() printf " [%d] = %s\n", $i, $vec[$i]._M_dataplus._M_p set $i = $i + 1 end end
后续使用时直接执行print_vector_string myVector即可得到格式化好的元素列表。
内容的提问来源于stack exchange,提问作者Akagi Akira
相关产品推荐
相关产品推荐

