visual studio 调试技巧总结

总结一下在项目中经常会用到的调试技巧,有些真是相见恨晚啊。

修改变量值

调试过程中,触发某个断点之后,我们可以把鼠标放在某个变量上,此时会弹出一个数据框来显示变量的值,此时我们可以直接在这个数据框里填入我们想要的数值,然后继续运行。

设置条件断点

最简单设置断点的方法就在用鼠标点一下代码的左侧。这样每次运行到这里都会触发断点。但是有时候我们不想每次都出发。比如:

1
2
3
int sum = 0;
for(int i = 0;i < 100; i++)
sum += i;

我们想在i == 5的时候在for语句那行出发断点,就可以这么设置:

然后红色的圆就会出现一个十字架。

数组内容的查看

在代码里如果有如下代码:

1
2
int a[10] = {1,2,3,4,5,6,7};
int *b = a;

我们想查看指针b所指数组的所有数据,可以watch窗口里这样写:b,10。就可以查看数组里的内容了。

数据格式设定

Visual studio默认情况下都不会以八进制,十六进制等等格式来显示数据,所以,如果你有这个需求的话,可以参考后面的文章:Format specifiers in C++ in the Visual Studio debugger

Release with Debug Info

如果你有个很大的程序的话,每次Debug你可能都要等个半天才能重新编译。如果你还是搞图形学的,调试个物理引擎里的Bug的话,有没有想死的感觉。反正我有啊。当我改了代码一个小小的地方,我多么想让它快点编译啊。
以前以为Release就是不能Debug的,后来发现。只要我们动动可爱的手指,该一下配置,就可以有几乎Release的速度,还能调试,简直不能更爽,有没有!?

不过也有缺陷,那就是Release模式下Debug的画,有些变量会被优化掉,看不到他们的值,而且有时候显示的变量值是乱的,特别是数组啊,向量啊这些。

具体的配置方法:here

自定义数据显示格式

Eigen是一个数学库。在调试的过程中,看到一个变量如下图:
Eigen variable
我们发现很多无用的内容,我们只关注array里面的数字,也就是我用红框框出来的。那么Visual Studio是允许我们自定义变量的显示格式的,不过这个需要我们自己写个插件(见参考1)。
不过幸运的是,Eigen这个大型的项目已经给我们准备好了,我们把Eigen库里写好的插件放到特定的位置(见参考2),重新启动Visual Studio开始调试,就可以看到没用的内容消失了。
如下图所示:
Eigen simple variable
[参考]:
1.Create Custom Visualizers of Data

  1. How to: Install a Visualizer
文章目录
  1. 1. 修改变量值
  2. 2. 设置条件断点
  3. 3. 数组内容的查看
  4. 4. 数据格式设定
  5. 5. Release with Debug Info
  6. 6. 自定义数据显示格式
,