VS使用过程中的常用技巧

news/2024/7/10 5:29:18 标签: 优化, 异常, vs, bug, 调试

1.可以实时改变量

调试器不仅仅是一个分析程序崩溃或是异常结果的工具了,许多bug都可以通过步入新写的函数,检查函数是否如期望的那样运行来预防。有时候你可能会好奇“如果条件为真函数会正确运行吗”大多数情况下,根本不需要改变代码重启挑起,仅仅把鼠标悬停到一个变量上,双击值然后输入一个新值就可以了。

2.设置下一条语句

一个典型的调试情况就是通过单步跟踪分析为什么一个函数调用失败了。当你发现一个函数调用的另一个函数返回错误的时候你会怎么做?重启调试?有更好的方法。拖动这个黄色的语句标识到你想下一步执行的语句前就可以了。比如你刚才失败的那块,然后步入。简单,不是吗?

3.编辑然后继续

调试一个复杂的程序,或是一个插件的时候,在一个被调用很多次的函数处发现一个错误。但是不想浪费时间停下来,重新编译然后重新调试。没问题,仅仅在该处改正代码然后继续单步就可以。VS会修正程序然后继续调试不需要重启

 注意,编辑然后继续有大量的已知限制,首先,64位代码是不行的。如果他如果为你的C#程序工作。就去工程设置的生成选项,然后目标平台为x86.不要担心。发布版的目标平台和调试的时候是分开的。可以被设置为任何平台。。

 第二.编辑然后继续改变在一个方法里应该是局部的。。如果你改变了方法签名,添加一些新方法或是类。你就不得不重启程序了。或者撤销改变来继续。改变方法也包含lambda表达式隐式修改的自动生成的代理类,因此也不能继续。

4.方便的监视窗口

大概现代的调试器都有一个监视窗口,无论如何。VS允许你简单的添加或移除变量。单击空行,输入你的表达式按下回车,或者是在不需要的表达式上按下Delete键就可以删除了。

而且。从监视窗口你不仅仅可以看到“正常”的变量。你可以输入$handles 来追踪你的程序打开了多少句柄(可以方便的修复内存泄漏),输入$err 可以看到上一个函数的错误码,然后使用工具-错误信息可以看到更详细的描述,或者输入@eax(64位是@rax)来查看包含函数返回值的寄存器。

5.命令窗口

第十一的技巧chaau已经建议过了。确实可以节省很多时间,VS支持命令窗口,可以通过,视图-其他窗口-命令窗口来启动。一旦激活,你可以输入不同的命令来自动化调试。举个例子。你可以通过如下命令 简单的模拟MFC COleDateTime  变量。

 
? dt.Format("%Y-%m-%d %H:%M:%S") 

6.带注释的反汇编

使用交互式的反汇编模式可以使得优化程序的关键部分变得很容易,VS给出对应你代码每一行的汇编指令,并且运行单步运行。同时,可以在任何位置设置断点。而且,表达式的查看和修改也像在C++代码里一样。

7.带有栈的线程窗口 

调试多线程的程序是痛苦的。。或者也可以是很有趣的。取决于你的调试器。VS2010真正优美的特性是线程窗口的栈视图,通过窗口的调用栈你可以方便的总览线程。

 8.条件断点

如果你尝试通过断点再现一个罕见的事件,该情况引发了一些严重的错误。你可以添加条件断点。定义一个断点的条件,然后如果条件不成立,VS会忽略该断点。

9.内存窗口 

有些bug由不正确的结构体定义引起,忽略的对齐属性等等。查看内存中的内容可以定位然后修复bug。VS提供了一个放百年的内存窗口,可以把值以8/16/32/64位的形式展示。还有浮点值。也允许实时改变他们。就像在文本编辑器里一样。

10.转到定义

这个特性不是直接关于调试的,而是关于浏览大项目的。如果你尝试找到一些不是你自己写的代码中的错误,快速知道“这个类型是什么”或者“这个函数是干嘛的”,可以节省很多时间,VS通过一个转到定义命令方便了你。


http://www.niftyadmin.cn/n/683782.html

相关文章

PHP中文截取,UTF8和GBK详解 cn_substr_gbk cn_substr_utf8

这个是51js上面的文章,替换dedecms的 cn_substr 听说速度更快 ,不过代码 已经通过我自己的测试$cfg_soft_lang utf-8;/*** 中英文截取字符串,汉字安2个字节** access public* param string $str 需要截取的字符串* param int $cutLen 截取的长…

请不要做浮躁的人——转给即将上路的程序员朋友

最近半年多来收到不少网上留言和邮件询问程序代码问题,我个人比较喜欢讲思路然后再指定一些参考网址或者文章,不过似乎太多初学者不太领情,丝毫不顾自己 薄弱的基础,只求代码,别的什么也不顾,说实在话本人工…

php json_decode 不支持的模式

php json_decode 不支持的模式mtopjsonp1({"api":"com.taobao.search.api.getShopItemList","v":"2.0","ret":["FAIL_SYS_ILLEGAL_ACCESS::非法请求"],"data":{}})php json_decode 不支持的模式最前面有…

Linux 不需要磁盘清理

linux官方资料主要介绍了外部碎片(externalfragmentation)、内部碎片(internalfragmentation)的概念及相关情况,说明了linux文件系统在磁盘还有5%空闲空间的情况下是不需要碎片整理的。(Linuxnative file s…

html5 使用FileReader对象的readAsDataURL方法来读取图像文件

使用FileReader对象的readAsDataURL方法来读取图像文件jquery2000 2014-4-3 13:52:27 阅读(3234) 评论(0)FileReader对象的readAsDataURL方法可以将读取到的文件编码成Data URL。Data URL是一项特殊的技术,可以将资料(例如图片)内嵌在网页之中,不用放到外…

大数据5V特点 --- 5Vs of Big Data

IBM提出了大数据”5V”特点: 一、Volume:数据量大,包括采集、存储和计算的量都非常大。大数据的起始计量单位至少是P(1000个T)、E(100万个T)或Z(10亿个T)。 二、Variety…

深入学习ArrayList 和 LinkedList类

先来看一小段程序,实现了一个简易记事本的功能; import java.awt.event.*; import java.util.*; import javax.swing.*; public class JAVA链表系统库 {static JFrame f new JFrame();static MPanel mp new MPanel();public static void main(String a…

Quick Intro to Quantum Computers

Today, I’m gonna quickly go through one of the most trending topics – Quantum Computers. What is a quantum computer ? Quantum Computers are devices using a quantum logic for general purpose computing. Unlike electronic computers (or traditional comput…