VisualStudio查看反汇编代码

VisualStudio是一个强大的调试工具,里面很多隐藏功能少有人问津,但是在特定场景可以节省你很多时间,本文主要介绍一些VisualStudio调试相关的隐藏功能,欢迎大家补充。
运行到指针(Run to cursor)
大多数人用Visual Studio在调试程序的时候先在程序开始的时候设置一个断点,然后依次F10/F11到自己想要查看的逻辑。如果这个过程我们需要仔细查看每一步的变量或者执行路径,这样做无可厚非,但是如果我们不想关心前面执行的逻辑,我们可以使用Run to cursor功能,只需要鼠标指针点到你想要执行到的那一行代码,Ctrl+F10,程序直接停在了鼠标指针的那行代码。
https://images0.cnblogs.com/blog/502305/201307/31213849-6a230a35f5294368a24fb7bc51765387.png
条件断点(Conditional Breakpoint)
断点大家都会用,条件断点相信对于经常调试的也不陌生,使用方法如下图,
https://images0.cnblogs.com/blog/502305/201307/31214902-82038b76ff824306803b8c377caf3c51.png
看上面这个右键菜单,Hit Count估计很多人也再用,用它来指定在第几次hit到这个断点的时候断下来,
https://images0.cnblogs.com/blog/502305/201307/31215445-d8c106b93345458c8ac3a65a5490f344.png
接下来就更高级一些,Filter,相信很多人在调试多线程程序的时候都遇到过被其他线程干扰吧,好不容易断下来,一步一步F10,忽然间另外一个线程又把前面断点hit了,刚才我跳的线程是哪个?想找到就难了。接下来就需要Filter来出场了。通过Filter我们可以过滤需要break的机器/进程/线程。
https://images0.cnblogs.com/blog/502305/201307/31220218-24fae66c9a89479abe63b3690f5ed794.png
接下来就是When Hit选项了,这个估计很多人用过它来跟踪变量,上图,带过。
https://images0.cnblogs.com/blog/502305/201307/31221053-717cfe3af3314f35b70ff4bd43e55d15.png
Export, 导出断点的功能用的就更少了,其实有些场景断点导出可以让你少费很多话。比如你在某段代码发现一个别人的bug,你可以将断点导出为xml,然后将它attach到bug上,bug owner直接找到对应版本导入断点,运行程序就可以了。
https://images0.cnblogs.com/blog/502305/201307/31222509-da0042a6dbae405bba5330070f39a4b0.png
数据提示(Data Tips)
调试的时候将鼠标放在变量名上来查看关心的数据,我们都是这么做的,但是如果一段逻辑需要反复执行,例如调试某段算法,你可以多点一下鼠标,将这个变量钉在代码旁边,这样比去watch窗口看要少转很多眼珠哦。
https://images0.cnblogs.com/blog/502305/201307/31223343-02f35d8b0c0d40cd8bcd71730b1ae0d5.png
另外这些data tip也是可以导入和导出的。
https://images0.cnblogs.com/blog/502305/201307/31223701-4bf40adfb62f496da2683ba61a6b26cf.png
查看反汇编代码
查看反汇编代码可以说是一个VisualStudio里面的一个隐藏功能,这个功能很少有人会注意到,但是对于我们想要学习汇编语言或者理解一些特定的编译器行为有很大的帮助。这个功能将汇编语言和源代码参照显示,理解起来容易许多。
使用该功能很简单,以我们在windbg u/uf/ub命令介绍中的程序代码qsort.c为例,在VisualStudio里面打开程序,设置断点,直接通过VisualStudio运行程序,或者attach到已经运行的程序中,当断点被触发后,右键然后选择go to disassembly,
https://images0.cnblogs.com/blog/502305/201307/30232023-8717d21f2753473a896521ccee8cffff.png
反汇编效果如下,接下来再看swap方法的汇编代码,是不是很容易理解了?
https://images0.cnblogs.com/blog/502305/201307/30232408-a03f3834d90b4cf59eb3d35994485b72.png