Visual_C++6[1].0的调试技巧和经验总结

合集下载

使用VC6.0调试程序

使用VC6.0调试程序

结构体类型的定义
struct 结构体类型名 { 类型标识符 成员名1;
类型标识符 成员名2; ……
类型标识符 成员名n; };
如: struct student { char name[10];
long id; char gender; int age; }
注意: struct student 应作为一个类型整体, name[10]、id、gender、age都是其成员。 struct及花括号后的“;”不能省。
a
因此,在C语言中,将地 址形象化地称为指针
2012 35
b
….
2010 p
2012 q
定义一个指针变量
指针变量的定义一般形式为:
基类型 *指针变量名;
例如: int i, j, *pi, *pj; float x, y, *p1, *p2;
指针变量的赋值:使得指针变量指向变量 指针变量名=&变量名;
设有一个函数process,在调用它时,每次实现不同的功 能。输入a和b两个数,第一次调用时找出a与b中的大者,第
二次找出小者,第三次求和。
#include<stdio.h> void main() {int max(int,int); int min(int,int); int add(int,int); int process(int, int, int (*fun)()); int a,b; printf("enter a and b:"); scanf("%d%d",&a,&b); printf("\nmax="); process(a,b,max); printf("\nmin="); process(a,b,min); printf("\nsum="); process(a,b,add); }

VC6.0调试方法

VC6.0调试方法

VC6.0调试⽅法
1.打开你要调试代码的⼯作空间。

2.按快捷键F5或点击以下图⽚上标记的图标进⼊调试模式。

3.打开调试⼯具条,⼀般情况下当你按F5键后会⾃动弹出,如果没有弹出的话,右击⼯具栏空⽩处,会弹出下图,选中调试,就会出现调试⼯具条。

4.接下来,在监视窗⼝中添加你要监视数据变化的变量。

5.按F11逐语句的调试代码,如果某⼀语句是⼀函数,你不希望进⼊该函数时,F10逐过程来查看,在代码的调试过程中,通过监视窗⼝查看变量值的变化,从⽽确定代码是否有问题。

6.如果希望跳出某⼀函数时,按快捷键Shift+F11,或者直接点击调试⼯具条上的按钮就可以跳出该函数了。

7.如果只是希望调试某⼀部分代码的话,可以设置断点来调试,调试⽅法如上,只是在要调试的代码之间⽤断点来分开。

设置断点时,光标放在你要设置断点的那⾏,按F9或点击编译微型条上⾯的类似⼿状的按钮即可。

Visual C++6.0 中的调试工具使用入门

Visual C++6.0 中的调试工具使用入门

Visual C++6.0 中的调试工具使用入门一、程序开发过程中出现的错误类型我们在进行程序设计时,不可避免地会犯错误。

程序中的错误可以分为三类:编译错误、运行时错误和逻辑错误。

编译错误(Compile errors)又称为编译时错误(Compiling-time errors): 是由于错误的编码产生的。

例如关键字拼写错误、将中文标点符号当成英文符号使用、遗漏了某些必要的标点符号或者使用了一个没有定义的标识符。

编译错误一般都是语法错误,当编译器对程序进行语法检查时,都能发现这些错误,并能够指出产生错误的位置(标出行号)。

我们可以根据编译出错信息指出的行号找到对应的源代码行改正错误,重新编译源程序。

只有当所有的编译错误被改正后,才能通过编译检查,产生目标代码文件。

改正编译错误的关键是要能正确理解编译器给出的编译错误信息。

VC++环境中的编译、链接错误信息是用英文表示的。

对于英文基础薄弱的读者,可以参考本实验指导书后面的“VC++编译、链接常见错误和警告信息中英文对照”。

通常情况下,一个语法错误可能产生多条编译错误信息,这是由于株连错误造成的,建议读者在处理编译错误时,找到第一个出现错误的位置改正后重新编译。

这样能够避免被株连错误迷惑。

值得指出的是,现在大部分编译器对错误的定位不精确,如果在编译器指出的行没有发现错误,应该向前查找错误。

例如,当提示第10行发生错误时,如果在第10行没有发现错误,请从第10行开始往前查找错误并修改之。

运行时错误(Run-time errors)是在程序的运行阶段出现的,当运行环境检测到程序的某些操作无法执行,例如除数为零时,就会出现运行时错误。

当运行环境检测到程序的某些操作是被禁止的,也会产生运行时错误。

例如,访问数组时超越数组的边界,空指针引用(NULL pointer assignment,空指针赋值,即有指针未赋具体地址就使用了)等等。

逻辑错误(Logic errors):当程序没有按照程序员的意图执行时,就表明程序中存在逻辑错误。

Visual C++ 6.0程序调试

Visual C++ 6.0程序调试

Visual C++ 6.0程序调试在编写较长的程序时,能够一次成功而不含有任何错误决非易事,对于程序中的错误,系统提供了易用且有效的调试手段。

调试是一个程序员最基本的技能,不会调试的程序员就意味着即使学会了一门语言,却不能编制出任何好的软件。

1、调试程序环境介绍①进入调试程序环境选择主菜单“编译(Build)”中的“开始调试(Start Debug)”命令,选择下一级提供的调试命令,或者在菜单区空白处单击鼠标右键,在弹出的菜单中选中“调试(Debug)”项。

激活调试工具条,选择需要的调试命令,系统将会进入调试程序界面。

同时提供多种窗口监视程序运行,通过单击“调试(Debug)”工具条上的按钮,可以打开/关闭这些窗口,参考图8。

②Watch(观察)窗口单击调试(Debug)工具条上的Watch按钮,就出现一个Watch窗口,系统支持查看程序运行到当前指令语句时变量、表达式和内存的值。

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

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

还可以采用系统提供一种被称为Watch的机制来观看变量和表达式的值。

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

在该窗口中输入变量或者表达式,就可以观察变量或者表达式的值。

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

③Variables(变量)窗口单击调试(Debug)工具条上的“Variables“按钮弹出Variables窗口,显示所有当前执行上下文中可见的变量的值。

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

④Memory(内存)由于指针指向的数组,Watch窗口只能显示第一个元素的值。

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

Visual C++ 6.0 调试工具使用

Visual C++ 6.0 调试工具使用

Visual C++ 6.0 调试工具使用在开发程序的过程中,需要不断地调试自己的程序,或检查错误,或测试程序的稳定性,这就需要借助调试工具来进行。

选择一个好的调试工具并能够熟练地使用它,将会使程序开发变得更加容易,从而大大提高程序开发的效率。

目前有许多调试工具,集成在Visual C++中的调试工具便具有相当强大的功能。

1.1 设置工程的调试属性在Visual C++中建立一个工程(Project)时,Visual C++都会自动创建一个Debug 目录,在该目录下存放在开发过程进行调试时生成的文件以及生成的可执行文件,不妨将此时生成的可执行文件称为Debug版本。

在Debug 版本当中,包含着Microsoft 格式的调试信息,而且不进行任何代码优化。

一般情况下,在程序的开发过程中使用Debug 模式。

在应用程序开发完成之后,要将程序发行时,需要编译形成另一种版本的可执行文件,称为Release 版本,在Release 版本中对可执行程序的二进制代码进行了优化,其中不包含任何的调试信息。

要建立Release 版本的可执行文件,可以选择菜单Project 中的Setting 命令,这时屏幕上面弹出Project Settings 对话框,如图1-1 所示。

在Settings For 下拉列表中选择Release,按OK 按钮退出。

如果要在Visual C++中调试程序,则工程的应设为Debug 版本。

一般Visual C++建立一个工程(Project)时,默认采用Debug 版本。

图1-1 设置工程的调试属性1.2 学习设置断点进行单步调试通常,一个应用程序是连续运行的,但是在程序调试的过程中,往往需要在程序的运行过程的某一阶段来观测应用程序的状态,所以必须使程序在某一地点停下来。

在Visual C++ 中,可以通过设置断点来达到这样的目的。

在设置好断点之后,当程序运行到设立断点处时就停止运行,此时就可以利用各种工具来观察程序的状态,也可以设置各种条件使程序按要求继续运行,这样就可以进一步观测程序的流向。

VISUALC6.0工程设置解读

VISUALC6.0工程设置解读

VISUALC6.0工程设置解读VC6.0的工程设置解读Project--Settings做开发差不多一年多了,突然感觉对VC的工程设置都不是很清楚,天天要和VC见面,虽然通常情况下一般都不会修改工程设置,但是还是有必要对它的一些设置项的来龙去脉有一定的了解,所以狂查资料,稍作整理,总结一篇文档,方便以后查阅,总得记录点什么,温故而知新嘛。

进入工程设置界面有两种方法:方法一,选择法:【Project】->【Settings】方法二,快捷键:【Alt+F7】打开工程设置对话框,如下图:左边的列表可以选择要设置的工程编译方式(Debug或Release),如果多个工程,还可以选择要设置的工程。

右边是一个属性页,内容十分丰富,依次是:General,Debug,C/C++,Link,Resource, MIDL,Browse Info,Custom Build,Pre-link Step,Post-build step下面主要介绍各个选项的功能:【General】设置工程的一般特性。

1.Microsoft Foundation Classes连接MFC静态库的方式,默认为共享的DLL方式,对一些不支持MFC42的机器环境来说,选择静态编译还是有必要的。

2.Intermediate files中间文件输出路径,比如:*.obj、*.pch、*.res、*.sbr、*.idb、*.pdb3.Output files输出文件路径,比如:*.exe。

4.Allow per-configuration dependencies按外部制作文件(exported makefile)方式为每个工程配置导出不同的可建立项目。

【Debug】设置工程调试的选项。

Category选项种类,先看看General种类选项卡1.Executable for debug session如果是dll的工程,需要指定启动它的exe文件路径,如果是exe工程,默认当前工程路径。

vc6.0使用教程详解

vc6.0使用教程详解

你首先要打开VC6.0界面,一般用得较多的是Win32控制台应用程序(源程序,扩展名.cpp),步骤是:(先工程—后文件—编译—连接---运行)1,建立一个工程,“文件”——“新建”,出现下面界面:选择“Win32 Console Application”(控制台应用程序,左边倒数第三个),命名工程名称,选择保存位置,点击“确定”,进入下一步,看到如下提示界面:建立一个空工程,对应其他需要的你一可以建立别的工程;点击“完成”,之后:显示你创建的工程的信息。

2,再在有一个的工程的条件下,我们再建立一个源文件;“文件”——“新建”(快捷键Ctri+N),出现:建立源文件,选择“C++ Source ”,一般都是建立这种文件的(适用在当文件中适用)如果要建立头文件的话,选择“C/C++ Header File”,(适用在多文件工程中使用)命名,文件名称,点击“确定”,之后:进入编辑区,在主界面编写代码:如下编写完之后呢:可以按编译按钮调试程序,看看有没有错误,有的话改正,没有的话就可以再按连接按钮检查连接(多文件工程时常用,检查文件间是否正常连接),最后,点运行按钮,就可以运行了。

如果是您有代码如:cpp文件,或.h 文件,想添加都VC6.0里来测试的话,可以这样做:首先,要理解一下文件扩展名为:cpp和.h文件扩张名是.h,代表的是头文件,一般是书写一些函数原型,以及一些在整个程序中常用到的结构体,频繁使用的函数说明,定义等等;文件扩张名为,cpp的,是C++中的源文件,也是最常用到的文件,每建立一个工程都要至少一个源文件(至少要有一个函数入口——主函数main() ),包含了核心代码;建立与运行说明:(以VC 6.0编译器为例,其他编译器类似)首先,打开VC 6.0编译环境;在菜单栏——文件(的下拉菜单中选择“新建”),在弹出的选择窗口中,选择Win32 Console Application(控制台应用程序),在填写工程名称,选择一个程序保存路径,点击“完成”,查看工程信息。

VC++6.0调试方法大全

VC++6.0调试方法大全

一、调试基础调试快捷键F5:开始调试Shift+F5: 停止调试F10:调试到下一句,这里是单步跟踪F11:调试到下一句,跟进函数内部Shift+F11: 从当前函数中跳出Ctrl+F10: 调试到光标所在位置F9:设置(取消)断点Alt+F9: 高级断点设置跟踪调试1、尽量使用快捷键时行调试2、观察调试信息3、高级中断设置异常调试重试->取消->调试函数堆栈,用variables或者call stack 窗口Release调试1、经常测试你的Debug和Release版本2、不要移除调试代码,如用ASSERT, TRACE等。

3、初始化变量,特别是全局变量,malloc的内存,new的内存4、当你移除某个资源时,确保你移除了所有跟这个资源相关的申明(主要是在resouce.h文中)5、使用3或者4级的警告级编译你的代码,并确保没有警告,project->setting->c/c++->warninglevel(中文版是项目->属性->C/C++->常规->警告等级)6、_debug改成NDEBUG进行调试,project->setting->C/C++->Preprocessordefinitions(中文版是项目->属性->C/C++->预处理器->预处理定义)(这里是debug和Release编译的重要不同之一)7、在Release中调试源代码,project->setting->C/C++->debug info选择programDataBase (中文版是项目->属性->C/C++->常规->调试信息格式->用于“编辑并继续”的程序数据库),project ->setting->link选上Generate debug info(中文版是项目->属性->链接器->调试->生成调试信息)8、走读代码,特别关注堆栈和指针二、TRACE宏当选择了Debug目标,并且afxTraceEnabled变量被置为TRUE时,TRACE宏也就随之被激活了。

Microsoft Visual C++ 6.0 基本调试说明

Microsoft Visual C++ 6.0 基本调试说明

Microsoft Visual C++ 6.0 基本调试说明在编写较长的程序时,能够一次成功而不含有任何错误决非易事,这需要进行长期大量的练习。

编写的程序若已没有编译错误,可以成功运行。

对于程序中的错误,VC 提供了易用且有效的调试手段。

其中,单步跟踪进入子函数(Step Into,F11),每按一次F11键,程序执行一条无法再进行分解的程序行;单步跟踪跳过子函数(Step Over,F10),每一次F10键,程序执行一行;Watch 窗口可以显示变量名及其当前值,在单步执行的过程中,可以在Watch 窗口中加入所需观察的变量,辅助加以进行监视,随时了解变量当前的情况;同时,为方便较大规模程序的跟踪,可以设置断点(F9为快捷键),断点处所在的程序行的左侧会出现一个红色圆点。

选择Build | StartDebug | Go 时,程序执行到断点处程序将暂停执行,可方便用户进行变量观察。

取消断点只需在代码处再次按F9即可。

还有运行至前函数的末尾(Step Out)等都是很有效的调试工具。

具体操作步骤如下:步骤:1:右击工作栏,选择“调试”出现调试工具栏,如下图2:选择Step Over,开始调试程序。

如图1-11.2:按Step Over(或者F11)执行单步运行。

3:当执行到某个函数后,选择Step Into,进入该函数内部,如下图所示:(!):执行到函数setpoint();(2):选择Step Into,进入函数内部4:当执行到某个函数,然后执行Step over,则跳过该函数继续往下执行(!):执行到函数setpoint();(2):执行Step Over,跳过函数setpoint(),执行函数showpoint()。

5:当进入某个函数后,执行Step Out,则跳出该函数。

(!):进入函数setpoint()内部(2):执行Step Out,,则跳出函数setpoint()。

6:Run to Cursor :运行至光标所在行暂停。

vc6.0安装教程与调试技巧

vc6.0安装教程与调试技巧

vc6.0的安装过程1.首先解压安装文件的压缩包2.然后再选择安装的版本,VC6CN 表示的是中文版,VC6EN表示英文版。

3.打开VC6CN文件夹,其中有如下图标,鼠标双击。

4.如下图所示就是我们安装的第一步,单击下一步。

5.选择“接受协议”后单击下一步。

6.本软件属于破解版,故无需输入产品ID号码,直接单击下一步。

7.选择“安装visual c++6.0中文企业版(I)”,这就是我们要安装的程序,单击下一步。

8.单击下一步。

9.如下界面,单击“继续”,开始安装软件。

10.点击“确定”。

11.选择“是”,继续安装。

12.选择“typical”继续安装13.选择“ok”。

14.选择“确定”15.选择“确定”16.取消“安装MSDN”前面的勾号,选择“退出”。

17.选择“是”,取消MSDN的安装。

18.程序安装完毕,再电脑的“开始菜单”中,选择“所有程序”,在“Microsoft Visual C++ 6.0”目录中选择“Microsoft Visual C++ 6.0”就可以运行程序了。

也可以将这个图标发送到桌面快捷方式,这样就可以直接在桌面上运行程序。

调试技巧调试程序可以帮助的了解程序是怎样运行的。

1、如何快速地规范代码缩进格式选中所需要规范的代码,按shift+F82、如何在Release状态下进行调试Project->Setting…->Project Settings对话框,选择Release状态。

“C/C++”标签页中的Category选General,Optimizations选Disable(Debug),Debug info选Program Database。

在“Link”标签页中选中Generate debug info复选框。

注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。

vc6.0调试技巧

vc6.0调试技巧

/Zi
Program Database
创建一个程序库(PDB),包括类型信息和符号调试信息。
/ZI
Program Database for Edit and Continue
除了前面/Zi的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。这个选项同时使#pragma设置的优化功能无效
Life is like a box of chocolate, you never know what you are going to get.
二、调试的一些技巧
1、使用ASSERT和VERIFY(原则:尽量简单)
ASSERT:它接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。对于系统中出现这个宏导致的中断,应该认为你的函数调用未能满足系统的调用此函数的前提条件。例如,对于一个还没有创建的窗口调用SetWindowText等。
vc6.0调试技巧
一、基本的调试设置
1、CTRL+F10:运行到当前光标处 DEBUG模式下 用F9在要看的语句上打好断点,F5调试运行,F10单步运行。
2、设置
为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。
LocalFree( lpMsgBuf );
LPVOID lpMsgBuf;
但是也要注意:由于用GetLastError插得代码七零八碎。在Watch窗里使用变量@err时就可以立即看到当前的LastError码。

Visual-C++-6.0编写、调试和运行C程序流程

Visual-C++-6.0编写、调试和运行C程序流程

步骤01:打开Visual C++ 6.0界面(如下图)如果是已经打开的界面,想重新开始一个新的工程,则可按下述方式进行:1)单击关闭工作空间菜单项(如下图)File->Close Workspace(或“文件”->“关闭工作空间”)2)在弹出的“确认”窗口中单击“Yes”(或“是”)。

表明要关闭工作空间时也同明关闭所有已打开的文件。

(如下图)步骤02:新建一个工程1) File->New(或“文件”->“新建”)2)切换到Projects 页面。

工程(或项目)类型选择:Win32 Console Application ;工程(或项目)名称:自已任意确定,但一定要有(例:TestProject);工程(或项目)在硬盘上的存储位置:如图例D 盘根目录下面的TestProject 目录(此目录的名称可不用手工设定,VC6会根据工程名称来自动设定)。

最后单击OK3)选择“一个空工程”(如是英文则:an empty project)。

单击Finish ,完成工程的建立项目类型项目名称项目在硬盘上的存储位置4)工程建立完成后,会出来一个工程的建立报告,单击OK5)出现以下窗口界面注意:“Source Files ”“Header Files ”“Resource Files ”三个目录只是逻辑上的存在,在硬盘上并没有这三个目录。

同样的,这个“工作空间->工程->文件”的三级树型结构也只是为了管理整个C 程序编写、调试和运行的过程而存在的逻辑结构,硬盘上也没有。

最顶层是“工作空间”节点。

一个工作空间下面可以挂多个“工程”。

目前只有一个工程“工程”节点,下面有“源文件”、“头文件”、“资源文件”三个目录,目前每个目录下面没有文件。

步骤03:往工程里添加后缀名为“.c”的文件,并往文件里写入C程序1)File->New(也可能是中文的菜单项名)2)在弹出的对话框中选择Files页面。

在文件类型列表中,①鼠标左键单击选中“C++ Source File”类型的文件;②勾上“Add to project”并选择刚刚建好的那个工程的名称(此例为TestProject工程);③File下面的文本框中,键入文件的名称,可以任意命名,但后缀名必须是“.c”,别忘记了!!!!!!!④Location下面是选择将新建的文件放到哪个目录下面,可以让VC6.0自动设定,不必操劳。

Microsoft_Visual_C6.0使用方法绝对实用

Microsoft_Visual_C6.0使用方法绝对实用
1.打开VC++窗口,单击菜单[File]->[New] 2.在弹出窗口上选择标签Project,选中Win32 Console Application项,并在Project name框输 入工程名;在Location框输入保存源程序的路径名; 单击OK。 3.在弹出窗口选择An Empty Project,单击[Finish] 按钮;在下一窗口单击OK。 4.再在VC++菜单条中单击[File]->[New]。
6
[Project]工程菜单
[Project]菜单共有6个选项:
1、Set Active Project 在多个工程中选定当前活动工程。 2、Add to Project 向当前工程添加文件、文件夹、数据连接 、Visual C组件,以及ActiveX控件。 3、source Control源代码控制具。 4、 Dependencies设置工程间的依赖关系。 5、 Settings 设置工程属性(调试版本、发布版本和共同部分)。 6、Export Makefile 导出应用程序的Make(*.mak)文件。
10
[Help]窗口菜单
[Help]菜单中的4个选项Contents、Search、Index 和Technical Support 都会弹出帮助窗口,叫做 MSDN Library Visual Studio6.0。 MSDN库提供的帮助工能很丰富,可以以目录、索引 和搜索三种方式提供帮助。浏览方式多样,甚至可以 连接到Web网站查找信息。 另有两个选项: Keyboard Map选项打开快捷键列表; Tip of the Day选项打开Tip of the Day对话框,介 绍Visual C++6.0的使用知识和技巧。

VC6.0调试技巧

VC6.0调试技巧
• ③ 单步跟踪跳出子函数(Step Out,Shift+F11),按键后,程序运 行至当前函数的末尾,然后从当前子函数跳到上一级主调函数。
• ④ 运行到当前光标处 当按下CTRL+F10后。程序运行至当前光标处所在的语句。
• ① 设置断点的方法
可以通过下述方法设置一个断点。首先把光标移动到需要设置断点的代码行上,然后按F9快捷键或 者单击“编译”工具条上的按钮 ,断点处所在的程序行的左侧会出现一个红色圆点。
• ② 程序运行到断点 • 选择主菜单“编译(Build)”中的“开始调试(Start Debug)”命令的下一级的
“去(Go)”调试命令,或者单击“编译(Compile)”,程序执行到第一个断点处 程序将暂停执行,该断点处所在的程序行的左侧红色圆点上添加一个黄色箭头,此时, 用户可方便地进行变量观察。继续执行该命令,程序运行到下一个相邻的断点。参考 图2-9。
• ③ 取消断点 • 只需在代码处再次按F9或者单击“编译” 。也可以打开“Breakpoints”对话框后,按
照界面提示去掉断点。
• (4) 结束程序调试,返回程序编辑环境。 选择主菜单“Debug”中的“Stop Debugging”命令,或者单击“调试(Debug)” 工具条上的 按钮,或者单击Shift+F5键,可结束程序调试,返回程序编辑环境。
sual C++6.0环境后,选择主菜单“打开工作区(Open Workspace)”命令,在“Open Workspace”对话框内找到并选择 要打开的工作区文件myexam1.dsw,单击“确定(OK)”按钮,打 开工作区。
• 在左侧的工作区窗口,单击下方的 “FileView” 选项卡,选择文件 视图显示,打开“Source”文件夹,再打开要编辑的C源程序进行编 辑和修改。如图所示。

VC++6.0环境下调试c语言代码的方法和步骤

VC++6.0环境下调试c语言代码的方法和步骤

VC++6.0环境下调试c语言代码的方法和步骤下文将为大家带来VC++6.0环境下调试c语言代码的方法和步骤,欢迎参考学习!更多内容请关注店铺!1.C语言程序四步开发步骤(1)编辑。

可以用任何一种编辑软件将在纸上编写好的C语言程序输入计算机,并将C语言源程序文件*.c以纯文本文件形式保存在计算机的磁盘上(不能设置字体、字号等)。

(2)编译。

编译过程使用C语言编译程序将编辑好的源程序文件“*.c”,翻译成二进制目标代码文件“*.obj”。

编译程序对源程序逐句检查语法错误发现错误后,不仅会显示错误的位置(行号),还会告知错误类型信息。

我们需要再次回到编辑软件修改源程序的错误,然后,再进行编译,直至排除所有语法和语义错误。

(3)连接。

程序编译后产生的目标文件是可重定位的程序模块,不能直接运行。

连接将编译生成的各个目标程序模块和系统或第三方提供的库函数“*.lib”连接在一起,生成可以脱离开发环境、直接在操作系统下运行的可执行文件“*.exe”。

(4)运行程序。

如果经过测试,运行可执行文件达到预期设计目的,这个C语言程序的开发工作便到此完成了。

如果运行出错,这说明程序处理的逻辑存在问题,需要再次回到编辑环境针对程序出现的逻辑错误进一步检查、修改源程序,重复编辑→编译→连接→运行的过程,直到取得预期结果为止。

2.Visual C++ 6.0 开发环境介绍Visual C++ 6.0(以后简称 VC)是 Microsoft 公司推出的可视化开发环境Developer Studio 下的一个组件,为我们提供了一个集程序创建、编辑、编译、调试等诸多工作于一体的集成开发环境(IDE)。

VC 集成开发环境功能强大,不仅提供了大量的向导(Wizard ),还有完备的帮助功能(MSDN)。

所以,初学者学习C 语言编程,并不需要全面了解开发环境的全部功能。

我们可以在安装VC时选择完全安装MSDN,然后在遇到问题时再去查阅MSDN 中的相关说明。

Visual C++ 6[1][1].0环境下程序调试与排错_辅导材料

Visual C++ 6[1][1].0环境下程序调试与排错_辅导材料

Visual C++6.0环境及其程序调试与排错环境及其程序调试与排错__辅导材料一、Visual C++6.0集成环境介绍Visual C++6.0提供了良好的可视化编程环境,集项目建立、打开、浏览、编辑、保存、编译、连接和调试等功能于一体。

将Visual C++6.0正确安装到Windows系统之后,选择“开始”菜单→“程序”菜单→“Microsoft Visual Studio6.0”菜单→“Microsoft Visual C++6.0”,即可启动,进入Visual C++ 6.0集成开发环境主窗口如图1所示。

图1Visual C++6.0集成开发环境集成环境的主窗户口下包括标题栏、菜单栏、项目工作区窗口、正文窗口、输出窗口和状态条。

其中,标题栏用于显示应用程序名和打开的文件名;菜单栏完成Developer Studio 中的所有功能;工具栏对应于某些菜单或命令的功能,简化用户操作;项目工作区(Workspace)窗口用于组织文件、项目和项目配置。

当读进一个项目后,该窗口的下端会出现3个标签:类视图(Class View)、资源视图(Resource View)及文件视图(File View),如图2所示。

正文窗口用于各种程序文件、资源文件、文档文件以及帮助信息等显示或编辑;输出窗口用于显示项目建立过程中所产生的各种信息;状态栏给出当前操作或所选择的命令的提示信息。

图2项目工作区Visual C++6.0的菜单栏包括File、Edit、View、Insert、Project、Build、Tools、Window、Help等菜单(命令介绍详见本实验的辅导材料),使用方法与Windows常规操作相同。

选中某个菜单后,会弹出下拉式子菜单。

子菜单中某些常用的菜单右边常常对应着某个加速键,按下加速键将直接执行该菜单项操作;菜单项后面带有“…”,表示当选择该菜单项后将弹出一个对话框,供用户作进一步的设置;菜单项后面黑色的三角箭头,表示该菜单项还带有下一级的子菜单。

Visual_C++_6.0调试功能_图解教程(2)--实例

Visual_C++_6.0调试功能_图解教程(2)--实例

Visual_C++_6.0调试功能_图解教程(2)--实例Visual C++ 6.0调试功能图解教程(2)--实例一使用说明程序名为 NO3.exe.运行环境为DOS,执行后显示:在"请输入你的选择后(1.2.3.4.5.6)"后输入数字选择执行的功能. 测试结果:1.选择1.后输入:1234567892.选择2后输入分别输入1,3.重复1)操作后选择2,分别输入10,10.3.4.重复1)操作后选择3.分别输入1,abcde再重复1)操作后选择3.分别输入9,abcde1.2.再重复1)操作后选择4,分别输入1,3再重复1)操作后选择4,分别输入0,3再重复1)操作后选择4,分别输入10,35) 再重复1)操作后选择5,分别输入1,abcde再重复1)操作后选择5,分别输入9,abcde再重复1)操作后选择5,分别输入0,abcde再重复1)操作后选择5,分别输入10,abcde6)运行No3.exe后选择6或输入非"1,2,3,4,5"的数字调试过程:1.本调试主要针对置换操作功能进行演示:1.将光标移置String:: Replace(String t1,int pos)函数的第一条语句处Ctrl+F10开始调试2.在DOS窗口中选择1后输入"123456789".接着选择5分别输入1,abcde.这时Debugger停留在String:: Replace(String t1,int pos)的第一条语句处:3.在Watch窗口的名称栏分别输入:str,t1.str,q,out,pos,(-pos) +1,pos – size,j,i.进行观察.4.按F10开始单步调试.1.按F10三次后Debugger停留在最后一个判断语句处.同时Watch窗口中个名称的值分别为:2.接着单步调试,for()函数完后,Debugger停留在"delete t1.str;"语句处.这时Watch窗口中个各名称的值分别为:接着两次F10,这时t1.str和out的值已经改变,Debugger停留在String:: Replace(String t1,intpos)的结束处.3.再按一次F10,Debugger停留在main()函数的switch(k)里的case 5的if()语句处:F10到调用Display()函数的语句处后F11跟进Display()的内部.在Watch窗口的名称中输入str,I,len进行观察.单步调试到Display()函数结束,Debugger停留在Display()函结束处.在Watch窗口中str,I,len的值分别为:同时DOS窗口中显示如下:5.按Shift+F5退出调试.完成调试操作.参考源码:2.1Code:2//3.h3#include4#include5#include6//using namespace std;7int out; // 定义一个全局变量8class String9{10public:11 String(){}12 ~String(){}13 String SubString(int pos,int num); //取子串函数14void Insert(String t,int pos); //插入子串函数15void Delete(int pos,int num); //删除子串函数 16void Creat(); //生成字符串函数 17void Display(); //打印子串函数18 Replace(String t1,int pos); //置换子串函数19private:20char *str;21int size;22 };2324//3.cpp25#include "3.h"26//生成新字符串函数27void String:: Creat()28 {29char s[100];30 cin>>s;31 size=strlen(s);32 str=new char[size + 1];33if(str==0)34 cout<<"没有申请到空间!"<<endl;< p="">35 strcpy( str, s);36//strcpy_s(str,sizeof(str)/sizeof(str[0]),s);3738 }39//输出40void String::Display()41{42int len = size;43int i;44for( i=0;i < size;i++ )45 cout<<str[i];< p="">46 cout<<endl;< p="">47 cout<<"字符串的总长度为:"<<len<<endl;< p="">48}49//求子串50//void String String::SubString(int pos,int num)51String String::SubString(int pos,int num)52{53 String temp;54int left=size-pos + 1;//从pos位置开始所有余下的字符串长度55char *p,*q;56if( pos > size )57 {58 cout<<"错误!"<<endl;< p="">59 cout<<"指定位置超过字符串长度为:"<< pos - size<<="">60 exit (1);//异常退出61 }62else if( num > left )63 num = left;64 temp.str=new char[num+1];//重新分配内存空间65if(temp.str==0)66 cout<<"没有申请到空间!"<<endl;< p="">67 p=temp.str;68for(int i = pos-1;i < pos+num-1;i++)69 {70 q = &str[i];71 *p = *q;72 p++;73 }74 *p=0;75 temp.size = num;76return temp;77}7879//插入运算:在串对象s的pos位置后插入一个串t80void String::Insert(String t,int pos)81{82//String temp;83int i_len = t.size;84 cout<<"插入字符串的长度为:"<<i_len<<endl;< p="">8586char *q;87 q = new char( size + 1);88 strcpy(q,str);8990 delete str;91 str = new char( size + t.size + 1); //字符串长度要在原长上增加插入串的长度929394 strcpy(str,q);9596//依次后移,空出长度为插入字符串的长度的空间9798for(int j = size-1;j > pos-1;j--)99 {100int i = j + t.size;101 str[ i-- ] = str[ j ];102 }103104 j = pos;105for(int i = 0;i < t.size;)106 {107 str[j++] = t.str[i++];108 }109110 size+=t.size;111 str[size + 1]='\0';112113}114115116//删除 :删除串中的一个子串117void String:: Delete(int pos,int num)118{119//用if else if语句判断删除的位置是否越界120if(pos <= 0)121 {122 cout<<"无法完成删除操作!"<<endl<<"删除位置低于字符串长度为:"< (-pos)="" +1<<endl;<="" <="" p="">123 exit (1);124 }125else if( pos > size )126 {127 cout<<"无法完成删除操作!"<<endl<<"删除位置超过字符串长度为:"< -="" <="" <<endl;<="" p="" pos="" size=""> 128 exit (1);129 }130else if(pos >= 0 && pos <= size )131 {132int i = pos - 1;133for(int j = (pos + num -1); j <= size ; j++) //从删除到的位置开始前移134 {135 str[i] = str[j];136 i++;137 }138 }139 size = size-num; //只取删除后余下的字符个数140}141142//置换:置换串中的一个子串143 String:: Replace(String t1,int pos)144{145//用if else if语句判断置换的位置是否越界146if(pos <= 0)147 {148 cout<<"无法完成转换操作!"<<endl<<"置换位置低于字符串长度为:"<< (-pos)="" +1="" <<endl;<="" p="">149 exit (1);150 }151else if(pos > size)152 {153 cout<<"无法完成置换操作!"<<endl<<"置换位置超过字符串长度为:"< -="" <="" <<endl;<="" p="" pos="" size=""> 154 exit (1);155 }156157//当置换的位置加上置换给的子串长度之和超过原字符串的长度时158 //在将不被置换的字符串长度的拷后追加新字符串的长度159else if( (t1.size+pos) >size )160 {161162char *q; //定义指针数组q用来转存原先将不被置换的字符串163 q = new char[ pos +1] ; //给q分配足够的空间为将不被置换的字符串的长度164for( int i = 0;i < pos-1;i++ )165 {166 q[i] = str[i];167168 }169170 q[pos-1] = '\0';171 delete []str; //释放原字符串空间172 strcat(q,t1.str); //通过strcat函数将输入的子串与原子串的拷贝173 cout<<"置换后的字符串为: "<<q<<endl;< p="">174return out = 0;175 }176177else if( (t1.size+pos) <= size )178 {179int j = pos - 1;180for(int i = 0;i < t1.size;i++)181 str[j++] = t1.str[i];182 delete t1.str;183return out = 1;184 }185186187}188//主函数189int main(int argc, char* argv[])190{191int pos,num,k;192 String s,s1,s2,t,t1;193do{194 cout<<"\n\n 1.生成字符串" ;195 cout<<"\n\n 2.取子串";196 cout<<"\n\n 3.插入子串s1";197 cout<<"\n\n 4.删除子串";198 cout<<"\n\n 5.置换子串";199 cout<<"\n\n 6.结束程序";200 cout<<"\n******************************** ";201 cout<<"\n 请输入你的选择(1,2,3,4,5,6)";202 cin>>k;203switch(k){204case 1:{205 cout<<"请输入一个字符串:";206 s.Creat();207 cout<<"字符串为: ";208 s.Display();209 }break;210case 2:{211 cout<<"请输入子串的截取位置pos及子串长度num"<>pos>>num;213 t = s.SubString(pos,num);214 cout<<"你所取的子串为:";215 t.Display();216 }break;217case 3:{218 cout<<"请输入子串插入位置pos"<<endl;< p="">219 cin>>pos;220 cout<<"请输入要插入的子串: ";221 s1.Creat();222 s.Insert(s1,pos);223 cout<<"插入后的字符串为: ";224 s.Display();225 }break;226case 4:{227 cout<<"请输入要删除子串的开始位置pos及子串长度num"<<="" p="">228 cin>>pos>>num;229 s.Delete(pos,num);230 cout<<"删除后的字符串为: ";231 s.Display();232 }break;233case 5:{234 cout<<"请输入子串置换位置pos"<<endl;< p="">235 cin>>pos;236 cout<<"请输入要置换的子串: ";237 s2.Creat();238 s.Replace(s2,pos);239if( out != 0 )240 {241 cout<<"置换后的字符串为: ";242 s.Display();243 }244 }break;245default:break;246 } //switch247 cout<<"\n--------------------------------- ";248}while(k>=1&&k<6);249 cout<<"\n 再见!";250 cout<<"\n 按任意键,返回。

关于Visual C++ 6.0的调试技巧和经验总结

关于Visual C++ 6.0的调试技巧和经验总结

创建c语言源代码的步骤:1、新建一个文件2、输入文件名称,设置工程文件夹(所以可以先建一个文件夹):3、书写并编辑源代码:4、编译:5、连接:6、运行看看工程文件夹结构:7、用键盘敲入程序输入:一个小技巧:可以直接点击“运行”工具按钮,如果有错,也会有出错提示。

这样可以省略编译和连接操作。

当编译时有问题怎么办? vc会给你出错地点和原因的提示,注意,首先应该修改第一条错误记录,修改后就重新编译连接,改对后再改剩下的。

即从前到后一个错误一个错误的改。

(可能后面的所有错误都是第一个错误导致的,改正第一个错误后,其他错误就消失了,或大大减少了)调试(发现错误位置,在编译、连接成功,而运行时出错时使用):调试时的快捷键以及用法见下面的内容:○常用功能:Restart(Ctrl+shift+F5):此debugger功能将从程序的开始(第一有效行)处全速执行,而不是从当前所跟踪的位置开始调试,这时所有变量的当前值都将被丢弃,debugger会自动停在程序的main()开始处。

这时如果选择Step Over(F10)就可以逐步执行main()函数了。

Stop Debugging(Shift+F5):此debugger功能将终止(所有)调试,并返回到常规编辑状态。

Break(此功能常常在遇到调用函数的语句时可见。

):此功能将在调试过程中的debugger当前位置挂起程序的执行,然后就可以在调试状态下修改程序的代码,接着可以用Apply Code Changes(Alt+F10)来应用修改的代码到正在调试的程序当中。

如果,当前(需要,待)可以(从DOS等窗口)输入值,挂起后将不能再输入。

Apply Code Changes(Alt+F10):此功能可以在程序正在调试程序过程中应用(挂起)修改后的源代码。

如,选择Break功能并修改代码后,只要选择Apply Code Changes(Alt+F10)就能将修改后的代码应用到正在调试的程序当中。

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

1.如何在Release状态下进行调试Project->Setting=>ProjectSetting对话框,选择Release状态。

C/C++标签中的Category 选General,Optimizations选Disable(Debug),Debut info选Program Database。

在Link标签中选中Generate debug info复选框。

注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。

2. Release和Debug有什么不同Release版称为发行版,Debug版称为调试版。

Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。

Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。

Release的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static dll)。

这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装Visual C++ 6.0的机器上运行。

而Debug版本的exe链接了调试版本的MFC DLL文件,在没有安装Visual C++6.0的机器上不能运行,因为缺相应的DLL,除非选择use static dll when link。

3. ASSERT和VERIFY有什么区别ASSERT里面的内容在Release版本中不编译,VERIFY里面的内容仍然翻译,但不再判断真假。

所以后者更安全一点。

例如ASSERT(file.Open(strFileName))。

一旦到了Release版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错的信息。

如果用VERIFY()就不会有这个问题。

4.Workspace和Project之间是什么样的关系每个Workspace可以包括几个project,但只有一个处于Active状态,各个project之间可以有依赖关系,在project的Setting..中可以设定,比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库。

5. 如何在非MFC程序中使用ClassWizard在工程目录下新建一个空的.RC文件,然后加入到工程中就可以了。

6.如何设置断点按F9在当前光标处增加一个断点和取消一个断点。

另外,在编辑状态下,按Ctrl+B组合键,弹出断点设置对话框。

然后单击【Condition…】按钮弹出设置断点条件的对话框进行设置。

7.在编辑状态下发现成员变量或函数不能显示提示是如何打开显示功能这似乎是目前这个Visual C++ 6.0版本的一个bug,可按如下步骤使其正常,如再出现,可如法炮制:(1)关闭Project(2)删除“工程名.ncb”文件(3)重新打开工程8.如何将一个通过ClassWizard生成的类彻底删除首先在工作区的FileView中选中该类的.h和.cpp文件,按delete删除,然后在文件管理器中将这两个文件删除,再运行ClassWizard,这时出现是否移走该类的提示,选择remove 就可以了。

9. 如何将在workspace中消失的类找出来打开该类对应的头文件,然后将其类名随便改一下,这个时候工作区就会出现新的类,再将这个类改回原来的名字就可以了。

10. 如何清除所有的断点菜单【Edit】->【Breakpoints…】,打开“Breakpoints”对话框,单击【Remove All】按钮即可。

快捷键是“Ctrl + Shift + F8”。

11. 如何再ClassWizard中选择未列出的信息打开“ClassWizard”对话框,然后切换到“Class Info”页面。

改变“Message filter”,如选择“Window”,“Message”页面就会出现Window的信息。

12. 如何检测程序中的括号是否匹配把光标移动到需要检测的括号前面,按快捷键“Ctrl + ]”。

如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告。

13. 如何查看一个宏(或变量、函数)的定义把光标移动到要查看的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的相关菜单),如果没有建立浏览文件,就会出现提示对话框,按【确定】按钮,然后就会跳到该宏(或变量、函数)定义的地方。

14. 如何添加Lib文件到当前工程单击菜单【Project】->【Settings…】弹出“Project Setting”对话框,切换到“Link”标签页,在“Object/library modules”处输入Lib文件名称,不同的Lib之间用空格格开。

15. 如何快速删除项目下的Debug文件夹中临时文件在工作区的FileView视图中选中对应的项目,单击右键弹出菜单,选择【Clean(selection only)】菜单即可。

16. 如何快速生成一个现有工程除了工程名外完全相同的新工程在新建工程的“New”对话框中选择“Custom Appwizard”项,输入新工程的名字,单击【OK】按钮。

出现“Custom AppWizard”项,输入新工程的名字,单击【OK】按钮。

出现“Custom AppWizard-Step 1 of 2”对话框,选择“An existing Project”项,单击【Next】按钮。

出现“Custom AppWizard-Step 2 of 2”对话框,选择现有工程的工程文件名,最后单击【Finish】按钮。

编译后就生成一个与现有工程相同但可以重新取名的工程AppWizard。

现在就可以项用MFC AppWizard一样用这个定制的向导。

如果不想用了,可以在Visual C++ 6.0安装目录下Common\MSDev98\Template目录中删除该Wizard对应的.awx和.pdb文件。

17. 如何解决Visual C++ 6.0不正确连接的问题情景:明明改动了一个文件,却要把整个项目全部重新编译链接一次。

刚刚链接好,一运行,又提示重新编译链接一次。

这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故。

可以这样处理:找到工程文件夹下的debug目录,将创建和修改时间都比系统时间的文件全部删除,然后再从新“Rebuild All”一次。

18. 引起LNK2001的常见错误都有哪些遇到的LNK2001错误主要为:unresolved external symbol “symbol”,如果链接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误信息。

一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在,拼写不正确或者使用错误;其次可能使用了不同版本的链接库。

以下是可能产生LNK2001错误的原因:<1>由于编码错误导致的LNK2001错误(1)不相匹配的程序代码或模块定义(.DEF)文件导致LNK2001。

例如,如果在C++源文件了内声明了一变量“var1”,却试图在另一个文件内以变量“var1”访问改变量。

(2)如果使用的内联函数是在.cpp文件内定义的,而不是在头文件内定义将导致LNK2001错误。

(3)调用函数时如果所用的参数类型和头函数声明时的类型不符将会产生LNK2001错误。

(4)试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001错误。

(5)要注意函数和变量的可公用性,只有全局变量、函数是可公用的。

静态函数和静态变量具有相同的使用范围限制。

当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001错误。

<2>由于编译和联机的设置而造成的LNK2001错误(1)如果编译时使用的是/NOD(/NODERAULTLIB)选项,程序所需要的运行库和MFC时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。

这种情况下使用/NOD将导致LNK2001错误(2)如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将出现“unresolved external on _WinMain@16”的LNK2001错误信息。

(3)使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func”的引用。

如果试图使用静态库LIBC.LIB或LIBCMT.LIB 进行链接,将在__imp__func上发生LNK2001错误。

如果不使用/MD选项编译,在使用MSVCxx.LIB链接时也会发生LNK2001错误。

(4)使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001错误。

(5)当编译调试版的应用程序时,如果采用发行版模态库进行链接也会产生LNK2001错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。

(6)不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。

(7)在不同的模块中使用内联和非内联的编译选项能够导致LNK2001错误。

如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字),只是将得到错误信息。

为避免该问题的发生,应该在相应的头文件中用inline 关键字标志为内联函数。

(8)不正确的/SUBSYSTEM或ENTRY设置也能导致LNK2001错误。

19. 如何调试一个没有源码的exe文件调用的dll在Visual C++ 6.0中,进入“Project Setting”对话框然后选择Debug标签页。

通常Visual Studio默认“executable for debug session”为可执行文件名,但可以将他改成任何你想要的程序。

甚至可以指定不同的工作目录以及传递参数到你的程序。

这个技术常用来调试Dlls、名字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-in程序。

20. Visual C++ 6.0工程中的项目文件都表示什么.opt:工程关于开发环境的参数文件。

如工具条位置等信息。

.aps(AppStudio File)资源辅助文件,二进制格式,一般不用去管它。

.clw:ClassWizard信息文件,实际上是INI文件格式,有兴趣可以研究一下。

相关文档
最新文档