调试是软件开发周期的重要组成部分。它具有挑战性,同时也非常令人困惑和讨厌。一般来说,对于稍微大一点的程序,调试是不可避免的。近年来,调试工具的发展使得许多调试任务变得越来越简单和省时。
1悬停鼠标查看表达式值。
调试非常具有挑战性。例如,您可以通过一步一步地运行函数来查看出了什么问题,并且可以通过查看堆栈信息来知道是谁调用了该函数。
然而,无论如何,检查表达式和局部变量的值是非常麻烦的(将表达式和局部变量放在观察窗口中)。
一种更简单的方法是将鼠标悬停在要查看的数据上。如果它是一个类或结构,请单击“展开”以方便快捷地查看其字段。
2在操作过程中改变变量值。
调试器不仅是分析程序崩溃和怪异行为的工具,还可以通过逐步调试来检查数据和行为是否符合程序预期,从而解决许多bug。有时候,你会想是否可以将某些条件设置为真,这样程序才能正确运行。事实上,您只需要将鼠标移到变量上,双击该值,然后输入您需要的值。这样就不需要修改代码和重启程序了。
3设置下一个操作位置。
一个典型的调试案例是,我们经常使用逐步调试的方法来分析函数为什么会出错。此时,当这个函数调用其他函数时,您会遇到一个错误,但这个错误不是您想要的。你该怎么办?重新启动调试器?这里有一个更好的方法将黄色跑步姿势箭头直接拖动到您想要的跑步姿势。其实就是跳过中间运行的代码,直接去想要的位置。很简单,不是吗?
4编辑并继续运行。
在运行复杂的程序和插件时,发现了一个错误,但不想浪费时间重新编译和重启程序。
很简单,只需在这个位置修改bug,继续调试即可。Visual studio将修改此程序,以便您可以在不重新启动程序的情况下继续调试。
值得注意的是,“编辑然后继续运行”功能有几个限制。第一,它不能用于64位代码。如果要使用此功能,请转到项目设置中的编译选项,并选择“x86”作为目标平台。不用担心,reslease中这个目标平台的配置是和“调试”分开的,也就是说还是设置为“任意CPU”。第二,“编辑后继续运行”的功能只适用于一个功能的内部变更。如果要更改此函数的声明或添加新方法,只能选择重新启动程序或继续,而不做任何更改。如果修改后的方法包含lambda表达式,则意味着编译器自动生成的委托类型已被修改,这将导致编译器停止运行。
5一个方便的观察窗。
大多数现代调试器都有查看窗口。但是,visual studio的查看窗口使用起来非常简单,可以轻松添加和删除变量。只需点击窗口中的空行,输入表达式并按回车键。或者点击表达式并按delete键删除不必要的表达式。
在调试窗口中,您不仅可以检查公共变量值,还可以输入$handles来跟踪打开的句柄数量,$err来检查函数的错误代码(然后使用Tools-Error来检查错误代码的描述),或者输入@eax (@rax,64位)来检查包含函数返回值的寄存器值。
6注释反汇编。
使用内部反汇编函数可以更容易地优化本地代码。Visual studio可以在代码的每一行下显示程序集指令,逐步调试程序集代码,并在任何位置设置断点。查看和修改程序集代码类似于c。
7堆栈信息的线程窗口。
调试多线程代码是痛苦的。也许这也很有趣。这取决于您的调试器。Visual studio的一大功能就是在线程窗口中查看线程的堆栈信息。您可以直接轻松地看到所有线程及其堆栈信息。
8个条件断点。
如果你想重现一个小概率事件,断点会在很多不必要的条件下触发。您可以简单地设置条件断点。在断点窗口设置断点条件,Visual studio会自动忽略不满足条件的断点。
9记忆窗口。
一些错误是由不正确的结构定义和缺少对齐属性引起的。通过查看每一行内存的内容,很容易找到并解决这些错误。Visual Studio的内存窗口可以将数据转换为8/16/32/64位数字或浮点数。您可以直接在编辑窗口中更改该值。
10跳到定义。
如果你在解决别人写的代码中的一个bug,你会遇到诸如“这是什么类型?”“这个函数有什么作用?”您可以使用visual studio的跳转到定义命令来查看类型或函数的定义。
11命令窗口。
这个招数是chaau建议的,可以帮你节省很多时间。Visual studio支持命令窗口,您可以通过菜单“视图-其他窗口-命令窗口”打开该窗口。您可以在窗口中输入不同的命令来自动调试。例如,您可以用一个简单的命令测试MFC的COleDateTime变量。
以上就是Visual Studio的11个调试技巧分享给大家,希望对大家的学习有所帮助。