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调试之断点基础篇的更多相关文章

  1. Visual Studio调试之断点进阶篇

    Visual Studio调试之断点进阶篇 在上一篇文章Visual Studio调试之断点基础篇里面介绍了什么是断点,INT 是Intel系列CPU的一个指令,可以让程序产生一个中断或者异常.程序中 ...

  2. Visual Studio调试之断点技巧篇

    原文链接地址:http://blog.csdn.net/Donjuan/article/details/4618717 函数断点 在前面的文章Visual Studio调试之避免单步跟踪调试模式里面我 ...

  3. Visual Studio调试之断点技巧篇补遗

    原文链接地址:http://blog.csdn.net/Donjuan/article/details/4649372 讲完Visual Studio调试之断点技巧篇以后,翻翻以前看得一些资料和自己写 ...

  4. Visual Studio 调试技巧:10 篇热文汇总

    本文精选了 DotNet  2017年11月份的10篇热门文章.其中有技术分享.技术资源. 注:以下文章,点击标题即可阅读 <Visual Studio的调试技巧 > 调试技巧是衡量程序员 ...

  5. VISUAL STUDIO 调试

    调试术语 Visual Studio调试之断点基础篇 Visual Studio调试之断点进阶篇 不能设置断点的检查步骤 Visual Studio调试之断点技巧篇 Visual Studio调试之断 ...

  6. Visual Studio调试之避免单步跟踪调试模式

    Visual Studio调试之避免单步跟踪调试模式 写完Visual Studio调试之断点进阶篇之后,想分享一下我常用的一些调试技巧,后面发现写之前,一些背景知识需要介绍一下. 下面是几篇今年2月 ...

  7. Visual Studio调试之符号文件

    原文链接地址:http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html 前面在不能设置断点的检查步骤和Visual Studio ...

  8. [转]Visual Studio调试之符号文件

    http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html 前面在不能设置断点的检查步骤和Visual Studio调试之断点进阶 ...

  9. Visual Studio 调试系列12 远程调试部署在远程计算机IIS上的ASP.NET应用程序

    系列目录     [已更新最新开发文章,点击查看详细] 要调试已部署到IIS的ASP.NET应用程序,请在部署应用程序的计算机上安装并运行远程工具,然后从Visual Studio附加到正在运行的应用 ...

随机推荐

  1. SublimeText的使用

    1.安装Sublime_text2.02文件:Sublime Text 2.0.2.tar.bz2 (1)官网下载地址:http://www.sublimetext.com/2 (2)将文件放到lin ...

  2. Oracle 数据库基本操作——用户管理与文件管理

    目录: 1.初始状态 2.登录数据库 3.创建表空间 1)概念 2) 基本表空间 3)表空间管理 4.创建新用户 5.删除用户 6.用户的授权 1)定义 2)授予权限的方法 3)权限分类 4)授权注意 ...

  3. Object -C 数组 -- 笔记

    // //  main.m //  Array // //  Created by facial on 23/8/15. //  Copyright (c) 2015 facial_huo. All ...

  4. python网上开发执行环境

    http://www.tutorialspoint.com/execute_python_online.php

  5. MVCC的一种实现方案

    源信息来源:http://my.oschina.net/juliashine/blog/111624 -- 简单描述: 一个data-server,通过mvcc来实现事务的一致性,已支持更高的吞吐和更 ...

  6. 字体在Android View中的输出 drawText

    Canvas 作为绘制文本时,使用FontMetrics对象,计算位置的坐标.   public static class FontMetrics {               public flo ...

  7. 【Hibernate步步为营】--继承映射具体解释

    上篇文章讨论了多对多映射,在使用多对多映射时重点是使用<many-to-many>标签,并在标签的两端加入外键这样在生成关系时会创建两个关系之间的关系表,通过关系表来维护它们之间的关系,另 ...

  8. Android ExpandableListView BaseExpandableListAdapter (类似QQ分组列表)

    分组列表视图(ExpandableListView) 和ListView不同的是它是一个两级的滚动列表视图,每一个组可以展开,显示一些子项,类似于QQ列表,这些项目来至于ExpandableListA ...

  9. android listview综合使用演示样例_结合数据库操作和listitem单击长按等事件处理

    本演示样例说明: 1.自己定义listview条目样式,自己定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,而且操作后listview自己主动刷新. 3.响应用 ...

  10. PHP5.4的变化关注---What has changed in PHP 5.4.x(转)

    What has changed in PHP 5.4.x Most improvements in PHP 5.4.x have no impact on existing code. There ...