强大的Visual Studio调试小技巧

1, 在运行过程中改变变量值

 

调试器不仅仅是分析程序崩溃和诡异行为的工具,还可以通过逐步调试检查数据和行为是否符合程序预期的方法解决许多bug。有时,你会想是否设置某些条件为真,程序就能正确运行了。其实你只要把鼠标移动到变量上,双击值,然后输入你需要的值。这样就不需要修改代码,重启程序了。

2,编辑然后继续运行


在运行一个很复杂的程序和插件时,发现一个错误,但是不想浪费时间去重编译重启动程序。很简单,只要在这个位置修改这个bug,然后继续调试。Visual studio会修改这个程序,使得你可以继续调试而不需要重启程序。

值得注意的是“编辑然后继续运行”这个功能有几个限制。一,它不能在64位代码上使用。如果想使用这个功能,到项目设置里的编译选项,选择”x86”作为目标平台。不要担心,这目标平台在reslease配置是和”debug是分离的,也就是说依然是”Any CPU”的设置。二,“编辑然后继续运行”这个功能仅适用于一个函数内部改变。如果你想要改变这个函数的声明或者增加新的方法,你只能选择重启程序,或者不做任何改变继续。如果修改的方法中包含lambda表达式,则意味着修改了编译器自动生成的委托类型,这样会导致编译器停止运行。

3, 条件断点

如果你想重现一个小概率事件,但是断点在大量不需要的条件下也会触发。你可以很简单的设置条件断点。在断点窗口设置该断点条件,Visual studio 会自动忽略不符合条件的断点。


4, 线程重命名

在调试多线程应用程序时,线程窗口会显示创建了哪些线程以及当前正在运行的线程。线程越多,想找到你想要的线程就越困难(尤其是当一段程序被多个线程同时执行的时候,你不能确切地知道哪个才是当前正在执行的线程实例)。


调试器允许修改线程的名字,可以在线程窗口使用线程的快捷菜单,给线程重命名。


5,给指定线程设置断点

对于多线程应用程序来说,另一个有用的技巧就是给指定的线程,进程,甚至是计算机中的断点设置过滤.可以通过断点的Filter命令来实现此功能.

调试器允许你指定线程名,线程ID,进程名,进程ID和机器名的任意组合(使用AND,OR,NOT)来设置过滤。了解怎样设置线程名字也使得这项过滤操作变得更加简单。


Breakpoint Filter-> Filter: ThreadName = "thread1"


6,(粗略)估算执行时间

@clk,它用于显示计数器的值,可以粗略地计算出两个断点之间的代码的执行时间,单位是微秒(μS)。但是,千万不要用这个方法来分析程序的执行效率,应该使用Visual Studio 分析工具或者性能计时器来分析。

可以在Watch 窗口或者即时窗口添加@clk=0来完成对计时器的重置。因此要想估算执行一段代码需要多长时间,可以按照下面的步骤来操作:

  1. 在代码块的开始位置设置断点
  2. 在代码块的结束位置设置断点
    1. 在Watch窗口添加 @clk
    2. 程序进入到第一个断点时,在即时窗口输入@clk=0
    3. 运行程序直到执行进入代码块末尾的断点,查看Watch窗口 @clk的值。

注意网上有一些技巧说在Watch窗口添加两个表达式:@clk和@clk=0,需要在每次执行断点的时候都要重置计时器。这种用法只适用于Visual Studio的老版本,在VS2005及以上版本不再适用。

7,异常中断

Vistual Studio允许你去指定想要中断的异常类型或者特殊异常。选择菜单Debug>Exceptions弹出对话框,你可以指定原生的(或者托管的)异常,除了调试器自带的一些默认异常,你还可以添加自己的自定义异常。

8,Watch窗口中的伪变量


Watch窗口或QuickWatch对话框提供一些特定的(调试器可识别的)变量,被称为伪变量。文档包含以下:

  • $tid—–当前线程的线程ID
  • $pid——进程ID
  • $cmdline———-启动程序的命令行字符串
  • $user———-正在运行程序的账户信息
  • $registername—–显示寄存器registername 的内容

不管怎么样,关于最后一个错误的伪变量是非常有用的:

  • $err——–显示最后一个错误的错误码
  • $err,hr—显示最后一个错误的错误信息
9,远程调试

  1. 你需要在远程机器上安装远程调试监控Visual Studio Remote Debugging Monitor
  2. 远程调试监控必须以管理员身份运行,并且用户必须属于管理员组
  3. 在你运行监控时,会开启一个新的服务,该服务的名字必须用Visual Studio的Attach to Progress窗口的Qualifier组合框的值
  1. 远程和本地机器上的防火墙必须允许Visual Studio和远程调试监控之间能够通信
  2. 想要调试,PDB文件是关键;为了能够让VisualStudio自动加载它们,必须满足以下条件:

1)本地的PDB文件必须可用(在远程机器的相同路径下放置一个对应的模块)。

 2) 远程机器上的托管PDB文化必须可用。

远程调试监控下载:

  •  Visual Studio 2008 Service Pack 1 Remote Debugger
  • Microsoft Visual Studio 2010 Remote Debugger







你可能感兴趣的:(强大的Visual Studio调试小技巧)