GDB使用stl-view打印map<string,vector<string>>内容报错如何解决
问题原因
你遇到的报错是因为stl-views.gdb自带的pmap命令参数解析逻辑不支持包含尖括号的嵌套类型参数,传入vector<string>时无法被GDB正确识别为已定义类型。
可行解决方案
方法1:分两步打印目标键的value(最稳妥,无需修改代码)
不需要打印整个map,先取出Node1对应的vector,再用自带的pvector命令打印内容即可:
- 先安全获取目标键对应的value(避免用
[]插入空元素修改原对象):p (*(m1.find("Node1"))).second - 直接把该value作为参数传入
pvector命令:
执行后就会输出你想要的pvector (*(m1.find("Node1"))).second stringN1S1、N1S2、N1S3三个元素。
方法2:给嵌套类型定义别名(适合高频打印同类型嵌套结构的场景)
在你的C++代码中给嵌套的vector类型加typedef别名:
typedef vector<string> StrVec; map<string, StrVec> m1;
重新编译运行程序后,直接用别名作为pmap的参数即可正常打印整个map:
pmap m1 string StrVec
方法3:修改pmap的类型解析规则(适合不想改业务代码的场景)
直接编辑你本地的stl-views.gdb文件,找到pmap命令处理类型参数的逻辑,给类型参数增加引号支持,修改完成后就可以传入带引号的嵌套类型:
pmap m1 string "vector<string>"
内容的提问来源于stack exchange,提问作者anurag86
相关产品推荐
相关产品推荐

