11个强大的 Visual Studio 调试技能

简介

  调试是软件开辟周期中很首要的一项目组。它具有挑衅性,同时也很让人困惑和懊恼。总的来说,对于稍大一点的法度,调试是不成避免的。比来几年,调试对象的成长让很多调试任务变的越来越简单和省时。

  这篇文章总结了可能节俭你多量时候的十个visual studio的调试技能和办法。

  1 悬停鼠标查看表达式值

 

  调试是很有挑衅性的。比如在函数内慢慢运行可以看出哪里失足,查看客栈信息可以知道函数被谁调用等等。。。

  然则无论哪种景象下,查看表达式和局部变量的值都是很麻烦的(把表达式和局部变量放到watch窗口里)。

  一种更简单的办法,把鼠标停在所需查看的数据上。若是是类或布局,那么点击展开可以很便利快速地查看其字段。

  2 在运行过程中改变变量值

 

  调试器不仅仅是解析法度溃散和诡异行动的对象,还可以经由过程慢慢调试搜检数据和行动是否合适法度预期的办法解决很多bug。有时,你会想是否设置某些前提为真,法度就能正确运行了。其实你只要把鼠标移动到变量上,双击值,然后输入你须要的值。如许就不须要批改代码,重启法度了。

  3 设置下一个运行地位

 

 

  一个典范的调试案例是我们经常会用慢慢调试的办法去解析为什么函数失足了。这时你碰到这个函数调用其他函数返回错误,而这个错误不是你想要的,你该怎么办?重启调试器?这里有个更好的办法,直接把的运行地位箭头拖到你想要的运行地位。其实就是跳过中心运行代码,直接到想要的地位。很简单吧。

  4 编辑然后持续运行

 

 

  在运行一个很错杂的法度和插件时,发明一个错误,然则不想浪费时候去重编译重启动法度。

  很简单,只要在这个地位批改这个bug,然后持续调试。Visual studio会批改这个法度,使得你可以持续调试而不须要重启法度。

  值得重视的是“编辑然后持续运行”这个功能有几个限制。一,它不克不及在64位代码上应用。若是想应用这个功能,到项目设置里的编译选项,选择”x86”作为目标平台。不要愁闷,这目标平台在reslease设备是和”debug是分别的,也就是说依然是”Any  CPU”的设置。二,“编辑然后持续运行”这个功能仅实用于一个函数内部改变。若是你想要改变这个函数的声明或者增长新的办法,你只能选择重启法度,或者不做任何改变持续。若是批改的办法中包含lambda表达式,则意味着批改了编译器主动生成的委托类型,如许会导致编译器停止运行。

  5 一个便利的查看窗口

 

 

  大项目组现代的调试器都有查看窗口。然则,visual studio的查看窗口应用希罕简单,你能很便利的增长和删除变量。只要在窗口里点击空白行,输入表达式然后按enter键。或者点击表达式,按键删除不须要的表达式。

  在调试窗口不仅仅可以查看通俗的变量值,甚至可以输入¥handles去追踪打开的句柄数量,¥err去查看函数的错误代码(然后应用 Tools->Error 查看错误代码的描述)或者输入 @eax(在64位下是@rax )查看包含函数返回值的存放器值。

  6 注释反汇编

 

 

  应用内部的反汇编功能使得优化局部代码加倍简单。Visual studio可以在你的每一行代码下显示汇编指令,并且可以慢慢调试汇编代码,也可以在随便率性地位设置断点。查看和批改汇编代码类似于c++。

  7 客栈信息的线程窗口

 

 

  调试多线程代码是很疾苦的。或许也是有趣的。这取决于你的调试器。Visual studio 一个很赞的功能就是在线程窗口查看线程的客栈信息。你能很便利的直接看到所有线程以及他们的客栈信息。

  8 前提断点

 

 

  若是你想重现一个小概率事务,然则断点在多量不须要的前提下也会触发。你可以很简单的设置前提断点。在断点窗口设置该断点前提,Visual studio 会主动忽视不合适前提的断点。

  9 内存窗口

 

 

  一些bug是由错误的布局定义、缺乏对齐属性等原因引起的。查看每行内存的内容很轻易定位和解决这些bug. Visual studio 的内存窗口可以把数据翻译成8/16/32/64-bit数字或者浮点数。你可以在编辑窗口直接改变数值。

  10 跳转到定义

 

 

  若是你在解决别人写的代码一个bug,会碰到“这个类型是什么”“这个函数做什么的”之类的题目,你可以应用visual studio的跳转到定义的号令来查看类型或函数的定义。

  11 号令窗口

 

 

  这个小技能是由chaau建议的,它能节俭你多量的时候。Visual studio支撑一个号令窗口,你可以经由过程菜单View->Other Windows->Command Window 打开。你可以在窗口里输入不合号令使调试主动化。比如,可以经由过程很简单的号令去的测试MFC的COleDateTime变量。

原文地址:https://www.cnblogs.com/firstcsharp/p/3622495.html