本文中的VisualGDB开发调试环境为Visual Studio 2015加VisualGDB 5.4R12版本,并且使用了笔者改进过的STL可视化调试库CSTLTypeVisualizer.dll,原版的STLTypeVisualizer.dll不支持字符串转码,不支持Clang的STL调试。

一、 Windows项目

VisualGDB的Windows项目可以使用MinGW或者Cygwin作为开发环境,它们默认都是使用的GCC编译器,所以配置上没什么差别。笔者使用VisualGDB官方出的SysGCC 9.1作为示例来说明(如果想使用更新一些的工具集,可以使用msys2中的MinGW32/MinGW64,它不仅支持GCC,还支持clang,目前最新的GCC版本为9.2,GDB为8.3.1,Clang为9.0)。

由于是Windows项目,控制台默认是使用的本地编码,简体中文使用的GBK,所以需要在编译时加上-fexec-charset=GBK参数,这样在控制台的输出才能正常显示,如果控制台是其它编码,编译时设置为一样的编码即可。但是这样设置后,调试字符串时会看到是乱码。所以还需要运行GDB的命令:

set charset UTF-8
set target-charset GBK


其中:
set charset UTF-8是设置主机(host)字符编码为UTF8
set target-charset GBK是设置目标程序的编码为GBK。

这样设置后,GDB会将目标程序编码自动转换为主机(host)字符编码,即由GBK转为UTF-8,然后CSTLTypeVisualizer.dll会以UTF-8编码解析这个字符串(为了兼容性,CSTLTypeVisualizer.dll默认GDB的host-charset为UTF-8,即只接受以UTF-8编码的字符串)。如果是使用命令行GDB直接调试,则需要把charset与target-charset都设置为GBK,否则调试字符串时会显示乱码
另外,由于GDB默认的输出字符串有长度限制,默认是200,如果字符串比较长,想要全部显示(会影响性能),可以使用命令:

set print element 0

需要注意的是:不是所有Windows发行版本的GDB都完全支持这些命令,笔者使用的这个发行版本是完全支持的。

二、 Linux项目

Linux平台的下可以选择的组合就比较多了,构建方式VisualGDB支持Makefile以及CMake等,CMake又支持GNU make和ninja两种,编译器支持GCC以及Clang,所以喜欢怎么用就怎么用。



这里需要注意的是:
1.如果使用Clang编译器进行编译,如果使用的是clang的libc++库,调试版需要定义宏:

_LIBCPP_DEBUG=1

如果使用的是GCC的libstdc++库,调试版需要定义宏:

_GLIBCXX_DEBUG

否则调试时看不到字符串的值。当然如果使用GCC编译器,调试版也建议加上。
2.如果使用CMake时,在建立好项目后,点Underlying build system右边的按钮重新选择使用GNU Make还是Ninja时,下面一行的构建命令不会自动更新,需要手动设置。这一点也适用于Windows项目。

上面所示即是没有更新构建命令,需要如下图所示的更改:
关于编码及乱码处理:
由于Linux平台下默认是UTF-8编码,GCC、Clang以及GDB也默认使用的是UTF-8编码,所以只有源码使用的不是UTF-8编码的情况下容易出现乱码。GCC以及Clang在不指定任何源文件编码的情况下(即不使用-finput-charset参数指定源文件编码),是将源码中的字符串原样处理的,即如果源码中的字符串是GBK编码,编译后还是GBK编码。所以我们可以用以下方式进行处理:
1.只要源文件能完全编译通过,有非法字符串编码的警告:

warning : illegal character encoding in string literal [-Winvalid-source-encoding]

可以不用管。在调试时设置GDB目标字符串编码(target-charset)为GBK即可,但是VisualGDB控制台输出字符串会是乱码。

下图是查看GDB的target编码与host编码,默认都是UTF-8,通过上面的设置后target-charset会变为GBK。

2.GCC可以使用参数进行设置,比如源码是GBK编码,可以添加编译参数:

-finput-charset=GBK

至于Clang,目前不支持除UTF-8外的编码,所以最好是将所有使用了ANSI编码外的源文件转为UTF-8编码(如果是只有注释使用了非ANSI编码就可以不用转了)。

三、运行效果图

下面是Windows测试用例的运行效果图:

string字符串:

const char*字符串:

set:

map:

vector:

unique_ptr:

shared_ptr:

控制台的正常输出:

下面是Linux项目的运行图:
Clang的string字符串

Clang的map:

VisualGDB可视化调试STL相关推荐

  1. asp.net访问sqlserver获取数据、IsPostBack属性和VS可视化调试的概念

    新建一个asp.net网站:sqlserver中有如下一张表: 新建一个页面, demo1.aspx:在页面上添加一个GridView控件: demo1.aspx.cs代码: using System ...

  2. VS可视化调试学习总结

    .NET开发人员必备的可视化调试工具 (你值的拥有) http://sanwen8.cn/p/52airn6.html http://www.cnblogs.com/cyq1162/p/6027051 ...

  3. HarmonyOS之变量可视化调试

    一.概述 在 HarmonyOS 应用调试过程中,查看变量的变化过程是否符合预期结果是一项常用的调试方法.为此 DevEco Studio 提供了调试变量的可视化功能,支持 Java.C/C++ 和 ...

  4. 超强一代JupyterLab发布,可视化调试、中文显示、简单交互界面

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  5. [伊利丹·怒风] Unity3D 绘制矩形(DrawRect)及可视化调试

    背景 由于要做Native2D的A* 算法寻路,所以必须进行Scene的网格划分,而进行了网格划分需要进行可视化的调试,需求就是这个逻辑.具体是实现如下效果,这里绿色的区域就是角色不能进入的区域(或者 ...

  6. Vulkan_渲染可视化调试(VK_EXT_debug_marker与RenderDoc离线图形调试)

    在使用vulkan实现各项渲染工作的时候,我们经常会因为各种不经意的坑导致渲染失败,所以调试工作就尤为重要,所以今天我们就来说一下如何可视化vulkan的各项进程来调试程序. 一.简介 首先我们来说一 ...

  7. CubeMX+VSCode+Ozone的STM32开发工作流(三)利用Ozone进行可视化调试和代码分析

    neozng1@hnu.edu.cn 本教程的示例代码是笔者参加RoboMaster机甲大师赛为机器人编写的控制器框架,你可以直接克隆仓库,阅读仓库下的Markdown文档获得更好的体验,记得点一个小 ...

  8. [ROS]动态参数设置-可视化调试-创建cfg文件

    用途:调试时(尤其在导航和建图应用中)需要经常修改程序中的参数值,这时无论时修改命令行,还是编写固定修改参数的可执行文件,都无法满足要求.ROS为我们提供了动态参数设置机制. 一.创建cfg文件 创建 ...

  9. 真香预警,这个VSCODE可视化调试Go程序的方式,比直接用 dlv 命令香多了

    据不权威媒体报道,每位程序员身边都有一位这样的同事,觉得用命令行比用可视化工具牛逼.每次办公室遇见这样的,我都会腹黑一番:"用工具.命令那不都一样,纯看个人喜欢,觉得用命令牛逼你咋不用vim ...

最新文章

  1. 同济计算机转专业吗,被不喜欢的专业录取了?大学想转专业需谨慎
  2. 【干货】如何确定需求优先级,如何确定功能优先级
  3. 【Linux】一步一步学Linux——sshd命令(177)
  4. 8X53 VS 6763
  5. nginx PHP执行 502 bad gateway 或空白解决笔记
  6. golang基础之三-字符串,时间,流程控制,函数
  7. discuz自动添加兼容html5标签的音乐播放器
  8. 【杭电ACM】1.2.6 decimal system
  9. 20200621每日一句
  10. WPS中的EXCEL冻结首行问题
  11. 苹果手机代数_苹果一共几代?
  12. VSCode 使用 StandardJS 自动格式化代码
  13. 北大青鸟 某百货商场当日他在消费积分最高的八名顾客,他们的积分分别是18,25,7,36,13,2,89,63.编写程序找出的积分及他在数组中的下标
  14. 3月4日 与柳传志面对面(谁是这个时代的思想家)
  15. 【java】java intellij idea 破解
  16. 股票ctp交易接口是什么?
  17. 百度官方:网站优化中死链处理指南与总结
  18. 开发一款app软件需要什么样的服务器
  19. sql查询大于平均得分的球员的名字和得分,并追加显示平均得分的列
  20. web前端颜色配色大全

热门文章

  1. 群晖室开虚拟机安装于服务器,如何在虚拟机上安装黑群晖?
  2. 一阶数字低通滤波器设计matlab
  3. CTFshow-Web入门writeup
  4. CodeGear 6月8日西安新品发布会 笔记
  5. docekerfile文件详解
  6. 2d有限元计算机仿真,超精密单点金刚石车削加工有限元仿真
  7. 基于java的网上水果销售管理系统
  8. 【产品经理L1学习第三章——产品文档:PMD、MRD、PRD】
  9. 如何在苹果笔记本上装win7系统
  10. 【斯坦福计网CS144项目】环境配置 Lab0: ByteStream