Visual Studio调试之断点基础篇
Visual Studio调试之断点基础篇
我曾经问过很多人,你一般是怎么调试你的程序的?
F9, F5, F11, F……
有很多书和文章都是介绍怎么使用Visual Studio编写WinForm啦,、ASP.NET之类的程序;知道如何编写固然重要,但是我觉得程序员可能只会花费30%的时间在编写代码上,剩下的大部分时间都是在调试程序。在网上看到很多人介绍Windbg的用法,但是没有看到几篇讲解使用Visual Studio调试的文章。Windbg固然强大,但是问题是它的学习曲线太陡了,而且很多调试并不需要使用Windbg来调试(当然啦,并不是指我不会Windbg调试啦—这是以后的调试系列文章将要讲的),为什么不使用我们最熟悉的Visual Studio来进行调试呢?
调试嘛,无非就是要看看程序在运行时候,内部的状态,例如一些变量的值是多少,看一看程序调用的路径啦之类的。当然最直接的方式就是直接中断程序的执行,用调试器去检查一下程序的情况嘛。于是F9, F5, F10, F11……
那么我们就来说说什么是断点,断点是什么?不是F9 ,也不是那个小红球,在Intel系列的CPU(包括AMD生产的CPU)里面,它其实是一个特殊的指令—INT 3。CPU在执行程序的指令集的时候,只要碰到这个指令,就会中断程序的执行(当然啦,CPU会通知操作系统,然后……然后……然后……,断点的实现机制我会在以后的文章里面讲解,现在我们就只要知道那个INT 3指令会中断程序的执行好吗?)。
当然啦,我们需要用事实来证明我上面的话,因此把下面的程序编译并且执行一下,点“Yes”,点“Break”,对对对,程序中断了,我相信你可以看见的:
|
#include <stdio.h> void main() { printf("Before breakpoint"n"); __asm { int 3 } printf("Before breakpoint"n"); } |
编译方法:
1. 在开始菜单中打开Visual Studio 2008[2005] Command Prompt(Visual Studio 2008[2005]命令行)。
2. 进入保存上面 C源代码(int3.c)的文件夹的路径。
3. 执行编译命令(因为我的机器是Windows 7 RC + Visual Studio 2008 + x64 CPU,直接编译有一点问题,如果你的机器不是我上面的配置,可以尝试执行cl /Zi int3.c)
cl /Zi /c int3.c
4. 执行链接命令(如果你直接执行了命令cl /Zi int3.c的话就可以跳过这一步)。
link /libpath:"C:"Program Files"Microsoft SDKs"Windows"v6.0A"Lib" int3.obj
5. 运行输出的int3.exe。
这时你应该会看到Visual Studio弹出来,然后在源代码行的int 3上面中断,说明我们已经成功地让CPU中断int3.exe程序 的执行了。
提示:如果你执行int3.exe的时候,没有发现Visual Studio窗口弹出来的话,那么请点击Visual Studio菜单项里面的“Tools(工具)”—“Options(选项)”,接着在“Options(选项)”窗口中选择“Debugging(调试)”—“Just-In-Time(即时调试)”,然后勾选“Native(原生程序)”选项。如下图所示:

“综上所述,断点是int 3这个指令触发的!(小时候的数学证明题)”。
由int 3这个指令(当然是在intel系列的CPU上面)引申出来有哪些函数呢:
|
语言/工具 |
名称 |
描述 |
|
C++ |
DebugBreak |
在C++代码中硬编码一个断点。 |
|
C# |
Debugger.Break |
在.NET代码中硬编码一个断点 |
|
Visual Studio |
断点 |
设置一个断点 |
未完待续……
Visual Studio调试之断点基础篇的更多相关文章
- Visual Studio调试之断点进阶篇
Visual Studio调试之断点进阶篇 在上一篇文章Visual Studio调试之断点基础篇里面介绍了什么是断点,INT 是Intel系列CPU的一个指令,可以让程序产生一个中断或者异常.程序中 ...
- Visual Studio调试之断点技巧篇
原文链接地址:http://blog.csdn.net/Donjuan/article/details/4618717 函数断点 在前面的文章Visual Studio调试之避免单步跟踪调试模式里面我 ...
- Visual Studio调试之断点技巧篇补遗
原文链接地址:http://blog.csdn.net/Donjuan/article/details/4649372 讲完Visual Studio调试之断点技巧篇以后,翻翻以前看得一些资料和自己写 ...
- Visual Studio 调试技巧:10 篇热文汇总
本文精选了 DotNet 2017年11月份的10篇热门文章.其中有技术分享.技术资源. 注:以下文章,点击标题即可阅读 <Visual Studio的调试技巧 > 调试技巧是衡量程序员 ...
- VISUAL STUDIO 调试
调试术语 Visual Studio调试之断点基础篇 Visual Studio调试之断点进阶篇 不能设置断点的检查步骤 Visual Studio调试之断点技巧篇 Visual Studio调试之断 ...
- Visual Studio调试之避免单步跟踪调试模式
Visual Studio调试之避免单步跟踪调试模式 写完Visual Studio调试之断点进阶篇之后,想分享一下我常用的一些调试技巧,后面发现写之前,一些背景知识需要介绍一下. 下面是几篇今年2月 ...
- Visual Studio调试之符号文件
原文链接地址:http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html 前面在不能设置断点的检查步骤和Visual Studio ...
- [转]Visual Studio调试之符号文件
http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html 前面在不能设置断点的检查步骤和Visual Studio调试之断点进阶 ...
- Visual Studio 调试系列12 远程调试部署在远程计算机IIS上的ASP.NET应用程序
系列目录 [已更新最新开发文章,点击查看详细] 要调试已部署到IIS的ASP.NET应用程序,请在部署应用程序的计算机上安装并运行远程工具,然后从Visual Studio附加到正在运行的应用 ...
随机推荐
- 腾讯CDC谈扁平化设计
扁平化设计无疑是当前讨论最多,最火的设计形式,自ios7面世以来更是将扁平化设计的讨论推向风口浪尖. 在这里我不想分析拟物设计和扁平化设计的优劣,更不想说谁更好!在形式服从内容的今天,我只能说哪种设计 ...
- java在windows下加载dll
java在类中加载动态链接库文件. 类文件中: static { System.loadLibrary("dll文件"); } dll文件在工程的包路径下.例如:pro/bin/h ...
- SWOT分析法
SWOT(Strengths Weakness Opportunity Threats)分析法,又称为态势分析法或优劣势分析法,用来确定企业自身的竞争优势(strength).竞争劣势(weaknes ...
- Android---优化下载让网络访问更高效(三)
批处理传输和连接 每次启动一个连接---跟传输的数据大小无关---在使用典型的3G无线信号时,就会潜在的导致无线信号消耗近20秒的电量. 如果一个应用程序每隔20秒ping一次服务器,只是告知该应用程 ...
- Django 数据库查询
#!/usr/bin/python #coding:utf-8 from django.shortcuts import render; from django.shortcuts import re ...
- Code Snippet Library
你可以将自己常用的代码放到里面,给它命名,设置快捷键,以后想用这段代码的时候只要按快捷键,就会出现提示,直接将这段代码显示出来,十分高效. 比如我经常会用到一个动画:[UIView beginAnim ...
- C primer plus 读书笔记第八章
本章的标题是字符输入/输出和输入确认.主要内容是讨论用于I/O的标准函数. 1.getchar()和putchar() 这两个函数之前用过,我们通过这两个函数来讨论下缓冲区. #include &qu ...
- Linux磁盘设备文件(sda,sdb,sdc…)变化问题
在Linux下往往会碰到这样的问题,磁盘的设备文件,比如/dev/sda, sdb, sdc等等在某些情况下会混乱掉,比如sda变成了sdb或者sdc变成了sdb等等,这样无形中会导致磁盘设备管理的混 ...
- Qt Style Sheets Reference
Qt Style Sheets support various properties, pseudo-states, and subcontrols that make it possible to ...
- Android应用程序安装与Launcher启动机制
以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):http://blog.csdn.net/luoshe ...