VisualStudio是一个强大的调试工具,里面很多隐藏功能少有人问津,但是在特定场景可以节省你很多时间,本文主要介绍一些VisualStudio调试相关的隐藏功能,欢迎大家补充。

运行到指针(Run to cursor)

大多数人用Visual Studio在调试程序的时候先在程序开始的时候设置一个断点,然后依次F10/F11到自己想要查看的逻辑。如果这个过程我们需要仔细查看每一步的变量或者执行路径,这样做无可厚非,但是如果我们不想关心前面执行的逻辑,我们可以使用Run to cursor功能,只需要鼠标指针点到你想要执行到的那一行代码,Ctrl+F10,程序直接停在了鼠标指针的那行代码。

条件断点(Conditional Breakpoint)

断点大家都会用,条件断点相信对于经常调试的也不陌生,使用方法如下图,

看上面这个右键菜单,Hit Count估计很多人也再用,用它来指定在第几次hit到这个断点的时候断下来,

接下来就更高级一些,Filter,相信很多人在调试多线程程序的时候都遇到过被其他线程干扰吧,好不容易断下来,一步一步F10,忽然间另外一个线程又把前面断点hit了,刚才我跳的线程是哪个?想找到就难了。接下来就需要Filter来出场了。通过Filter我们可以过滤需要break的机器/进程/线程。

接下来就是When Hit选项了,这个估计很多人用过它来跟踪变量,上图,带过。

Export, 导出断点的功能用的就更少了,其实有些场景断点导出可以让你少费很多话。比如你在某段代码发现一个别人的bug,你可以将断点导出为xml,然后将它attach到bug上,bug owner直接找到对应版本导入断点,运行程序就可以了。

数据提示(Data Tips)

调试的时候将鼠标放在变量名上来查看关心的数据,我们都是这么做的,但是如果一段逻辑需要反复执行,例如调试某段算法,你可以多点一下鼠标,将这个变量钉在代码旁边,这样比去watch窗口看要少转很多眼珠哦。

另外这些data tip也是可以导入和导出的。

查看反汇编代码

查看反汇编代码可以说是一个VisualStudio里面的一个隐藏功能,这个功能很少有人会注意到,但是对于我们想要学习汇编语言或者理解一些特定的编译器行为有很大的帮助。这个功能将汇编语言和源代码参照显示,理解起来容易许多。

使用该功能很简单,以我们在windbg u/uf/ub命令介绍中的程序代码qsort.c为例,在VisualStudio里面打开程序,设置断点,直接通过VisualStudio运行程序,或者attach到已经运行的程序中,当断点被触发后,右键然后选择go to disassembly,

反汇编效果如下,接下来再看swap方法的汇编代码,是不是很容易理解了?

Aaron Zhang

最新文章

  1. 安装Ubuntu时的硬盘分区方案
  2. Dubbo超时和重连机制
  3. Chrome浏览器M53更新后超链接的dispatchEvent(evt)方法无法触发文件下载
  4. ubuntu硬盘安装卡在探测文件系统
  5. Python正则表达式Regular Expression基本用法
  6. 启动hadoop时候报错:localhost: ssh: Could not resolve hostname localhost: Temporary failure in name resolution”
  7. 12个高矮不同的人,排成两排(catalan数)
  8. stm32之CAN发送、接收详解
  9. Pro Aspnet MVC 4读书笔记(1) - Your First MVC Application
  10. 用Java开源项目JOONE实现人工智能编程
  11. iOS代码处理横屏问题
  12. python安装第三方库的三种方法
  13. idea 打开自动编译以及查看Problem窗口
  14. Android Studio中依赖引起错误
  15. 吴恩达机器学习笔记29-神经网络的代价函数(Cost Function of Neural Networks)
  16. CCPC-Wannafly Winter Camp Day8 (Div2, onsite)
  17. Python dict get items pop update
  18. hive中 regexp_replace的用法,替换特殊字符问题
  19. vue 请求后台数据2(copy)
  20. Asp.net - Razor - 将Model中变量的值赋值给Javascript变量

热门文章

  1. 121. Best Time to Buy and Sell Stock (一) leetcode解题笔记
  2. Dreamweaver扩展注意事项
  3. android源码环境下用mmm/mm编译模块,输出编译log到文件的方法
  4. 解决iis7只能上传30M文件的限制
  5. 解决ORA-00824: cannot set sga_target due to existing
  6. 脚本tips
  7. webDriver环境搭建与测试
  8. node.js之path
  9. Redis第二篇(Redis基本命令)
  10. 【转载】Android数据存储之SQLite