调试程序的简单说明.

合集下载

如何调试程序

如何调试程序

• 数据类型错误
• 输出格式错误
• 忘记删除用于输出调试信息的语句
如何让你的代码更漂亮
• 养成一个好的编程习惯 • 学会去优化自己的模板 • 合理使用宏定义
• 将执行不同功能的程序写在不同的函数中, 最后在主函数中调用 • 合理使用函数库和类模板
4、构造测试数据和测试程序
• 在题目中所给出的测试样例只是一小组测试数据,这虽然通常 是我测试数据,尤其是一些边界状态 的测试数据(数据极大、数据极小、数据量极多、数据量极少、 预期出现极端结果等情况)。 • 边界测试数据可以用于检查程序中是否存在边界错误,设计有 缺陷的程序,在处理边界测试数据时往往容易暴露出错误。但 如果没有发生明显的运行错误,就需要对结果的正确性进行验 证。 • 有些测试数据可以通过手工计算求出结果,再与程序的计算结 果相对比,而也有些问题,可以通过构造测试程序来进行验证。 • 测试程序通常是用确定可靠的算法编写的解题程序,但不须考 虑时间和空间的消耗,用测试程序对测试数据进行求解,用计 算结果与待测试程序的计算结果进行对比。 • 随机生成数据+文件对拍
• • • • •
方法二:利用文件输入输出 对于输入文件 freopen(“文件名”,”r”,stdin); 对于输出文件 freopen(“文件名”,”w”,stdout);
2、输出调试信息
• 在调试时,很多同学往往首先想到的是使用开发环境所提供的 调试功能:设置断点、单步执行、查看和修改变量,甚至改变 程序的流程。不可否认,使用开发环境所提供的调试功能的确 很方便,但当你过分依赖于这些集成工具时,你可能忽略了很 多更有效的手段:仔细地分析、充分的信息。 • 当我们发现程序没有按照自己预期得那样工作时,不要急于跟 踪甚至修改程序,而是应该首先仔细对程序的逻辑、语句、表 达式进行检查和分析,尽可能使程序在表达上更简洁、更干净。 如果实在难以发现问题所在,也不必急于借助于集成工具去跟 踪程序的运行。早期的程序员在调试程序时经常会在程序中加 入输出调试信息的语句或过程,用以观察程序的运行过程,分 析程序的运行逻辑,这种调试手段即使在今天也仍然是非常有 效的。 • 输出的调试信息要尽量容易阅读,格式清楚,在必要的时候, 可以借助工具程序或自己编写的程序对输出信息进行处理,以 帮助分析问题。

CSS-100BE稳控新平台通用调试程序使用说明(0SF.457.042)_V1.0

CSS-100BE稳控新平台通用调试程序使用说明(0SF.457.042)_V1.0

CSS-100BE数字式安全稳定控制装置通用调试程序使用说明CSS-100BE数字式安全稳定控制装置通用调试程序使用说明编制:雷瑞丰校核:牛胜南标准化审查:李连昌审定:李哲出版号:V1.00文件代号:0SF.457.042出版日期:2012年2月目录第 1 篇概述 (2)1.1程序功能概述 (2)1.2硬件配置情况 (2)第 2 篇使用说明 (3)2.1程序下载说明 (3)2.2装置参数固化 (3)2.3测试项目 (6)2.3.1模拟量测试 (6)2.3.2开入测试 (6)2.3.3开出测试 (7)2.3.4187C通道测试 (8)第 3 篇常见问题汇总 (8)第 1 篇概述1.1程序功能概述本调试程序是CSS-100BE装置的专用调试程序,主要功能是对CSS-100BE 装置的硬件进行测试。

由于稳控工程的特殊性,绝大多数的稳控工程的功能都是定制的,每个稳控工程的CSS-100BE机箱个数,交流插件个数,开入插件个数,开出插件个数都不尽相同,因此就需要有一套程序能够对任意个数的机箱、交流插件、开入插件、开出插件都适用,但是又不必要有具体的功能,只需要对硬件进行测试即可。

故此本调试程序应运而生。

1.2硬件配置情况调试程序对交流插件、CPU插件、开入插件、开出插件都做了最大化配置,最多可以实现个机箱(即6个CPU),18块交流插件(每个机箱最多3块)、6块开入插件、7块开出插件(含一块信号插件)。

为了清楚起见,下面列表说明。

由于每个机箱里只放一块CPU插件,即机箱与CPU插件是一对一的,因此下面的内容中的机箱和CPU的个数相同,只列出CPU个数。

针对不同的工程的不同插件个数,可以通过装置参数来整定,使用方法详见下面章节说明。

CPU插件交流插件开入插件开出插件最少 1 0 1 1最多 6 18 6 7第 2 篇使用说明2.1程序下载说明本套调试程序有2个固化程序,主机专用一个固化程序。

所有的从机使用一个固化程序。

c语言程序调试的方法

c语言程序调试的方法

c语言程序调试的方法C语言是一种广泛应用的编程语言,但是在写程序的过程中难免会遇到各种错误和bug。

为了解决这些问题,程序调试是必不可少的环节。

本文将一步一步介绍C语言程序调试的方法,帮助读者更好地定位和修复错误。

一、理解程序调试概念及重要性(100-200字)程序调试是指通过识别、定位和修复软件中的错误(也称为缺陷或bug)来确保程序的正确运行。

调试是开发过程中的重要环节,它不仅可以解决已知的错误,还可以帮助我们理解代码和程序的执行过程。

在大型项目中,调试能够提高开发效率,降低错误的出现频率。

二、确定调试目标(200-300字)在开始调试之前,我们首先需要明确调试的目标是什么。

这有助于我们有条不紊地进行调试,并有效地利用时间。

调试目标可以是识别特定的错误、改进程序的性能或验证代码行为的正确性。

确定了调试目标后,我们就可以有针对性地采取相应的调试方法来达到目标。

三、检查代码和数据(200-300字)一旦我们明确了调试目标,下一步是检查代码和数据。

这个过程主要包括以下几个方面:1. 语法检查:通过编译器进行语法检查可以找到一些常见的语法错误,如括号不匹配、缺失分号等。

2. 变量和常量检查:检查变量和常量的命名是否规范、是否被正确初始化和赋值。

同时也要注意无效的内存引用、数组溢出等问题。

3. 函数调用:检查函数调用是否正确、参数是否传递正确,以及返回值是否被正确处理。

4. 数据流分析:通过追踪代码的执行过程,观察数据在程序中的流动,找出可能的错误。

通过仔细检查代码和数据,我们可以尽早发现问题,提高调试的效率。

四、使用调试工具(300-400字)在调试过程中,我们可以使用一些专门的调试工具来帮助我们定位和解决问题。

常用的调试工具有:1. 编译器提供的调试信息:在编译时,可以通过开启调试信息选项来生成包含调试信息的可执行文件。

在调试过程中,我们可以使用调试器来查看代码的执行过程、变量的值以及函数的调用关系,帮助我们定位问题所在。

程序调试的常用方法

程序调试的常用方法

程序调试的常用方法程序调试是软件开发中非常重要的一环,它可以帮助开发人员找出程序中的错误并进行修复,从而保证程序的正常运行。

在实际的开发过程中,程序调试的方法有很多种,下面将介绍一些常用的调试方法。

1. 打印调试信息打印调试信息是最常用的调试方法之一。

开发人员可以在程序中添加一些打印语句,输出程序中的变量值、函数调用信息等,以便于观察程序的执行过程。

在调试完成后,可以将这些打印语句删除或注释掉,以避免影响程序的性能。

2. 使用调试工具调试工具是一种专门用于调试程序的软件,它可以帮助开发人员快速定位程序中的错误。

常见的调试工具有Visual Studio、Eclipse、Xcode等。

这些工具可以提供调试器、断点调试、内存泄漏检测等功能,大大提高了调试效率。

3. 单元测试单元测试是一种测试方法,它可以对程序中的每个模块进行测试,以确保程序的每个部分都能正常运行。

在单元测试中,开发人员可以编写一些测试用例,对程序进行测试,并查找错误。

单元测试可以帮助开发人员快速定位错误,并提高程序的可靠性。

4. 代码审查代码审查是一种通过检查代码来发现错误的方法。

在代码审查中,开发人员可以通过查看代码、注释、变量名等来发现潜在的错误。

代码审查可以帮助开发人员发现一些常见的错误,如语法错误、逻辑错误等。

5. 日志记录日志记录是一种记录程序运行过程的方法。

在程序中添加日志记录语句,可以记录程序中的变量值、函数调用信息等,以便于观察程序的执行过程。

在调试完成后,可以将这些日志记录语句删除或注释掉,以避免影响程序的性能。

总之,程序调试是软件开发中非常重要的一环,它可以帮助开发人员找出程序中的错误并进行修复,从而保证程序的正常运行。

在实际的开发过程中,开发人员可以根据实际情况选择不同的调试方法,以提高调试效率。

简述调试的一般过程。

简述调试的一般过程。

简述调试的一般过程。

调试是一种发现和解决软件程序中错误的过程。

下面是调试的一般过程:
1. 确定问题:确定应用程序中出现错误的具体原因。

可以尝试多种不同的解决方案,直到找到问题所在。

2. 记录信息:记录有关应用程序错误的信息,例如错误类型、错误代码、错误堆栈等等。

这些信息有助于后来者了解问题的性质和位置。

3. 运行程序:将应用程序运行到错误的位置,以确保它能够正常工作。

在运行过程中,观察计算机程序的行为,记录数据流和变量的值,以便确定错误是否在代码中发生。

4. 分析代码:在程序运行的过程中,分析代码,查找代码中可能
引起错误的原因。

可以使用调试工具来自动分析代码,或者手动分析代码以查找错误。

5. 定位错误:一旦确定了应用程序的错误原因,就需要定位代码中的错误。

这通常需要使用调试工具来跟踪程序的执行路径,并检查代码中的每一个变量和函数。

如果错误发生在特定的变量或函数中,
需要使用调试工具来获取更多详细信息。

6. 修正错误:一旦找到了错误的位置,就需要修复代码以消除错误。

修复代码可能需要修改程序的结构和功能,因此需要进行测试和验证。

7. 总结:调试是一个持续的过程,需要不断地回顾代码和程序的运行过程,以确保应用程序能够正常运行。

最后,需要总结调试过程中发现的经验和教训,并在未来的项目中避免类似的问题。

调试说明书

调试说明书

调试说明书调试说明书一、概述本文档旨在为开发人员提供一份详细的调试说明书,以帮助他们在开发过程中快速解决问题和调试代码。

本文档将介绍调试的基本原则和常用的调试工具、技术和方法。

二、调试原则在进行调试之前,需要掌握以下几个基本原则:1. **定位问题**:了解出现问题的具体现象,并找到问题的根本原因。

不要只满足于修复表面问题,要深入分析和理解问题。

2. **减少复杂性**:在进行调试时,尽量在简化环境的前提下进行。

减少可能导致问题的复杂性,只保留必要的条件。

3. **有序逐步调试**:从简单的场景开始,逐步添加复杂性。

每次添加后,测试代码是否能够正常运行,这样可以快速定位问题所在。

4. **记录、分析和总结**:在调试过程中,记录每个步骤和结果。

分析和总结问题,形成调试经验和能力。

三、调试工具与技术1. 调试器调试器是调试代码最常用的工具之一,它可以帮助开发人员跟踪代码的执行过程、查看变量的值、设置断点、单步调试等。

常见的调试器有GDB、LLDB、Chrome开发者工具等。

2. 日志和调试信息使用日志和调试信息是调试代码的常用方法之一。

通过在代码中插入日志和调试信息,可以在运行过程中观察代码的执行顺序、变量的值等。

3. 单元测试单元测试是一种自动化测试方法,可以帮助开发人员验证代码的正确性。

在调试过程中,通过编写单元测试用例来模拟和验证问题场景,可以更好地理解问题的本质原因。

4. 远程调试远程调试是在开发人员的本地环境中调试远程运行的代码。

通过远程调试工具,可以在本地环境下调试远程服务端的代码。

四、调试方法1. 分析代码逻辑首先要仔细分析代码逻辑,了解代码的运行过程和各个模块之间的关系。

可以通过代码审查、阅读文档和咨询他人来获取更多的信息。

2. 使用调试器使用调试器可以逐行跟踪代码的执行过程,查看变量的值和修改状态。

可以设置断点,在代码执行到指定位置时暂停执行,并进行进一步的调试操作。

3. 日志调试在关键的代码段中插入调试信息和日志输出语句,以便观察代码的执行流程和变量的值。

设备安装调试的程序

设备安装调试的程序(1)开箱验收新设备到货后,由设备管理部门,会同购置单位,使用单位(或接收单位)进行开箱验收,检查设备在运输过程中有无损坏、丢失,附件、随机备件、专用工具、技术资料等是否与合同、装箱单相符,并填写设备开箱验收单,存入设备档案,若有缺损及不合格现象应立即向有关单位交涉处理,索取或索赔。

(2)设备安装施工按照工艺技术部门绘制的设备工艺平面布置图及安装施工图、基础图、设备轮廓尺寸以及相互间距等要求划线定位,组织基础施工及设备搬运就位。

在设计设备工艺平面布置图时,对设备定位要考虑以下因素。

①应适应工艺流程的需要;②应方便工件的存放、运输和现场的清理;③设备及其附属装置的外尺寸、运动部件的极限位置及安全距离;④应保证设备安装、维修、操作安全的要求;⑤厂房与设备工作应匹配,包括门的宽度、高度,厂房的跨度,高度等。

应按照机械设备安装验收有关规范要求,做好设备安装找平,保证安装稳固,减轻震动,避免变形,保证加工精度,防止不合理的磨损。

安装前要进行技术交底,组织施工人员认真学习设备的有关技术资料,了解设备性能及安全要求和施工中应注意的事项。

安装过程中,对基础的制作,装配连接、电气线路等项目的施工,要严格按照施工规范执行。

安装工序中如果有恒温、防震、防尘、防潮、防火等特殊要求时,应采取措施,条件具备后方能进行该项工程的施工。

(3)设备试运转设备试运转一般可分为空转试验、负荷试验、精度试验三种。

①空转试验:是为了考核设备安装精度的保持性,设备的稳固性,以及传动、操纵、控制、润滑、液压等系统是否正常,灵敏可靠等有关各项参数和性能在无负荷运转状态下进行。

一定时间的空负荷运转是新设备投入使用前必须进行磨合的一个不可缺少的步骤。

②设备的负荷试验:试验设备在数个标准负荷工况下进行试验,在有些情况下可结合生产进行试验。

在负荷试验中应按规范检查轴承的温升,考核液压系统、传动、操纵、控制、安全等装置工作是否达到出厂的标准,是否正常、安全、可靠。

程序调试的常用方法

程序调试的常用方法
程序调试是指在程序运行过程中,通过各种手段识别、定位、分析程序中的错误,以便及时解决问题的过程。

以下是程序调试常用的方法:
1. 打印输出:在程序中加入一些打印输出语句,输出一些变量的值或程序执行到哪一步,以便定位问题所在。

2. 调试器:使用调试器工具,可以在程序运行过程中逐行调试,观察变量的值,查看函数调用栈等。

3. 代码审查:通过对代码的阅读和审查,找出可能存在的问题和潜在的错误。

4. 单元测试:编写一些小的测试用例,对程序中某些关键函数进行测试,以便及早发现问题。

5. 日志记录:在程序中加入日志记录功能,记录程序运行过程中的关键信息,以便排查问题。

6. 静态分析工具:使用静态分析工具对代码进行分析,找出可能存在的潜在问题和漏洞。

7. 代码重构:对代码进行重构,优化代码结构和逻辑,以便减少出错的可能性。

总之,程序调试需要综合运用各种方法,不断排查和解决问题,以确保程序的正常运行。

- 1 -。

程序调试和错误解决的方法与技巧

程序调试和错误解决的方法与技巧在软件开发过程中,程序调试和错误解决是一个非常重要的环节。

无论是在开发阶段还是在产品上线后,都有可能出现各种各样的bug和错误。

程序调试和错误解决的方法与技巧对于开发人员来说非常重要。

本文将从程序调试的基本概念开始,进一步介绍调试的常用工具和技巧,以及一些常见的错误解决方法。

程序调试的基本概念程序调试是指在软件开发过程中,通过对程序进行分析和运行来排查错误,并逐步修复这些错误的过程。

程序调试是软件开发过程中的一个重要环节,它能够帮助开发人员定位和解决各种bug和错误,提高开发效率和软件质量。

程序调试的步骤和方法因人而异,但一般来说,程序调试的基本步骤包括以下几个方面:1.准备工作:了解程序的基本逻辑和结构,明确程序的运行环境和所需的工具。

2.定位问题:根据用户的反馈和自己的观察,确定程序出现错误的地方。

3.分析问题:对出现错误的地方进行仔细分析,找出可能的原因。

4.修复问题:根据分析的结果,逐步修复错误,重新测试程序,直到问题解决为止。

常用的调试工具和技巧在程序调试的过程中,有许多工具和技巧可以帮助开发人员更快速和更有效地定位和解决问题。

下面我们来了解一些常用的调试工具和技巧。

1.调试器:调试器是程序员的得力工具之一,它可以帮助开发人员逐步执行程序,并实时查看程序的状态和变量的值,帮助开发人员更好地理解程序的运行过程。

2.日志输出:在程序中添加日志输出是程序调试的一种有效方法。

通过在程序中添加一些输出语句,可以帮助开发人员了解程序的具体执行过程,进而定位问题。

3.单元测试:单元测试是一种通过测试单个模块或函数来验证其正确性的方法。

通过编写单元测试,可以帮助开发人员发现程序中的潜在问题,从而提高程序的稳定性和可靠性。

4.隔离法:在程序调试的过程中,有时候会遇到复杂的问题,这时可以通过隔离法逐步剔除可能的原因,找到出问题的具体原因。

常见的错误解决方法程序调试和错误解决是一个复杂而繁琐的过程,有许多不同的错误解决方法可供选择。

debug调试说明

实验1 查看CPU和内存,用机器指令和汇编指令编程1.预备知识:Debug的使用我们以后所有的实验中,都将用到Debug程序,首先学习一下它的主要用法。

(1)什么是Debug?Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。

使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的远行。

(2)我们用到的Debug功能。

●用Debug的R命令查看、改变CPU寄存器的内容;●用Debug的D命令查看内存中的内容;●用Debug的E命令改写内存中的内容;●用Debug的U命令将内存中的机器指令翻译成汇编指令;●用Debug的T命令执行一条机器指令;●用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。

Debug的命令比较多,共有20多个,但这6个命令是和汇编学习密切相关的。

在以后的实验中,我们还会用到一个P命令。

(3)进入Debug。

Debug是在DOS方式下使用的程序。

我们在进入Debug前,应先进入到DOS方式。

用以下方式可以进入DOS。

①重新启动计算机,进入DOS方式,此时进入的是实模式的DOS。

②在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。

下面说明在Windows2000中进入Debug的一种方法,在Windows98中进入的方法与此类似。

选择【开始】菜单中的【运行】命令,如图2.28所示,打开【运行】对话框,如图2.29所示,在文本框中输入“command”后,单击【确定】按钮。

图2.28选择【运行】命令图2 29在文本框中输入“command”进入DOS方式后,如果显示为窗口方式,可以按下Alt+Enter键将窗口变为全屏方式。

然后运行Debug程序,如图2.30所示,这个程序在Windows98中通常在c:\windows98\command 下,在Windows2000中通常在c:\winnt\system32。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。

不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。

我以前接触的程序大多是有比较成形的思路和方法,调试起来出的问题都比较小,最近这个是我自己慢慢摸索调试,接触了很多新的调试方法,并查了很多前辈的总结,受益匪浅,总结以前的和新的收获如下:VC 调试篇设置为了调试一个程序,首先必须使程序中包含调试信息。

一般情况下,一个从AppWizard 创建的工程中包含的Debug Configuration 自动包含调试信息,但是是不是Debug 版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration 中增加调试信息,包括Release 版本。

为了增加调试信息,可以按照下述步骤进行:∙打开Project settings 对话框(可以通过快捷键ALT+F7打开,也可以通过IDE 菜单Project/Settings 打开∙选择C/C++页,Category 中选择general ,则出现一个Debug Info 下拉列表框,可供选择的调试信息方式包括:命令行 Project settings 说明无 None 没有调试信息/Zd Line Numbers Only 目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息/Z7 C 7.0- Compatible 目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等/Zi Program Database 创建一个程序库(PDB,包括类型信息和符号调试信息。

/ZI Program Database for Edit and Continue 除了前面/Zi 的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。

这个选项同时使#pragma 设置的优化功能无效∙选择Link 页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL∙如果C/C++页中设置了Program Database 以上的选项,则Linkincrementally 可以选择。

选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译,而不必每次都从头开始编译。

调试方法:1、使用 Assert(原则:尽量简单assert只在debug下生效,release下不会被编译。

2、防御性的编程3、使用Trace4、用GetLastError来检测返回值,通过得到错误代码来分析错误原因5、把错误信息记录到文件中位置断点(Location Breakpoint大家最常用的断点是普通的位置断点,在源程序的某一行按F9就设置了一个位置断点。

但对于很多问题,这种朴素的断点作用有限。

譬如下面这段代码:void CForDebugDlg::OnOK({for (int i = 0; i < 1000; i++ //A{int k = i * 10 - 2; //BSendTo(k; //Cint tmp = DoSome(i; //Dint j = i / tmp; //E}}执行此函数,程序崩溃于E行,发现此时tmp为0,假设tmp本不应该为0,怎么这个时候为0呢?所以最好能够跟踪此次循环时DoSome函数是如何运行的,但由于是在循环体内,如果在E行设置断点,可能需要按F5(GO许多次。

这样手要不停的按,很痛苦。

使用VC6断点修饰条件就可以轻易解决此问题。

步骤如下。

1 Ctrl+B打开断点设置框,如下图:Figure 1设置高级位置断点2 然后选择D行所在的断点,然后点击condition按钮,在弹出对话框的最下面一个编辑框中输入一个很大数目,具体视应用而定,这里1000就够了。

3 按F5重新运行程序,程序中断。

Ctrl+B打开断点框,发现此断点后跟随一串说明:...487 times remaining。

意思是还剩下487次没有执行,那就是说执行到513(1000-487次时候出错的。

因此,我们按步骤2所讲,更改此断点的skip次数,将1000改为513。

4 再次重新运行程序,程序执行了513次循环,然后自动停在断点处。

这时,我们就可以仔细查看DoSome是如何返回0的。

这样,你就避免了手指的痛苦,节省了时间。

再看位置断点其他修饰条件。

如Figure 1所示,在“Enter the expression to be evaluated:”下面,可以输入一些条件,当这些条件满足时,断点才启动。

譬如,刚才的程序,我们需要i为100时程序停下来,我们就可以输入在编辑框中输入“i==100”。

另外,如果在此编辑框中如果只输入变量名称,则变量发生改变时,断点才会启动。

这对检测一个变量何时被修改很方便,特别对一些大程序。

用好位置断点的修饰条件,可以大大方便解决某些问题。

数据断点(Data Breakpoint软件调试过程中,有时会发现一些数据会莫名其妙的被修改掉(如一些数组的越界写导致覆盖了另外的变量,找出何处代码导致这块内存被更改是一件棘手的事情(如果没有调试器的帮助。

恰当运用数据断点可以快速帮你定位何时何处这个数据被修改(最好使用内存来查找,使用变量名的话,IDE不一定能找到。

譬如下面一段程序:#include "stdafx.h"#includeint main(int argc, char* argv[]{char szName1[10];char szName2[4];strcpy(szName1,"shenzhen";printf("%s\n", szName1; //Astrcpy(szName2,"vckbase"; //Bprintf("%s\n", szName1;printf("%s\n", szName2;return 0;}这段程序的输出是szName1: shenzhenszName1: aseszName2: vckbaseszName1何时被修改呢?因为没有明显的修改szName1代码。

我们可以首先在A行设置普通断点,F5运行程序,程序停在A行。

然后我们再设置一个数据断点。

如下图:Figure 2数据断点F5继续运行,程序停在B行,说明B处代码修改了szName1。

B处明明没有修改szName1呀?但调试器指明是这一行,一般不会错,所以还是静下心来看看程序,哦,你发现了:szName2只有4个字节,而strcpy了7个字节,所以覆写了szName1。

数据断点不只是对变量改变有效,还可以设置变量是否等于某个值。

譬如,你可以将Figure 2中红圈处改为条件”szName2[0]==''''y''''“,那么当szName2第一个字符为y时断点就会启动。

可以看出,数据断点相对位置断点一个很大的区别是不用明确指明在哪一行代码设置断点。

上图中的断点设置最好用内存地址来表示,否则vc会出错。

其他调试手段:系统提供一系列特殊的函数或者宏来处理Debug版本相关的信息,如下:宏名/函数名说明TRACE 使用方法和printf完全一致,他在output框中输出调试信息ASSERT 它接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。

对于系统中出现这个宏导致的中断,应该认为你的函数调用未能满足系统的调用此函数的前提条件。

例如,对于一个还没有创建的窗口调用SetWindowTextVERIFY 等。

和 ASSERT 功能类似,所不同的是, Release 版本中,在ASSERT 不计算输入的表达式的值,而 VERIFY 计算表达式的值。

使用_ASSETE 来 debug,这三个都是 MFC 的。

_ASSERTE 的头文件是 crtdbg.h。

值 Watch VC 支持查看变量、表达式和内存的值。

所有这些观察都必须是在断点中断的情况下进行。

观看变量的值最简单,当断点到达时,把光标移动到这个变量上,停留一会就可以看到变量的值。

VC 提供一种被成为 Watch 的机制来观看变量和表达式的值。

在断点状态下,在变量上单击右键,选择 Quick Watch,就弹出一个对话框,显示这个变量的值。

单击 Debug 工具条上的 Watch 按钮,就出现一个 Watch 视图(Watch1,Watch2,Watch3,Watch4),在该视图中输入变量或者表达式,就可以观察变量或者表达式的值。

注意:这个表达式不能有副作用,例如++运算符绝对禁止用于这个表达式中,因为这个运算符将修改变量的值,导致软件的逻辑被破坏。

也可以修改某个变量的值。

Memory 由于指针指向的数组,Watch 只能显示第一个元素的值。

为了显示数组的后续内容,或者要显示一片内存的内容,可以使用 memory 功能。

在 Debug 工具条上点 memory 按钮,就弹出一个对话框,在其中输入地址,就可以显示该地址指向的内存的内容。

Variables Debug 工具条上的 Variables 按钮弹出一个框,显示所有当前执行上下文中可见的变量的值。

特别是当前指令涉及的变量,以红色显示。

寄存器 Debug 工具条上的 Registers 按钮弹出一个框,显示当前的所有寄存器的值。

调试技巧: 1、VC++中 F5 进行调试运行 a、在 output Debug 窗口中可以看到用 TRACE 打印的信息 b、 Call Stack 窗口中能看到程序的调用堆栈 2、当 Debug 版本运行时发生崩溃,选择 retry 进行调试,通过看 Call Stack 分析出错的位置及原因3、使用映射文件调试 a、创建映射文件:Project settings 中 link 项,选中Generate mapfile,输出程序代码地址:/MAPINFO: LINES,得到引出序号:/MAPINFO: EXPORTS。

b、程序发布时,应该把所有模块的映射文件都存档。

c、查看映射文件:见” 通过崩溃地址找出源代码的出错行”文件。

4、可以调试的Release 版本 Project settings 中 C++项的 Debug Info 选择为 Program Database,Link 项的 Debug 中选择 Debug Info 和 Microsoft format。

5、查看 API 的错误码,在watch 窗口输入@err 可以查看或者@err,hr,其中”,hr”表示错误码的说明。

相关文档
最新文档