初级C++编程的调试技巧

上传人:飞*** 文档编号:52327971 上传时间:2018-08-20 格式:PPT 页数:166 大小:1.28MB
返回 下载 相关 举报
初级C++编程的调试技巧_第1页
第1页 / 共166页
初级C++编程的调试技巧_第2页
第2页 / 共166页
初级C++编程的调试技巧_第3页
第3页 / 共166页
初级C++编程的调试技巧_第4页
第4页 / 共166页
初级C++编程的调试技巧_第5页
第5页 / 共166页
点击查看更多>>
资源描述

《初级C++编程的调试技巧》由会员分享,可在线阅读,更多相关《初级C++编程的调试技巧(166页珍藏版)》请在金锄头文库上搜索。

1、C+编程的调试技巧大连理工大学 软件学院 赖晓晨主要内容 VC+集成开发环境 调试方法 如何独立解决问题 编程规范一、集成开发环境的熟悉工欲善其事,必先利其器保存、全部保存打开最近的工程给工程中添加文件查找文件在指定目录下的某类型文件中搜索 所有包含某字符串的文件Debug:带有调试 信息,文件大。 Release:没有调 试信息,不能调试 ,文件小切换Debug模式和 Release模式比较文件大小编译(ctrl+F7):编译源文件到目标文件 构建(F7):链接目标文件和库函数为可执行文件,如无目标文件则先生成 清洁:删掉debug或者release版本的所有中间文件和可执行文件 调试 单步

2、执行(F10):单步执行,遇到函数调用时把其当作一条语句执行 深入函数的单步执行(F11):单步执行,遇到函数调用是深入到其内部 执行到光标处(ctrl+F10):一次执行完光标前的所有语句,并停到光标处 跳出(shift+F11):执行完当前函数的所有剩余代码,并从函数跳出 重新开始调试(ctrl+shift+F5):重新开始调试过程 结束调试(shift+F5):执行完程序的剩余部分,结束调试 设置/取消断点(F9):在某一行设置和取消断点当前执行的语句堆栈的内容:函数调用关系从这里可以 查看内存数据程序执行过程中的一 些变量会显示在这里著名的watch窗口:看变量 表达式、地址等各种信息

3、寄存器当前值二、调试方法行而上谓之道,行而下谓之器树立正确的编程方法论 没有解决不了的问题,树立编程信心 按照正确的方法来编程 从实践中体会解决问题的思路、编程的思想 熟练掌握语法,数据结构,算法、模式,底 层环境 按照编程规范来编写代码 充分利用各种资源: 调试器 msdn 网络搜索引擎常用调试手段 利用编译器的输出信息排除错误 利用调试器的调试功能 单步、run to cursor、断点、条件断点、查看堆栈、 利用watch窗口查看变量、表达式的值 分段调试法、增量调试法 利用flush人为刷新缓冲区 修改输出信息,增加标志位 利用输出语句打印调试信息 通过堆栈观察函数调用情况 综合程序调

4、试方法 注释的技巧、条件编译几个简单例子#include#includevoid main()cout=1;j/=2)if(d/j=1)cout void main() float num1,num2,outcome; char op,a; do coutnum1num2endl; coutopendl; if(opemun2!=0) switch(op) case *:outcome=num1*num2;break; case /:outcome=num1/num2;break; case +:outcome=num1+num2;break; case -:outcome=num1-num2

5、;break; default:coutaendl; while(a=y); 两个数的算术运算/如果输入字符a,则显示1,否则程序结束 #include int f() char c; coutc; if(c=a) return 1; else ; int main() coutint main() double a, b, c, d; coutabc; if(a=bchar op,a;cinop;coutinteger1;coutinteger2;switch(op).e=integer1+integer2;f=integer1-integer2;g=integer1*integer2;h=

6、integer1/integer2;case +:coutvoid main()double integer1,integer2,e,f,g,h;char op,a;cinop;coutinteger1;coutinteger2;switch(op)./点e=integer1+integer2;/这段代码执行不到f=integer1-integer2;g=integer1*integer2;h=integer1/integer2;case +:cout int main() char type = s; while(type != !) couttype; if (type = 65 whil

7、e(type != !) couttype; if (type = 65 coutm;for(int i=1;i int main() int m; coutm;for(int i=1;i int main() int m; coutm; int n=m; for(int i=1;i void main() for(int i=1;i=11-s;n-) cout void main() for(int i=1;i=11-s;n-) cout void main() for(int i=1;i=11-s;n-) cout void main() for(int i=1;i=z;p-) cout

8、void main() for(int i=1;i=11-s;n-) cout int Factorial ( int ) ; void main () int k ;cout k ; cout int Factorial ( int ) ; void main () int k ;cout k ; cout int Factorial ( int ) ; void main () int k ;cout k ; cout int Fibonacci ( int n ) if ( n #include #include int main() int m,i,k,n=0; bool prime=

9、1; for(m=101;m #include #include int main() int m,i,k,n=0; bool prime=1; for(m=101;m #include #include int main() int m,i,k,n=0; bool prime ; for(m=101;m#include void main()int i,j,k,m,sig;char hexbit;bool z,hexz;cout#includeint main ()int a=10;for(int i=1;i #include int main () int a=10; coutvoid m

10、ain() int i; for(i=1;i void main() /* for(int i=1;i #define DEBUG 1int Factorial ( int ) ; void main () int k ;cout k ; cout #define d 0 int main () int i=1; if (d) cout #include void main() WinExec(“notepad.exe“,SW_SHOW);四、编程规范不以规矩,不成方圆软件开发编码规范广州HW有限公司质量管理体系文件引言 为了提高源程序的质量和可维护性,最终 提高公司软件产品生产力,我们有必要

11、对 公司软件产品的源程序的编写风格作出统 一的规范约束。本文档的读者是系统分析 设计人员和CC+程序代码编制人员、测 试人员。总则 本规范总则的内容包括:排版 注释 标识符命名 变量使用 代码可测性程序效率 质量保证 代码编译 单元测试 程序版本与维护术语: 术语描述:规则:编程时强制必须遵守的原则。建议:编程时必须加以考虑的原则。说明:对此规则或建议进行必要的解释 。 示例:对此规则或建议从正、反两个方 面给出例子。1。排版 1-1: 程序块要采用缩进风格编写,缩进的 空格数为4个。 说明:对于由开发工具自动生成的代码可以 有不一致。1。排版(续) 1-2:相对独立的程序块之间、变量说明 之

12、后必须加空行。示例:如下例子不符合规范。 if (!valid_ni(ni) . / program code repssn_ind = ssn_dataindex.repssn_index; repssn_ni = ssn_dataindex.ni; 应如下书写: if (!valid_ni(ni) . / program code repssn_ind = ssn_dataindex.repssn_index; repssn_ni = ssn_dataindex.ni;1。排版(续) 1-3:较长的语句(80字符)要分成多行 书写,长表达式要在低优先级操作符处划 分新行,操作符放在新行之首

13、,划分出的 新行要进行适当的缩进,使排版整齐,语 句可读。1。排版(续)示例: perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN+ STAT_SIZE_PER_FRAM * sizeof( _UL ); act_task_tableframe_id * STAT_TASK_CHECK_NUMBER + index.occupied= stat_poiindex.occupied; act_task_tabletaskno.duration_true_or_false= SYS_get_sccp_statistic_state( stat_

14、item ); report_or_not_flag = (taskno ),后不应加空格。 说明:采用这种松散方式编写代码的目的是使代 码更加清晰。由于留空格所产生的清晰性是相对 的,所以,在已经非常清晰的语句中没有必要再 留空格,如果语句已足够清晰则括号内侧(即左括 号后面和右括号前面)不需要加空格,多重括号间 不必加空格,因为在C/C+语言中括号已经是最 清晰的标志了。给操作符留空格时不要连续留两 个以上空格。1。排版(续)示例:(1) 逗号、分号只在后面加空格。int a, b, c; (2)比较操作符, 赋值操作符“=”、 “+=”,算术操作符“+”、“%”,逻辑操作符“a *= 2

15、;a = b 2;1。排版(续)(3)“!“、“、“+“、“-“、“ / 内容操作“*“与内容之间flag = !isEmpty; / 非操作“!“与内容之间p = / 地址操作“ / “+“,“-“与内容之间(4)“-“、“.“前后不加空格。p-id = pid; / “-“指针前后不加空格(5) if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显。if ( a = b strcpy(deb.calltype,CALLTYPE_IDD); 例2: strcpy(deb.chargecode,CHARGE_IDD); strcpy(deb.calltype,CALLTYPE_IDD); /* International roamer calculate toll fee */ 应如下书写 /* International roamer calculate toll fee */ strcpy(deb.chargecode,CHARGE_IDD); strcpy(deb.calltype,CA

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号