C语言程序调试功能和常见错误提示.docx
《C语言程序调试功能和常见错误提示.docx》由会员分享,可在线阅读,更多相关《C语言程序调试功能和常见错误提示.docx(11页珍藏版)》请在冰点文库上搜索。
C语言程序调试功能和常见错误提示
C语言编译环境中的
调试功能及常见错误提示
调试功能
1.常用健
:
激活系统菜单
:
将光标在编辑窗口和、信息窗口之间切换
:
加载一个文件
+:
查看程序运行结果
:
得到有关编辑器在线帮助
+:
得到有关C语言的在线帮助
+:
终止正在运行的程序
2.块操作
KB:
定义块首
KK:
定义块尾
KV:
块移动
KC:
块复制
KY:
块删除
KH:
取消块定义
3.查找、替换和删除操作
QF:
查找字符串
QA:
查找并替换字符串
Option:
G(全程),B(向文件头),N(直接替换)
Y:
删除一行
QY:
删除从光标位置到行末的所有字符
编译中的常见错误例析
(1) 警告类错误
‘XXX’declarebutneverused变量XXX已定义但从未用过。
‘XXX’isassignedavaluewhichisneverused变量XXX已赋值但从未用过。
Codehasnoeffect程序中含有没有实际作用的代码。
Non-portablepointerconversion不适当的指针转换,可能是在应该使用指针的地方用了一个非0的数值。
Possibleuseof‘XXX’beforedefinition表达式中使用了未赋值的变量
Redeclarationof‘main’一个程序文件中主函数main不止一个。
Suspiciouspointerconversion可疑的指针转换。
通常是使用了基本类型不匹配的指针。
Unreachablecode程序含有不能执行到的代码。
(2) 错误或致命错误
Compoundstatementmissing}infunctionmain程序结尾缺少括号}。
“}”expected;“(”expected等复合语句或数组初始化的结尾缺少“)”;“(”。
Caseoutsideofswitchcase不属于Switch结构,多由于switch结构中的花括号不配对所致。
Casestatementmissing‘:
’switch结构中的某个case之后缺少冒号。
Constantexpressionrequired定义数组时指定的数组长度不是常量表达式。
Declarationsyntaxerror结构体或联合类型的定义后缺少分号。
Declarationwasexpected缺少说明,通常是因为缺少分界符如逗号、分号、右圆括号等所引起的。
DefaultoutsideswitchDefault部分放到了switch结构之外,一般是因为花括号不匹配而引起的。
dostatementmusthavewhiledo语句中缺少相应的while部分。
Expressionsyntax表达式语法错。
如表达式中含有两个连续的运算符
Extraparameterincall‘fun’调用函数fun时给出了多余的实参。
Functionshouldreturnavalue函数应该返回一个值,否则与定义时的说明类型不匹配。
Illegaluseofpointer指针被非法引用,一般是使用了非法的指针运算。
Invalidpointeraddition指针相加非法。
一个指针(地址)可以和一个整数相加,但两个指针不能相加。
Lvaluerequired赋值运算的左边是不能寻址的表达式。
Misplacedelse程序遇到了没有配对的else
Nomatching表达式中的括号不配对。
Pointerrequiredonleftsideof_>在“_>”运算的左边只能允许一个指针而不能是一个一般的结构体变量或联合类型的变量。
Statementmissing;程序遇到了后面没有分号的语句。
Toofewparametersincall调用某个函数时实参数目不够。
Unabletoopenincludefile‘XXXXXXXX.XXX’头文件找不到。
Unexpected}或:
或{在不希望的地方使用了}或:
{。
Undefinedsymbol‘X’infunctionfun函数fun中的变量X没有定义。
5.连接中的常见错误
主要错误类似于“undefinedsymbol_printinmodulaxxx”(print没有定义),通常是函数名书写错误。
6.运行中的常见错误
Abnormalprogramtermination程序异常终止。
通常是由于内存使用不当所致。
Floatingpointerror:
Domain或Divideby0运算结果不是一个数或被0除
Nullpointerassignment对未初始化的指针赋值,程序有严重错误。
Userbreak在运行程序时终止。
7.程序的跟踪调试
利用Run菜单可以进行程序的跟踪调试
(1) GOtoCursor()——选择该选项使程序执行到光标所在行
首先将光标移到某行(一般为可执行),选择该功能项,则程序执行到该行的前一行暂停。
此时程序处于跟踪调试状态,并有亮条显示在暂停处,此时可以查询变量或表达式的值。
(2) Traceinto()——执行一条语句或一行暂停
此时程序处于跟踪调试状态,并有亮条显示在暂停处。
该选项可跟踪到被调函数的内部。
(3) Stepover()——执行一条语句或一行暂停
此时程序处于跟踪调试状态,并有亮条显示在暂停处。
该选项将自定义函数当作一个语句执行,不跟踪到函程序的内部。
(4) Debug菜单
程序处于跟踪状态时,可使用该菜单的选项。
其主要是使用Evaluate——目的是查询或更新变量或表达式的值。
选择Evaluate功能后,系统弹出一个对话框。
该对话框包含三个选项区域:
Evaluate域可以输入一个含有目前代码中(程序暂停区的作用域)正在使用的变量名、或含变量的表达式、或常量表达式。
按回车键后,在Result域中显示变量或表达式的值。
还可以用Newvalue域进行调试。
如果调试程序时发现Result域显示的某变量或表达式的值不正确,并能估计出该变量或表达式的值,则可以将该值输入到Newvalue域,继续执行程序,其目的是肯定错误发生处是否在当前位置之前。
如果输入这个正确的值并将程序继续执行完毕而结果正确,说明在目前暂停处之前已经发生错误而之后无错误。
(5) Break/Watch——用于设置断点和监视表达式。
选择AddWatch功能选项,系统将弹出一个菜单,在AddWatch框中输入变量名或表达式,按回车键后,系统在屏幕底部开辟一个窗口并显示该变量或表达式的值。
【常见错误信息语句索引】
Ambiguousoperatorsneedparentheses:
不明确的运算需要用括号括起
Ambiguoussymbol'xxx':
不明确的符号
Argumentlistsyntaxerror:
参数表语法错误
Arrayboundsmissing]infunctionmain缺少数组界限符"]"
Arrayboundsmissing:
丢失数组界限符
Arraysizetoolarge:
数组尺寸太大
Badcharacterinparamenters:
参数中有不适当的字符
Badfilenameformatinincludedirective:
包含命令中文件名格式不正确
Badifdefdirectivesynatax:
编译预处理ifdef有语法错
Badundefdirectivesyntax:
编译预处理undef有语法错
Bitfieldtoolarge:
位字段太长
Callofnon-function:
调用未定义的函数
Calltofunctionwithnoprototype:
调用函数时没有函数的说明
Cannotmodifyaconstobject:
不允许修改常量对象
Caseoutsideofswitch:
漏掉了case语句
Casesyntaxerror:
Case语法错误
Codehasnoeffect:
代码不可述不可能执行到
Compoundstatementmissing{:
分程序漏掉"{"
Conflictingtypemodifiers:
不明确的类型说明符
Constantexpressionrequired:
要求常量表达式
Constantoutofrangeincomparison:
在比较中常量超出范围
Conversionmaylosesignificantdigits:
转换时会丢失意义的数字
Conversionofnearpointernotallowed:
不允许转换近指针
Couldnotfindfile'xxx':
找不到XXX文件
Declarationmissing;:
说明缺少";"
Declarationsyntaxerror:
说明中出现语法错误
Defaultoutsideofswitch:
Default出现在switch语句之外
Definedirectiveneedsanidentifier:
定义编译预处理需要标识符
Divisionbyzero:
用零作除数
Dostatementmusthavewhile:
Do-while语句中缺少while部分
Enumsyntaxerror:
枚举类型语法错误
Enumerationconstantsyntaxerror:
枚举常数语法错误
Errordirective:
xxx:
错误的编译预处理命令
Errorwritingoutputfile:
写输出文件错误
Expressionsyntaxerror:
表达式语法错误
Extraparameterincall:
调用时出现多余错误
Filenametoolong:
文件名太长
Functioncallmissing):
函数调用缺少右括号
Fuctiondefinitionoutofplace:
函数定义位置错误
Fuctionshouldreturnavalue:
函数必需返回一个值
Gotostatementmissinglabel:
Goto语句没有标号
Hexadecimaloroctalconstanttoolarge:
16进制或8进制常数太大
Illegalcharacter'x':
非法字符x
Illegalinitialization:
非法的初始化
Illegaloctaldigit:
非法的8进制数字
Illegalpointersubtraction:
非法的指针相减
Illegalstructureoperation:
非法的结构体操作
Illegaluseoffloatingpoint:
非法的浮点运算
Illegaluseofpointer:
指针使用非法
Improperuseofatypedefsymbol:
类型定义符号使用不恰当
In-lineassemblynotallowed:
不允许使用行间汇编
Incompatiblestorageclass:
存储类别不相容
Incompatibletypeconversion:
不相容的类型转换
Incorrectnumberformat:
错误的数据格式
Incorrectuseofdefault
Default使用不当
Invalidindirection无效的间接运算
Invalidpointeraddition指针相加无效
Irreducibleexpressiontree无法执行的表达式运算
Lvaluerequired需要逻辑值0或非0值
Macroargumentsyntaxerror宏参数语法错误
Macroexpansiontoolong宏的扩展以后太长
Mismatchednumberofparametersindefinition定义中参数个数不匹配
Misplacedbreak此处不应出现break语句
Misplacedcontinue此处不应出现continue语句
Misplaceddecimalpoint此处不应出现小数点
Misplacedelifdirective不应编译预处理elif
Misplacedelse此处不应出现else
Misplacedelsedirective此处不应出现编译预处理else
Misplacedendifdirective此处不应出现编译预处理endif
Mustbeaddressable必须是可以编址的
Musttakeaddressofmemorylocation必须存储定位的地址
Nodeclarationforfunction'xxx'没有函数xxx的说明
Nostack缺少堆栈
Notypeinformation没有类型信息
Non-portablepointerassignment不可移动的指针(地址常数)赋值
Non-portablepointercomparison不可移动的指针(地址常数)比较
Non-portablepointerconversion不可移动的指针(地址常数)转换
Notavalidexpressionformattype不合法的表达式格式
Notanallowedtype不允许使用的类型
Numericconstanttoolarge数值常太大
Outofmemory内存不够用
Parameter'xxx'isneverused能数xxx没有用到
Pointerrequiredonleftsideof->符号->的左边必须是指针
Possibleuseof'xxx'beforedefinition在定义之前就使用了xxx(警告)
Possiblyincorrectassignment赋值可能不正确
Redeclarationof'xxx'重复定义了xxx
Redefinitionof'xxx'isnotidenticalxx的两次定义不一致
Registerallocationfailure寄存器定址失败
Repeatcountneedsanlvalue重复计数需要逻辑值
Sizeofstructureorarraynotknown结构体或数给大小不确定
Statementmissing;语句后缺少";"
StructureorunionsyntaxerrorX构体或联合体语法错误
Structuresizetoolarge结构体尺寸太大
Subscriptingmissing]下标缺少右方括号
Superfluous&withfunctionorarray函数或数组中有多余的"&"
Suspiciouspointerconversion可疑的指针转换
Symbollimitexceeded符号超限
Toofewparametersincall函数调用时的实参少于函数的参数不
ToomanydefaultcasesDefault太多(switch语句中一个)
Toomanyerrororwarningmessages错误或警告信息太多
Toomanytypeindeclaration说明中类型太多
Toomuchautomemoryinfunction函数用到的局部存储太多
Toomuchglobaldatadefinedinfile文件中全局数据太多
Twoconsecutivedots两个连续的句点
Typemismatchinparameterxxx数xxx类型不匹配
Typemismatchinredeclarationof'xxx'xx重定义的类型不匹配
Unabletocreateoutputfile'xxx'无法建立输出文件xxx
Unabletoopenincludefile'xxx'无法打开被包含的文件xxx
Unabletoopeninputfile'xxx'无法打开输入文件xxx
Undefinedlabel'xxx'没有定义的标号xxx
Undefinedstructure'xxx'没有定义的结构xxx
Undefinedsymbol'xxx'没有定义的符号xxx
Unexpectedendoffileincommentstartedonlinexxx从xxx行开始的注解尚未结束文件不能结束
Unexpectedendoffileinconditionalstartedonlinexxx从xxx开始的条件语句尚未结束文件不能结束
Unknownassembleinstruction未知的汇编结构
Unknownoption未知的操作
Unknownpreprocessordirective:
'xxx'不认识的预处理命令xxx
Unreachablecode无路可达的代码
Unterminatedstringorcharacterconstant字符串缺少引号
Userbreak用户强行中断了程序
VoidfunctionsmaynotreturnavalueVoid类型的函数不应有返回值
Wrongnumberofarguments调用函数的参数数目错
'xxx'notanargumentxxx不是参数
'xxx'notpartofstructurexxx不是结构体的一部分
xxxstatementmissing(xxx语句缺少左括号
xxxstatementmissing)xxx语句缺少右括号
xxxstatementmissing;xxx缺少分号
'xxx'declaredbutneverused说明了xxx但没有使用
'xxx'isassignedavaluewhichisneverused给xxx赋了值但未用过
Zerolengthstructure结构体的长度为零
【注意】1.不同编译环境的功能或提示可能有差异;
2.部分说明为“经验性”的,仅供参考.