既然使用IDE,我想更多的看重的是它的调试和定位功能。其他的快捷键需要自己慢慢探索。微软不太好的地方是vscode和studio的快捷方式不太一样。
调试
•调试(启动):F5;•调试(重新启动):使用组合键“Ctrl Shift F5”;•调试(开始执行不调试):使用组合键“Ctrl F5”;•调试(逐语句,步入):F11;•调试(逐过程,步过):F10;•设置断点:F9。•退出当前过程: Shift F11•编译: F7
如果遇到库函数,想看看库函数的实现,怎么办? 举个例子memset函数,很常见的一个函数。 (1) F9在memset处设置断点 (2) Debug运行程序 (3) 到达断点,查看memset的反汇编
代码语言:javascript复制memset(&appBaseMem, 0, sizeof(appBaseMem));
00600645 push 0Ch
00600647 push 0
00600649 lea eax,[appBaseMem]
0060064C push eax
0060064D call _memset (024571FCh)
00600652 add esp,0Ch
(4) F11步进_memset
代码语言:javascript复制024571FC jmp dword ptr [__imp__memset (1855A5B4h)]
(5)继续F11
代码语言:javascript复制583750E0 mov ecx,dword ptr [esp 0Ch]
583750E4 movzx eax,byte ptr [esp 8]
583750E9 mov edx,edi
583750EB mov edi,dword ptr [esp 4]
583750EF test ecx,ecx
583750F1 je 58375233
583750F7 imul eax,eax,1010101h
583750FD cmp ecx,20h
58375100 jle 583751E5
58375106 cmp ecx,80h
5837510C jl 5837519D
58375112 bt dword ptr ds:[5838731Ch],1
5837511A jae 58375125
5837511C rep stos byte ptr es:[edi]
5837511E mov eax,dword ptr [esp 4]
58375122 mov edi,edx
58375124 ret
可以逐步调试汇编代码,查看寄存器的值。也可以查看内存的值,函数的调用堆栈等,超级强大。
从第(4)->第(5)经历了什么,后续会专门讲解,这里涉及到windows下库函数定位。
定位
1.转跳到定义:F12;2.查找所有引用:使用组合键“Shift F12”
搜索功能
CTRL F 全局查找[1]
在光标所在行的上面或下面插入一行
•组合键“Ctrl Enter”:在当前行的上面插入一个空行;• 组合键“Ctrl Shift Enter”:在当前行的下面插入一个空行。
写在最后
Visual Studio的功能非常强大,要比Android Studio的功能强大很多,几乎涵盖了编程的方方面面,甚至调试windows内核也是可以的(本质上还是集成windbg),能够取代windbg。不过Visual Studio体积太大,如非必要,可能用不到这么大的工具,毕竟杀鸡不必用牛刀,但是杀牛就要用牛刀了。
公众号
更多内容,欢迎关注我的微信公众号:无情剑客。
References
[1]
全局查找: https://jingyan.baidu.com/article/2c8c281d9e987e0008252a92.html