当前位置:文档之家› 程序调试错误收集

程序调试错误收集

程序调试错误收集
程序调试错误收集

一.Java程序调试与错误收集

1.Web程序的调试与排错:尽量使用System.out.println();和打印hql语句的方式跟踪查错

(1).非代码引起的报错

①.jar包引起的错误:当从版本控制器上下载项目时,如果项目报错但是所有类文件和配置文件和所有手动建的包都没有报错的情况时是因为项目中的jar包有错,修改或删除jar包即可

②.编译器版本不合报错:当启动服务器或部署项目时控制台打印有:* https://www.doczj.com/doc/ef18755123.html,ng.UnsupportedClassVersionError:Bad version number in .class file的异常语句时是因

为当前MyEclipse使用的jdk版本和项目创建时的jdk版本不合而引起的,进入MyEclipse>Window>Preferences>点击弹出的对话框左边的树形菜单中的"Java"项下的Comp iler项>点右边显示框中Compiler compliance level:右边的下拉列表并选择和创建项目时的jdk版本相同的jdk版本号>点击右下角的"Apply"按钮>点击击右下角的"Ok "按钮即可

③.当控制台或页面上打印org.apache.jasper.JasperException: The absolute uri: https://www.doczj.com/doc/ef18755123.html,/jsp/jstl/core cannot be resolved in either web.xml o

r the jar files deployed with this application的异常语句时,是因为缺少jar包或jar包版本不对或web.xml配置问题

方法一:在工程中导入JSTL jar包后(把*.jar和*.tld放到/WEB-INF/lib目录下)在JSP页面中导入<%@ taglib uri="/WEB-INF/lib/c.tld" prefix="c"%>

方法二:修改web.xml(加上下面语句)

https://www.doczj.com/doc/ef18755123.html,/jstl/fmt/W EB-INF/tlds/fmt.tld

https://www.doczj.com/doc/ef18755123.html,/jstl/fmt-rt/WEB-INF/tlds/fmt-rt.tld

https://www.doczj.com/doc/ef18755123.html,/jstl/core/ WEB-INF/tlds/c.tld

https://www.doczj.com/doc/ef18755123.html,/jstl/core-rt/WEB-INF/tlds/c-rt.tld

https://www.doczj.com/doc/ef18755123.html,/jstl/sql/W EB-INF/tlds/sql.tld

https://www.doczj.com/doc/ef18755123.html,/jstl/sql-rt/WEB-INF/tlds/sql-rt.tld

https://www.doczj.com/doc/ef18755123.html,/jstl/x/WEB -INF/tlds/x.tld

https://www.doczj.com/doc/ef18755123.html,/jstl/x-rt/ WEB-INF/tlds/x-rt.tld

再在JSP文件中导入<%@ taglib uri="/WEB-INF/lib/c.tld" prefix="c"%>

④.当代码、配置文件和路径都没有错时,但是它总是报以前的错或不出效果,是因为服务器中任然还残留以前的代码,将服务器中的项目彻底删除后重新部署即可

⑤.当两个页面同时访问同一个资源时(),如果代码完全一样但一个可以访问另一个却不能访问(报404错)时,可能是因为另一个页面中有以下代码:<%String path=request .getContextPath();String

basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServer Port()+path+"/";%>

⑥.当访问页面时,如果确认路径和页面都存在却报404错误,关闭服务器再启动试一试(重启编译器不行),或将项目从服务器上和编译器上删除,重新导入另外备份的同一项目并重新部署,如果重新部署后报错,则是xml文件配置错误,如果不重新部署后不报错即可

⑦.404错误解决:当程序出现404路径错误时,如果实在找不到有什么错误,就用鼠标放到要找的超连接上,再看浏览器最下面的状态栏的路径是否和当前文件的路进相对

⑧.当重新部署项目到服务器时,如果部署完后控制台什么也没有打印并当重新访问项目的页面时路径和页面都存在却报404错误,关闭服务器再启动试一试(重启编译器不行)

⑨.在浏览器中出现404/400页面,检查Web是否正确部署到服务器及浏览器地址栏中输入的地址和端口号是否正确还要看项目名>Propertics>MyEclipse>Web>Context root >Web Context-root右边的名称是否和/项目名一样,Jsp文件只能放在WebRoot 目录下

⑩.在浏览器中出现"无法显示网页"的页面,检查Tomcat服务是否启动和正确运行及浏览器地址栏中输入的地址和端口号是否正确、再检查是否部署服务器

11.在浏览器中出现500/503页面,说明有语法/逻辑错误,或未打开服务器

12.当服务器无法启动(即:马上启动又马上关闭时)是因为端口一直被另一个程序占用的原因,可以打开任务管理器结束占用该端口的进程,也可以重启电脑解决该问题

13.部署项目到服务器时发生的错误:当部署项目时,如果部署到某时突然发生错误,把服务器上现有的项目删除后再重新部署即可

14.MyEclipse中启动Tomcat报Could not find the main class错:(意思是找不到Ant的主类,原因是MyEclipse中的ANT_HOME指向不对)Window>Preferences>Ant>Runtime>

单击右边显示框中的Classpath标签项>选中其中的Ant Home Entries项>单击右边的Ant Home按钮将Ant Home Entries的指向改为MyEclipse插件目录(MyEclipse安装盘

符:*\Genuitec\Common\plugins)下的org.apache.ant_1.7.*.v200**\lib

15.当打开/重启编译器(MyEclipse)后项目/代码报错(之前没有报错(重新打开/重

启编译器后报错)或代码和逻辑都没有错,点击错误前面的错误提示图标后提示有Change Workspace compliance and JRE to 1.5的信息),是因为工作空间配置不对,点击错误前面的错误提示图标再双击Change Workspace compliance and Jre to 1.5即可

注:当做有Hibernate的项目时,如果程序不报错,逻辑上也找不到不对的地方时,可将控制台打印的hql语句转换成sql语句后的语句复制到数据库中执行,以检查hql语句的错

(2).代码错误导致报的错

①.当页面/控制台报错时(没有遇到过的错/看不懂的错),先看错误信息中的错误信息来源于哪个类/方法/哪行代码,在根据那行代码多试几中方法

②.保存时发生的错误:当jsp文件中的内容改变,要保存的时候,要先把第一行的pageEncoding属性值设置为utf-8,否则将报错不能保存

③.启动服务器报错,可能的错误有:配置文件有错,也可能是JSP页面中的标签有错(此时它不一定报正在使用的程序的错,有可能报其他程序的错),可以在服务器的webapps 目录下把标签有错的项目删除

④.JavaBean引起的错误:

JavaBean的属性名首字母必须小写,否则即使再dao层、server层和servlet 中可以取得其中的值,在Jsp页面中无论用什么方法都不能取得

⑤.当不出现预想的效果时,如果确认不是浏览器缓存所致,但又找不出错误和原因并浏览器状态栏左边出现有"网页上有错误"的消息时,双击此消息>单击弹出框中的"显示详细信息"按钮查看错误(其中的"行"和"错误"说明了错误的位置和原因)

⑥.当在jsp页面中用和EL表达式不能取到值时,应当首先检查是否导入c:标签库,再检查JavaBean的所有属性名首字母是否是小写

⑦.当导入一个包报错时,如果包名确认无误且当鼠标放在包名上提示The import java.... conflicts with a type defined in the same file时,表示声明的类名和导入的包名冲突

⑧.当控制台出现有https://www.doczj.com/doc/ef18755123.html,ng.ClassNotFoundException:的错误时,说明项目找不到Servlet,可能是web.xml中没有配置或配置错误,如果确认配置没有错但仍然报此错误时

,就把web.xml中对应的Servlet的节点删除,同时也把对应的Servlet删除重新新建

⑨.当一个jsp页面要有上传的功能时,要在form表单中加一个enctype="multipart/form-data"属性,但是在jsp页面的form表单中加了该属性后,该表单中的所有控件(包括

隐藏表单域)的值在servlet中不能用一般的方法获得,必须加判断那些是普通控件那些是上传文件的控件,再用别的方法获取,所以这时用作传参数的隐藏表单中的参数必须加在form表单的action属性中来传递,其方法是:action="servlet?name=value"(即:这时隐藏表单必须用action代替),这时在servlet 中才能用一般的获取值的方法

获取jsp页面传来的值

⑩.当一个jsp页面跳到servlet后又经过servle逃到另一个jsp页面,页面出现

乱码时,是因为没有在servlet中设置请求流和相应流的编码方式,response.setContentType(

"text/html;charset=utf-8");request.setCharacterEncoding("utf-8");

11.当控制台出现有"...将截取字符串错误..."的错误时,是因为数据库相应字段的数据长度不够

12.当访问任意一个页面都出现404错误时或当启动Tomcat服务器在控制台打印相关报错语句时,可能是因为web.xml或其他xml配置文件配置错误也可能是因为导入的jar 包

冲突.

13.当控制台出现有com.microsoft.sqlserver.jdbc.SQLServerException:到主机的TCP/IP连接失败。https://www.doczj.com/doc/ef18755123.html,.ConnectException:Connection refused:connect的错误时

,可能是因为数据库的端口号不对,打开SQL Server配置管理器中的SQL Server 2005网络配置中的SQLEXPRESS的协议的TCP/IP中的IP地址项中的所有TCP端口都设置对, 并将其中的活动和已启用项设为是/yes和协议项中的全部侦听、无延迟、已启用都设为是/yes,再重新启动SQL Server 2005服务中的SQL Server(SQLEXPRESS)即可

14.当从servlet或Action跳到一个查询或修改的页面时,如果报500错误并在控制台打印javax.el.PropertyNotFoundException:Property 'PropertyName' not found on type ...,可能是因为目标页面中的的items的值写成了直接用""引起的字符串,items的""中应该用EL取值,即应该是items="${List或Object}",或者是EL 中

的对象/属性名和javaBean中的不同(应仔细检查)

15.如果在使用之前jsp文件已经有了数据,文件执行就会出错

16.当控制台出现有https://www.doczj.com/doc/ef18755123.html,ng.SecurityException:class "org.objectweb.asm.CodeVisitor"'s signer information does not match signer information of other c

lasses in the same package的安全异常时,是因为包冲突引起的

17.当控制台出现有com.microsoft.sqlserver.jdbc.SQLServerException:Invalid object name'数据库名.dbo.表名/视图名'错误时,是因为数据库中不存在指定的表名

18.当控制台出现有Could not instantiate bean class [完整的包名+类型]:Constructor threw exception;nested exception is https://www.doczj.com/doc/ef18755123.html,ng.Error:Unresolved compi

lation problem:The 一段报错的语句 cannot be resolved的错误异常时是因为后台有报错的代码,改正报错的代码即可

19.当控制台/页面报有https://www.doczj.com/doc/ef18755123.html,ng.ClassCastException:...的错时,可能是因为数据类型装换时不对,或javabean封装/转换不对

3.总是在控制台提示"该连接已被关闭"时,是因为dao层的connection被声明为全局的(),改connection为局部即可

4.当重新部署项目到Tomcat报错或部署项目时选Tomcat不能Finish时,是因为Tomcat 的路径(Window>Preferences>MyEclipse>Application Servers>Tomcat>Tomcat 6.x>Tomcat home directory、Tomcat base directory、Tomcat temp directory的路径应为Tomcat

安装路径的根目录,即...Tomcat 6.0目录)没有选对

5.Ajax出现的错误:

(1).当控制台出现https://www.doczj.com/doc/ef18755123.html,ng.SecurityException:Script names may only contain Java Identifiers的错误时,可能是因为jsp页面中的代码错误,可以把此代码中的interface/后的dwr/去掉

(2).当保存web.xml在控制台出现https://www.doczj.com/doc/ef18755123.html,ng.reflecst.InvocationTargetException 的错误时,可能是因为web.xml中Ajax配置节点的所有dwr-invoker节点有错,此节点中的dwr-必须有

(3).当控制台出现有警告:Page not found. pathInfo='?/?/?.js' requestUrl='?/?/?.js'(?代表***路径)类似的信息时,是因为jsp页面上的代码中的src中的路径错误

6.CVS出现的错误:

(1).不能提交或提交时报错:确认客户端和服务器端是连接上的,或因为MyEclipse上的版本低于CVS服务器上的版本,则先Update

(2).Update或Commit失败时,首先看计算机是否连接上和服务器端的防火墙是否关闭

(3).当客户端能连接上服务器端(即能ping通并能共享文件)但又不能下载项目/Update/Commit时是因为服务器端的防火墙没有关闭

7.Hibernate出现的错误:

(1).在New一个数据库连接时,如果新建成功但连接不上数据库,这可能是因为Connection URL项处输入的连接地址中的端口和数据库名不对,或者在连接时突然弹出一个标题为

Error的报错窗口并在第二行提示The TCP/IP connection to the host has failed...时,是因为SQL Server配置管理器/SQL Server Configuration Manager中的(资源管理窗口中的)SQL Server配置管理器(本地)/SQL Server 2005网络配置/MSSQLSERVER的协议中的TCP/IP状态为已禁用(TCP/IP状态为已禁用是因为其属性中的协议项的已启

用值为否(应该为是),和IP地址项的已启用值为否(应该为是))

(2).不能将表映射为JavaBean的错误:

①.当生成JavaBean找不到要生成到的项目时,是因为在导如Hibernate jar包时,到步骤"选DB Drever右边的下拉选项中选创建的数据库连接名称"时没有选择所创建的数据库连接名称

②.当生成JavaBean不能生成(生成失败)时,是因为项目中没有导入Hibernate jar包

(3).当控制台出现有org.hibernate.MappingException:Unknown entity:entity.JavaBean的错误时,说明没有在Hibernate.cfg.xml文件中加映射文件的标签

(4).当控制台出现有org.hibernate.id.IdentifierGenerationException:ids for this class must be manually assigned before calling save():https://www.doczj.com/doc/ef18755123.html,Bar的错误时 ,说明没有把Hibernate.cfg.xml文件中的主键生成器标签中的assigned设为native

(5).当控制台出现有Exception in thread "main" org.hibernate.HibernateException:/hibernate.cfg.xml not found的错误时,是因为hibernate.cfg.xml没有放在src的根

目录下,hibernate.cfg.xml文件必须放在src根目录下才可以.

(6).在有多对一的关联映射中,当控制台出现有Exception in thread "main" https://www.doczj.com/doc/ef18755123.html,zyInitializationException: could not initialize proxy-the owning Ses

sion was closed的错误时,是因为没有在多的方的hbm.xml文件的many-to-one 节点中配置lazy="false"属性(lazy是延时加载,值为false时关闭延时加载)

(7).当控制台出现有Exception in thread "main" https://www.doczj.com/doc/ef18755123.html,zyInitializationException: could not initialize proxy - the owning Session was closed的错误

时,说明

(8).当控制台出现有Exception in thread "main" org.hibernate.PropertyAccessException:exception setting property value with CGLIB (https://www.doczj.com/doc/ef18755123.html,e_r

eflection_optimizer=false for more info) setter of https://www.doczj.com/doc/ef18755123.html,puter.setNetBar的错误时,说明

(9).当控制台出现有org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions的错误时,是因为dao层所有方法的最后没

有关闭session(即:没有session.close();)

(10).当控制台出现有https://www.doczj.com/doc/ef18755123.html,ng.OutOfMemoryError: PermGen space的错误时重启服务器即可

(11).当执行了dao层的方法返回正确的结果但数据库中的数据仍然没有改变时,可能是dao层的方法中没有执行事务提交的方法commit();

(12).当控制台出现有... ids for this class must be manually assigned before calling Hibernate方法():JavaBean所在的包.JavaBean名;nested exception is org.h ibernate.id.IdentifierGenerationException:ids for this class must be manually assigned before calling Hibernate方法():JavaBean所在的包.JavaBean名Ca used by:org.hibernate.id.IdentifierGenerationException:ids for this class must be manually assigned before calling Hibernate方法():JavaBean所在的包 .JavaBean名at org.hibernate.id.Assigned.generate(Assigned.java:33)的错误时,是因为JavaBean的映射文件:*.hbm.xml中的id节点中的节点的class 属

性的值不是native

(13).当控制台出现有org.hibernate.exception.GenericJDBCException:could not execute query

... ...

Caused by:com.microsoft.sqlserver.jdbc.SQLServerException:只进结果集不支持

请求的操作的错误时,一般出现于分页查询的方法中,是因为传到方法中的排除量或其它参数小于0(为负数)

(14).当使用Hibernate或Hibernate与其它框架整合时,在执行了save/update/delet/其它方法后,如果执行结果成功(没有报异常)但是数据库中却没有效果(数据改变),是因为

hibernate的操作只提交到事务中,事务没有将执行结果提交到数据库的原因(即没有手动配置事务的commit方法(事务可以通过session创建/开始(只要可以调用get/save /其它方法的对象/方法都可以获得/开始事务)))

(15).当页面/控制台打印org.springframework.dao.InvalidDataAccessResourceUsageException:could not execute query;SQL[Hibernate将hql转换后的sql语句];nested

exception is org.hibernate.exception.SQLGrammarException:could not execute query异常时(说明hql语句是对的,所以才被Hibernate装换为sql语句),是因为java

Bean的映射文件中对应的数据库中的列名不合

(16).当控制台出现有* line 数字*或* unexpected token: *或* at org.hibernate.hql.antlr.HqlBaseParser *(HqlBaseParser.java:*)at org.hibernate.hql.ast.Quer

yTranslatorImpl.parse(QueryTranslatorImpl.java:*)或https://www.doczj.com/doc/ef18755123.html,ng.reflect.InvocationTargetException换行sun.reflect.NativeMethodAccessorImpl.invoke(Nativ

eMethodAccessorImpl.java:39)换行https://www.doczj.com/doc/ef18755123.html,ng.reflect.Method.invoke(Method.java:597)的错误时,是hql语句有错引起的(可能是from写成了form或select写成了selc

st/slect等)

注1:当页面/控制台报不明错误(从来没有遇到过的并用System.out.println()跟踪都不能检查出错的地方,或当在不同的地方调用同一个方法时,一个地方能正常调用而另一个地方却始终报错时)时,先打印出相关的hql语句看是否正确

注2:当控制台/页面打印有https://www.doczj.com/doc/ef18755123.html,ng.reflect.InvocationTargetException或https://www.doczj.com/doc/ef18755123.html,ng.NoSuchMethodError:org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr /Rec

ognitionException;Lantlr/collections/impl/BitSet;)V的错误时,是因为hql 语句的错误,先打印相关hql语句,看hql语句是否有正确

8.Struts出现的错误:

(1).struts2出现的错误:

①.当启动服务器或重新部署项目时控制台打印Unable to load configuration.-include -file:/盘符:/.../.metadata/.me_tcat/webapps/项目名/WEB-INF/classes/st

ruts.xml:8:32异常语句时是因为struts2.xml或拆分后的其它struts2配置文件中没有头文件

(2).struts1出现的错误

①.当控制台出现有https://www.doczj.com/doc/ef18755123.html,ng.IllegalArgumentException: Path Demo.jsp does not start with a "/" character的错误时,是因为struts-config.xml文件中

name="Demo" path="/Demo.jsp">处的path属性没有/

②.当控制台出现有javax.servlet.jsp.JspException:Cannot find ActionMappings or ActionFormBeans collection并页面上出现org.apache.jasper.JasperExceptio

n:An exception occurred processing JSP page/*.jsp at line *的错误时,是因为jsp页面中使用的表单中的action="*.do"中缺少/

③.当控制台出现有https://www.doczj.com/doc/ef18755123.html,ng.NoSuchMethodException:Action[/*/*] does not contain specified method (check logs)的错误时,是因为当前的jsp页面的表单中传的参数method的值在action中没有此名的方法

④.当浏览器出现有HTTP Status 404-Invalid path was requested的字符串或者普通404错误时,是因为当前jsp访问Action的方式不对,因为如果是页面中的html标签表单

或html标签超连接访问Action时可以加.do,也可不加,但是如果是普通标签或普通超连接访问Action时就必须加.do

⑤.如果能确定一个一开始不需访问Action的页面(如添加信息的页面)中的代码没有错误,但是访问时发生500错误或同时在控制台打印org.apache.jasper.JasperExcepti on:/.../.../....jsp(29,1)Attribute Attribute invalid for tag form according to TLD之类的信息时,可能是因为页面中使用了html标签的控件或表单(因为htm l控件会自动绑定FormBean的属性值,而该页面又没有/不需要有相应的FormBean),把html控件或表单改为普通的即可

9.Spring出现的错误:

①.用Spring时,只要某个层报空异常,是因为Spring没有给该层中调用的接口注入相应的实现类对象

②.当页面/控制台打印以下错误语句时:org.springframework.orm.hibernate3.HibernateQueryException:javaBean名 is not mapped [hql语句];

nested exception is org.hibernate.hql.ast.QuerySyntaxException:javaBean名 is not mapped [hql语句],是因为Spring的配置文

件中没有配置相应的javabean..hbm.xml文件所致

10.SSH出现的错误:

(1).SSH2出现的错误

①.当控制台打印有org.springframework.dao.InvalidDataAccessApiUsageException:Write operations are not allowed in read-only mode (FlushMode.NEVER) - t

urnyour Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition的错误时,是因为Spring中的Hibernate的org.springframewor k.orm.hibernate3.support.OpenSessionInViewFilter打开后flushMode的默认值是MANUAL(手动)的,此时要将其改为AUTO(自动),可以在配置Hibernate的过滤节点下加

flushModeAUTO试试

②.当用页面的

访问/调用action时,如果访问的路径和struts.xml中节点下的namespace的值相同也和节点下节点中的name

的值是相同的,但就是报404/其它错误时先看applicationContext.xml中的创建的action对象的id值是否和struts.xml中节点下的节点中的class 的

值是否相同,如果是相同的也还报这个错,再看web.xml中配置的struts2的过滤方式:节点下的节点的值是否是/*或/action

③.当执行到层的insert/update/delete方法时,如果控制台打印执行成功且没有报错但数据库中的数据没有改变时,是因为事务没有配置对的问题

④.配置Spring时,如果确定配置无错且和以前配的一模一样,但是它总是报以前出现过的错或无效果时,是因为服务器中任然还残留以前的代码,将服务器中的项目彻底删除后重新部署即可

⑤.当控制台/页面打印https://www.doczj.com/doc/ef18755123.html,ng.RuntimeException:Invalid action class configuration that references an unknown class named [className]错误时,是因为str uts2的配置文件中所配置的和action声明/返回的对象不匹配,总之是配置文件和程序配置冲突所致

注1:当页面/控制台报不明错误(从来没有遇到过的并用System.out.println()跟踪都不能检查出错的地方,或当在不同的地方调用同一个方法时,一个地方能正常调用而另一个地方却始终报错时)时,先打印出相关的hql语句看是否正确

注2:当控制台/页面打印有https://www.doczj.com/doc/ef18755123.html,ng.reflect.InvocationTargetException或https://www.doczj.com/doc/ef18755123.html,ng.NoSuchMethodError:org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr /RecognitionException;Lantlr/collections/impl/BitSet;)V的错误时,是因为hql语句的错误,先打印相关hql语句,看hql语句是否有正确

(2).SSH1出现的错误

①.当控制台打印https://www.doczj.com/doc/ef18755123.html,ng.NullPointerException的空指针异常时,可能是Spring中注册Struts时只注册了:

"Struts的action的路径">节点而没有将Spring中已创建的服务层或其它层的实现类对象注入到Spring中注册Struts时的节点中,也可能是Struts的配置

文件中节点下的节点中的type属性的值没有改为org.springframework.web.struts.DelegatingActionProxy

②.当控制台什么也没有打印,而浏览器打印有HTTP Status 500 - No action instance for path /项目名 could be created的错误时,是因为既没有导入Spring 2.0 We b Libraries jar包也没有在Struts中的

className="org.springframework.web.struts.ContextLoaderPlugIn">

y property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml"/>节点

③.当控制台打印https://www.doczj.com/doc/ef18755123.html,ng.ClassNotFoundException:

org.springframework.web.struts.ContextLoaderPlugIn的错误时,是因为导入Spring jar 包时没有勾选Spring 2

.0Web Libraries项即没有导入Spring 2.0 Web Libraries jar包

④.当控制台打印https://www.doczj.com/doc/ef18755123.html,ng.IllegalStateException:No WebApplicationContext found:no ContextLoaderListener registered?的错误时,可能是Struts的配置文件中没有配置

注1:当页面/控制台报不明错误(从来没有遇到过的并用System.out.println()跟踪都不能检查出错的地方,或当在不同的地方调用同一个方法时,一个地方能正常调用而另一个地方却始终报错时)时,先打印出相关的hql语句看是否正确

注2:当控制台/页面打印有https://www.doczj.com/doc/ef18755123.html,ng.reflect.InvocationTargetException或https://www.doczj.com/doc/ef18755123.html,ng.NoSuchMethodError:org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr /RecognitionException;Lantlr/collections/impl/BitSet;)V的错误时,是因为hql语句的错误,先打印相关hql语句,看hql语句是否有正确

11.Ext出现的错误:

(1).当不出现预想的效果时,如果确认不是浏览器缓存所致,但又找不出错误和原因并浏览器状态栏左边出现有"网页上有错误"的消息时,双击此消息>单击弹出框中的"显示详细信息"按钮查看错误(其中的"行"和"错误"说明了错误的位置和原因)

(2).使用Ext时,如果确定代码没有错,但是没有预想的效果时,可能是没有导入jar包或没有引入已导入的js,或没有将Ext的组件渲染到div:即没有renderTo:"div的id值",或在

创建时没有new关键字,或因为代码中缺少或多了什么符号(,;:""(){}[]等),或代码的顺序不对,或引入Ext样式文件描述符和库文件描述符时*/adapter/ext/ext-base.js的顺序没有在*/ext-all.js之前引入,以上都对的情况下都没效果时是因为浏览器缓存的原因,重新从服务器上删除项目再部署即可

(3).当用超连接或按钮的onclick事件弹出一个Ext,但刚弹出一瞬间Ext就销失(毁)了,是因为超连接的href属性值不是#,按钮所在的表单的action值不是#,所以刚弹出Ext 就继

续执行下一步定位到别的路径了,将其值为#即让它定位到当前位置从而保持了Ext的呈现

(4).当用javascript(Ajax/Ext)调用其它层的方法时,如果总是进不了方法,先检查javascript中使用的其它层的对象名和dwr中节点的javascript的值是否一样,再检

查调用的方法所传的参数和其它层中方法的参数的个数和类型是否相对应

(5).当控制台出现有https://www.doczj.com/doc/ef18755123.html,ng.SecurityException:class "org.objectweb.asm.CodeVisitor"'s signer information does not match signer information of other clas

ses in the same package的安全异常时,是因为包冲突引起的,将导入的json中的commons-collections.jar删除试试

(6).当控制台出现有https://www.doczj.com/doc/ef18755123.html,zyInitializationException:failed to

lazily initialize a collection of role:包名(entity).一个javaBean名.javaBean名adjus

tsForAfterjavaBean名,no session or session was closed延时加载的错误时,是因为将HashMap转化为JSon时,HashMap中的数据不是String或基本数据类型,HashMap 中的

数据不不能为对象型

(7).呈现Ext时如果在页面的前面和后面都同时出现相同的Ext界面,是因为js中多写了renderTo属性

12.JavaScript调试:

(1).当使用js时,如果重新改变js中的内容后运行页面任然没有效果时,在改变内容的js方法中打印一个字符串(alert("string");),保存后刷新页面后就有效果了

附:

1.因为MyEclipse有时会"犯傻",所以如果能确认所有的代码都无误的情况下但效果还是不出来的话,就重新部署、启动服务器、关闭MyEclipse再重启

2.要判断一个List/集合中是否有值,不能用结合.equals(null),应该用结合.size();

3.当编辑窗口中的中文出现乱码时,右击当前编辑窗口对应的包资源管理器中的类/直接右击该类所在的包>Properties>Resource>选中Text file encoding中的Other单选按钮并选择其下拉列表中的UTF-8即可

二https://www.doczj.com/doc/ef18755123.html,程序调试与错误收集

document.all.Image1.src=document.all.FileUpload1.value;

with(document.all)

{

Image1.src=FileUpload1.value;

}

错误提示:有次我把上一句的代码写成了document.all.Image1.src=FileUpload1.value;从而导致了错误

三.SQL Server程序调试与错误收集

1.当控制台打印"' '附近有语法错误"时,是因为SQL语句中有全角的空格

2.当控制台打印"将截断字符串或二进制数据。"时,是因为插入的某个字段的数据长度太大(大于该字段定义的长度)

3.当数据库连接不上时先检查SQL Server配置管理器/SQL Server configuration manager 中各项的配置

SQL Server配置管理器(本地)/SQL Server Configuration Manager(Local)节点下的SQL 本地客户端配置/SQL Native Client Configuration节点中客户端协议/Client Protoc

ols中的TCP/IP项中的已启用/Enabled的值可为是(Yes)/否(No)、默认端口/Default Port的值可更改.

SQL Server配置管理器(本地)/SQL Server Configuration Manager(Local)节点下的SQL Server 2005网络配置/SQL Server 2005 Network Configuration节点下的"服务名(SQ

LEXPRESS)+的协议"/Protocols for 服务名(SQLEXPRESS)节点中TCP/IP项中协议/Protocol下的已启用/Enabled的值最好为是(Yes),不行时再改为否(No)、无延迟的值最好为否

(No),不行时再改为是(Yes)、全部监听的值为是、IP地址/IP Addresses下的所有的活动/Active的值为是(Yes)、激活/Enabled的值可为是(Yes)/否(No)、TCP动态端口/两项TC P Dynamic Ports的值可随意

n.当安装SQL Server2000时,如果重新装了系统都还总是提示"本计算机上已存在实例"类型的语句时,重新改过用户名即可重新安装

四.Oracle程序调试与错误收集

1.使用SQL Plus时如果出现ERROR: ORA-12541:TNS:没有监听器,是因为监听器服务没有启动,控制面板>管理工具>服务>将OracleOraHome92TNSListener的服务启动即可

如果出现ERROR:ORA-12500:TNS:监听程序无法启动专用服务器进程,是因为数据库对应的服务没有启动,控制面板>管理工具>服务>将OracleServiceSID(SID为数据库实例名)的服务启动即可

五.MySQL出现的错误

1.当建表时弹出错误提示对话框并提示"Can't create table 'tableName' (errno:150)时,是因为当前表中关联了另一张不存在的表(注:一定要是150错误才是此原因)

C语言调试常见错误及修改方法(附习题)

1.调试 C 程序时常见的错误类型分析 一般情况下,错误主要分为两大类:一、语法错误。对于这种错误,用编译器很容易解决。所以,改错题的第一步是先编译,解决这类语法错误。下面总结了二级C 语言上机改错题中常见的语法错误: (1) 丢失分号,或分号误写成逗号。 (2) 关键字拼写错误,如本来小写变成大写。 (3) 语句格式错误,例如for 语句中多写或者少写分号。 (4) 表达式声明错误,例如:少了() (5) 函数类型说明错误。与main ()函数中不一致。 (6) 函数形参类型声明错误。例如:少* 等。 (7) 运算符书写错误,例如:/ 写成了。二、逻辑错误,或者叫语义错误,这和实现程序功能紧密相关,一般不能用编译器发现。对于逻辑错误可以按这样的步骤进行查找。 (1) 先读试题,看清题目的功能要求。 (2) 通读程序,看懂程序中算法的实现方法。 (3) 细看程序,发现常见错误点。 2.改错题的改错方式总结,当然这些总结只能对大部分改错行有效 1、若错误行是函数首部,可分为以下几种情况: A、该行最后若有分号则删除,中间若有分号则改成逗号 B、形参类型不一致的问题,特别是指针类型,若后面用到某形参时有指针运算则该形参必为指针类型;若形参是二维数组或指向m 个元素的指针变量,则第二维的长度必须与main 中对应数组的第二维长度相同 C、函数类型不一致的问题,若函数中没有return语句则函数类型为void,若有return语句则函数的类型必须与return 后变量的类型一致。 2、若错误行是if 或while 语句,则首先看有没有用小括号将整个表达式括起,若没有则加上小括号。 3、若错误行中有if、while 、for 则要特别注意条件表达式的错误问题: A、指针变量的应用,若表达式中有指针变量且没有指针运算符,则加上指针运算符 B、若条件表达式中只有一个等于号,则改成两个等于号,若为其它比较运算符则一般是进行逆转或加一个等于号 C、f or 中要用分号分隔表达式,而不是用逗号 4、语法错误 A、语句缺少分号,若错误行中有语句没有用分号结束,则加上分号。 B、大小写不对,若错误行中有大写字母则一般都改成小写字母。 5、指针变量的运用,若错误行中有指针变量,并且该变量名前没有指针运算符则一般都是加上指针运算符 6、若错误行为return 语句,则首先看是否是缺少分号若是则加上分号即可;否则就是return 后的变量或表达式错误(此时可通过看题意,来分析该返回哪一变量或表达式)

软件调试技巧

软件调试技巧 一、软件调试方法 软件调试有很多种方法。常用的有4种,即强行排错法、回溯排错法、归纳排错法和演绎排错法。 1.强行排错法 这种方法需要动脑筋动的地方比较少,因此叫强行排错。通常有以下3种表现形式: ●打印内存变量的值。在执行程序时,通过打印内存变量的数值,将该数值同预期的数值进行比较,判 断程序是否执行出错。对于小程序,这种方法很有效。但程序较大时,由于数据量大,逻辑关系复杂,效果较差。 ●在程序关键分支处设置断点,如弹出提示框。这种方法对于弄清多分支程序的流向很有帮助,可以很 快锁定程序出错发生的大概位置范围。 ●使用编程软件的调试工具。通常编程软件的IDE集成开发环境都有调试功能,使用最多的就是单步调 试功能。它可以一步一步地跟踪程序的执行流程,以便发现错误所在。 2.回溯排错法 这是在小程序中常用的一种有效的调试方法。一旦发现了错误,可以先分析错误现象,确定最先发现该错误的位置。然后,人工沿程序的控制流程,追踪源程序代码,直到找到错误根源或确定错误产生的范围。 3.归纳排错法 归纳法是一种从特殊推断一般的系统化思考方法。归纳法调试的基本思想是,从一些线索(错误的现象)着手,通过分析它们之间的关系来找出错误,为此可能需要列出一系列相关的输入,然后看哪些输入数据的运行结果是正确的,哪些输入数据的运行结果有错误,然后加以分析、归纳,最终得出错误原因。 4.演绎排错法 演绎法是一种从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。调试时,首先根据错误现象,设想及枚举出所有可能出错的原因作为假设。然后再使用相关数据进行测试,从中逐个排除不可能正确的假设。最后,再用测试数据验证余下的假设是否是出错的原因。 二、调试的原则 调试能否成功一方面在于方法,另一方面很大程度上取决于个人的经验。但在调试时,通常应该遵循以下一些原则。 1.确定错误的性质和位置的原则 用头脑去分析思考与错误征兆有关的信息,避开死胡同。调试工具只是一种辅助手段。利用调试工具可以帮助思考,但不能代替思考。通常避免使用试探法,最多只能将它当作最后的手段,毕竟小概率事件有时也会发生。 2.修改错误的原则 在出现错误的地方,很可能还有别的错误。修改错误的一个常见失误是只修改了这个错误的征兆或这个错误的表现,而没有修改错误本身。当新修正一个错误的同时又引入新的错误。 三、有效减少调试时间 1.绘制程序流程图 一些程序员认为,绘制程序流程图是件繁琐的事,而且浪费时间。其实不然,当读者对着偌大的程序一筹莫展时,面对纷纭复杂的关系理不出头绪时,使用程序流程图绝对可以事半功倍。 因此建议在编制程序前先绘制流程图,这样编程的思路有条理,调试时同样会有条不紊。若编制程序之前没有绘制流程图,当排错没有进展时,可以马上编写流程图。你会发现,程序中某些分支或细节被忽略了,这些细节可能就是程序出错的地方。 2.不要过多地依赖单步调试 有些程序对时间很敏感。数据只在那么一瞬间有效,可谓稍纵即逝。所以等到单步执行到那里时,

程序调试与常见程序错误

程序调试与常见程序错误 目录 一、在Codeblocks中调试程序 (1) 二、存储路径设置问题 (4) 三、修改Codeblocks的设置 (4) 四、提示程序无法调试问题 (6) 五、常见错误分析 (6) 六、程序出错的三种情况 (18) 七、常用的纠错方式 (19) 一、在Codeblocks中调试程序 1.注意事项 不允许工程路径中含有空格、汉字。 2.在相应行号后面点击鼠标左键设置断点 3.打开W ATCHS窗口

4.点击调试按钮 5.可以再watchs窗口看到自动变量。黄色三角表示程序暂停的位置

6.通过单步运行按钮进行单步运行。 7.也可以在debuger标签,command栏输入调试命令进行单步运行、打印变量值等操作。 8.程序运行

二、存储路径设置问题 1. 如果不是默认安装路径,code blocks 就无法找到编译器和调试器,就会出现此类问题。 解决办法:Settings——Compiler and debugger——Toolchain executables——Auto-detect。 2. 输出信息为“某个命令执行失败或异常终止”。 解决方法:通常是相应的编译器找不到,试着将其所在路径放到path环境变量中去。 3. 输出编译错误,如某某文件找不到之类。 解决方法:在项目中设置选项中加上路径(通常可利用customer variable项)。 4. 在调试程序的时候弹出类似""XYZ - Debug": The compiler's setup (GNU GCC Compiler) is invalid, so Code::Blocks cannot find/run the compiler. Probably the toolchain path within the compiler options is not setup correctly?! Goto "Settings->Compiler and debugger...->Global compiler settings->GNU GCC Compiler->Toolchain executables" and fix the compiler's setup. Skipping... Nothing to be done (all items are up-to-date)."这种警告。 解决方法:这个错误提示已经说得很清楚了, 找不到编译器, 到菜单Settings->Compiler and debugger...->Global compiler settings->GNU GCC Compiler->Toolchain executables下去修复编译选项前提是你已经装了gcc 如过没装, 就去下个包含mingw的codeblocks, (mingw包含gcc编译器); 三、修改Codeblocks的设置 1.

3-2节 程序调试的方法

3-2节程序调试的方法 编程是一件需要认真和细心的工作。通过让学生从李明同学学习程序设计时所遇到的困难和他情感上所表现出来的“窘态”故事开始,道出程序调试不但需要技巧、更需要有耐心和毅力的道理,从而激发学生学习程序调试的兴趣和热情,拉开了本节的充幕。 接着,布置任务,让学生输入课本P83四段有错误的程序,要求学生自己探究,并改正程序。 最后分析程序运行的情况,总结出程序运行出错的四种类型: 一、拼写错误 1)在工程窗口中,看到红色文字显示的程序是有拼写错误的。 2)同时还要检查其它的拼写错误 Pring改为print Integr改为integer 2、编译时出现的错误 S应该改为a 3、运行时出现的错误 运行时的错误是指编译通过后,在执行程序时出现的错误,如用0作除数等。

例如:a=0的时候,将会出现0作除数的情形 4、逻辑错误 程序运行后,得出的结果不是正确的。这说明程序存在逻辑错误。逻辑错误产生 的原因很多,运算符使用不正确、语句次序不对、循环的设置不对等都可以产生 逻辑错误。 如这里的程序的出口应该是tree>=100 任务: P85 马上行动:

你和同学们能解决以上的问题吗?以合作、交流的方式大胆尝试一下,你会有意外的收获! 一、本节小结: 本节主要通过任务驱动、探究的形式,介绍了程序的错误类型,分析了产生错误的原因,程序的调试与排错的方法,让学生“从做中学”,进一步体验了程序调试的方法和技巧,培养了 学生调试程序的耐心和毅力,提高了学生程序设计的素养。 五、课外练习 编写一个程序,将从键盘输入的一个自然数进行因数分解,输出结果并上机验证。

DSP调试及烧写和加载常见错误及分析

Error: Read status value 0x0001 from symbol PRG_status Flash algorithm failed during clear operation 开始可以正常烧写的,但是上机调试了一下就不能写了. 在烧写lf2407内部flash时出现如下错误,不知是什么原因造成的? Error:Read status value 0x0001 from symbol PRG_status Flash algorithm failed during clear operation. 换了一个芯片后正常 之前有一次在试CCS功能时,一不小心点了一次加密,还没有执行完,就马上点了解密,大概这样烧坏了吧! 太脆弱了,再也不敢试加密了 CMD文件要避开FLASH的40H--44H区间, 我也出现过这样的问题,烧写2407A的片内flash时会出现下面的错误提示:Error: Read status value 0x0001 form symbol PRG_status Flash algorithm failed during clear operation 后来换了一块2407就能烧写了。 是不是2407的flash坏了?有没有办法检测或者修复flash? 昨天在网上查了一下,很多人都遇到了这种问题,可能是dsp内部flash烧坏了吧! 今天重新换了一块芯片,可以烧录进去了,但是上拿到样机上调试一下,再烧录就出现了同样的问题,估计又是flash坏了,到底是什么原因引起的?是不是电源引起的呢? 我也出现过能仿真,但不能烧写的情况!解决方法: 解决方法:降低时钟频率。点击FLASH插件上的“View Config File”,打开VAR.h文件。将该文件中的“PLL_PATIO_CONST .Set 0000h”改成 “PLL_PATIO_CONST .Set 0200h”存盘后,执行目录下的Buildall.bat批处理文件。再重新启动CCS及FLASH插件。 请教高手:在烧写程序的时候出现如下错误:Error: Read status value 0x0001 from s ymbol PRG_status Flash algorithm failed during clear operation

应用程序错误该如何调试

explorer exe 应用程序错误该如何调试explorer.exe应用程序错误该如何调试2010-12-24 16:10 原因很多,解释方法不一。下面解释一下这方面的问题,仅供参考: 第一个简单明了的解释: 一是系统程序中病毒而遭到破坏,二是硬件即内存有问题。 解决方法一是自己或请维修人员重装系统程序。 二是用升级后的杀毒软件杀毒修补漏洞后,重启机器。 至于再多的问题就得请电脑维修高手来上门给你维修了。下面的内容是详细解释。第二个解释: 查到下面一些,希望能对你有所帮助。 关于内存不能read,written的解决方案 这种情况偶尔出现,没什么关系,不用管他。点击'取消'就可以了。 经常出现就危险了,弄不好就得重装系统了。 运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。 "0x?"指令引用的"0x?"内存。该内存不能为"read"。 "0x?"指令引用的"0x?"内存,该内存不能为"written"。 一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件 故障分析 硬件方面: 一般来说,内存出现问题的可能性并不大,主要方面是:内存条坏了、内存质量有问题,还有就是2个不同牌子不同容量的内存混插,也比较容易出现不兼容的情况,同时还要注意散热问题,特别是超频后。你可以使用MemTest这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。

假如是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,就要检查是不是内存出问题了或者和其它硬件不兼容。 软件方面: 先简单说说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在其一位置时,因为没有足够空间,就会发生溢出现象。举个例子:一个桶子只能将一斤的水,当放入两斤的水进入时,就会溢出来。而系统则是在屏幕上表现出来。这个问题,经常出现在windows2000和XP系统上,Windows 2000/XP对硬件的要求是很苛刻的,一旦遇到资源死锁、溢出或者类似Windows 98里的非法操作,系统为保持稳定,就会出现上述情况。另外也可能是硬件设备之间的兼容性不好造成的。 几个例子 例一:打开IE浏览器或者没过几分钟就会出现"0x70dcf39f"指令引用的"0x 00000000"内存。该内存不能为"read"。要终止程序,请单击"确定"的信息框,单击"确定"后,又出现"发生内部错误,您正在使用的其中一个窗口即将关闭"的信息框,关闭该提示信息后,IE浏览器也被关闭。 解决方法:修复或升级IE浏览器,同时打上补丁。看过其中一个修复方法是,Win2000自升级,也就是Win2000升级到Win2000,其实这种方法也就是把系统还原到系统初始的状态下。比如你的IE升级到了6.0,自升级后,会被IE5.0代替/运用腾讯浏览器/ 例二:在windows xp下双击光盘里面的"AutoRun.exe"文件,显示"0x77f745cc"指令引用的"0x 00000078"内存。该内存不能为"written",要终止程序,请单击"确定",而在Windows 98里运行却正常。 解决方法:这可能是系统的兼容性问题,winXP的系统,右键"AutoRun.exe"文件,属性,兼容性,把"用兼容模式运行这个程序"项选择上,并选择"Windows 98/Me"。win2000如果打了SP的补丁后,只要开始,运行,输入:regsvr32 c:\winnt\apppatch\slayerui.dll。右键,属性,也会出现兼容性的选项。 例三:RealOne Gold关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现"0xffffffff"指令引用的"0xffffffff"内存。该内存不能为"read"的提示。 解决方法:当使用的输入法为微软拼音输入法2003,并且隐藏语言栏时(不隐藏时没问题)关闭RealOne就会出现这个问题,因此在关闭RealOne之前可以显示语言栏或者将任意其他输入法作为当前输入法来解决这个问题。 例四:我的豪杰超级解霸自从上网后就不能播放了,每次都提示"Ox 060692f6"(每次变化)指令引用的"Oxff 000011"内存不能为"read",终止程序请按确定。

ccs33中建立-编译-调试工程及常见错误讲解.

Part1:ccs3.3中新建一个DM6437的示例工程 1、连接好板子,将板子上仿真器的usb口插到电脑上,启动ccs后,ccs会去获取板子信息并在打开的文件目录中自动生成一个文件,如图所示:笔者使用的是6437的板子 2、用file-new选择建立一个dsp/bios文件 在打开的对话框中选择你使用的板子的型号,如下图: 3、这个时候ccs为我们建立了一个bios文件,以图表显示,里面按照所选板子的类型添加相应的硬件和其他模块。保存这个文件到工程目录下先,文件类型为tcf。 4、保存这个文件的同时,ccs按照bios中的配置在当前目录下自动生成了一个cmd文件。此时将tcf文件和这个cmd文件同时添加到工程中,使用 5、然后需要修改一个编译选项,点击下图所示选项进去:

6、打开后在编译选项对话框总会看到一个命令行,其中最后一句是-mv6400,因为用的是6467的板子,所以这个选项要修改成-mv64+;否则编译会报错:编译选项不正确;但并非所有类型的板子都要改,这个只针对型号为64+的板子。 7、file-new-source file建立一个c源文件,保存并加入到工程中。 以下是示例程序: #include #include #include Int main(Int argc, String argv[])//main函数的类型必须这样写 { unsigned int i; unsigned int sum=0; for(i = 0; i<=100; i++ ) {

sum += i; } printf("the sum = %d .\n",sum); printf("the program run over!\n"); printf("the program run over!\n");} 注意:1)如果想要printf正确输出信息,需要添加对应平台的rts64plus.lib文件。这里是64+平台所以是在C:\CCStudio_v3.3\C6000\cgtools\lib目录下的rts64plus.lib文件,否则ccs 会提示如下警告和错误: >> warning: entry point symbol _c_int00 undefined undefined first referenced symbol in file --------- ---------------- _printf E:\\WorkContent\\projectExample\\Test\\Debug\\test.obj >> error: symbol referencing errors - './Debug/Test.out' not built 2)如果想要printf正确输出信息,cmd文件中必须指定heap的大小,即cmd文件这样写: -c -stack 0x00001000 /* Stack Size */ -heap 0x00001000 /* Heap Size */ //前面这三项必不可少 MEMORY { L2RAM: o = 0x10800000 l = 0x00020000 DDR2: o = 0x80000000 l = 0x10000000 } SECTIONS { .bss > L2RAM .cinit > L2RAM .cio > L2RAM .const > L2RAM .data > L2RAM .far > L2RAM .stack > L2RAM .switch > L2RAM .sysmem > L2RAM .text > L2RAM .ddr2 > DDR2 }

C语言上机程序调试功能键及常见错误提示

C语言上机程序调试功能键及常见错误提示 1.常用健 : 激活系统菜单 : 将光标在编辑窗口和、信息窗口之间切换 : 加载一个文件 +: 查看程序运行结果 : 得到有关编辑器在线帮助 + : 得到有关C语言的在线帮助 +: 终止正在运行的程序 2.块操作 KB: 定义块首 KK: 定义块尾 KV: 块移动 KC: 块复制 KY: 块删除 KH: 取消块定义 3.查找、替换和删除操作 QF: 查找字符串 QA: 查找并替换字符串 Option: G(全程), B(向文件头), N(直接替换) Y : 删除一行 QY: 删除从光标位置到行末的所有字符 4.编译中的常见错误 (1)警告类错误 ?‘XXX’declare but never used变量XXX已定义但从未用过。 ?‘XXX’is assigned a value which is never used变量XXX已赋值但从未用过。?Code has no effect 程序中含有没有实际作用的代码。 ?Non-portable pointer conversion不适当的指针转换,可能是在应该使用指针的 地方用了一个非0的数值。 ?Possible use of ‘XXX’before definition表达式中使用了未赋值的变量 ?Redeclaration of ‘main’一个程序文件中主函数main不止一个。 ?Suspicious pointer conversion可疑的指针转换。通常是使用了基本类型不匹配的指针。 ?Unreachable code程序含有不能执行到的代码。 (2)错误或致命错误 ?Compound statement missing } in function main程序结尾缺少括号}。 ??}?expected;?(?expected等复合语句或数组初始化的结尾缺少?)?;?(?。? Case outside of switch case不属于Switch结构,多由于switch结构中的花括 号不配对所致。 ?Case statement missing ‘:’ switch结构中的某个case之后缺少冒号。 ? Constant expression required定义数组时指定的数组长度不是常量表达式。 ? Declaration syntax error 结构体或联合类型的定义后缺少分号。

PLC程序现场调试的方法

P L C程序现场调试的方法 Prepared on 24 November 2020

PLC程序现场调试的方法——【非常重要】 02-04 16:42更新林慧玲分类:围观:625人次微信二维码 1、要查接线、核对地址 要逐点进行,要确保正确无误。可不带电核对,那就是查线,较麻烦。也可带电查,加上信号后,看电控系统的动作情况是否符合设计的目的。 2、检查模拟量输入输出 看输入输出模块是否正确,工作是否正常。必要时,还可用标准仪器检查输入输出的精度。 3、检查与测试指示灯 控制面板上如有指示灯,应先对应指示灯的显示进行检查。一方面,查看灯坏了没有,另一方面检查逻辑关系是否正确。指示灯是反映系统工作的一面镜子,先调好它,将对进一步调试提供方便。 4、检查手动动作及手动控制逻辑关系 完成了以上调试,继而可进行手动动作及手动控制逻辑关系调试。要查看各个手动控制的输出点,是否有相应的输出以及与输出对应的动作,然后再看,各个手动控制是否能够实现。如有问题,立即解决。 5、半自动工作 如系统可自动工作,那先调半自动工作能否实现。调试时可一步步推进。直至完成整个控制周期。哪个步骤或环节出现问题,就着手解决哪个步骤或环节的问题。 6、自动工作 在完成半自动调试后,可进一步调试自动工作。要多观察几个工作循环,以确保系统能正确无误地连续工作。 7、模拟量调试、参数确定 以上调试的都是逻辑控制的项目。这是系统调试时,首先要调通的。这些调试基本完成后,可着手调试模拟量、脉冲量控制。最主要的是选定合适控制参数。一般讲,这个过程是比较长的。要耐心调,参数也要作多种选择,再从中

选出最优者。有的PLC,它的PID参数可通过自整定获得。但这个自整定过程,也是需要相当的时间才能完成的。 8、完成上述所有的步骤 整个调试基本算是完成了。但最好再进行一些异常条件检查。看看出现异常情况或一些难以避免的非法操作,是否会停机保护或是报警提示。进行异常检查时,一定要充分考虑到设备与人身的安全! 整个调试基本算是完成了。但最好再进行一些异常条件检查。看看出现异常情况或一些难以避免的非法操作,是否会停机保护或是报警提示。进行异常检查时,一定要充分考虑到设备与人身的安全!

C语言程序编辑或调试中常见的错误

常见错误和程序分析 (1)忘记定义变量。例如: void main() { x=3; y=6; printf(“%d\n”,x+y); } C要求对程序中用到的美一个变量都必须定义其类型,上面程序中没有对x,y 进行定义。应在函数体的开头加int x,y; (2)输入输出的数据类型与所用格式说明符不一致。例如,若a已定义为整数,b已定义为实型: a=3;b=4.5; /*对a和b赋值*/ printf(“%f %d\n”,a,b); 编译时不给出出错信息,但运行结果将与原意不符,输出为0.000000 16402它们并不是按照赋值的规则进行转换(如把4.5转换为4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后2个字节中的数据按%d作为整数输出)。 (3)未注意int型的数据的数值范围。Turbo C等编译系统,对一个整型数据分配2个字节。因此一个整数的范围为-2的13次方到2的15次方减1,即-32768~32767常见这样的程序段: int num; num=89101; printf(“%d”,num); 得到的却是23565,原因是89101已超过32767。2个字节容纳不下89101,则将高位截去,即将超过低16位的数截去,也即89101-65536=23565,有时还会出现负数。这种情况应改为: Long int num; num=89101; printf(“%ld”,num); 注意,如果只定义num为long型,而在输出时扔用%d说明符,也会出现以上错误。 (4)在输出语句scanf中忘记使用变量的地址符。例如: scanf(“%d%d”,a,b); 这是很多初学者刚学C语言时常见的疏忽,应写为scanf(“%d%d”,&a,&b); (5)输入数据的形式与要求不符。例如有以下scanf函数: scanf(“%d%d”,&a,&b); 有人输入 3 , 4 ,这是错的数据间应该用空格来分隔,读者可以用printf(“%d%d”,a,b);来验证下。应该输入 3 4,除非函数是scanf(“%d,%d”,&a,&b); 还应注意不能企图用

VB程序调试技巧

一,如果遇到了一些逻辑性很强的问题比如有循环什么的我的方法是在关键地方加入debug.print 变量 这样可以比较好地找到问题 二,msgbox 三,监视窗口,如下面的例子 For i=1 to 10000 A=sqr(i) next i 你想再监视当i=799时A的值,就可以添加监视,方法:点调试,添加监视,选择“当监视值为真时中断”,上面表达式框中写上i=799, 这样你按F5,运行程序,程序会在i=799时中断。其他选项你可以自己去琢磨一下。 一个程序如何顺利的“脱产”,调试的过程是非常重要的。学过、钻研过程序设计的人都有同样的感受,很多情况下,调试程序的过程会比程序编写的过程更为困难。任何一个天才都不敢说,他编的程序是100%正确的。几乎每一个稍微复杂一点的程序都必须经过反复的调试、修改,最终才完成。所以说,程序的调试是编程中的一项重要技术。 程序中的典型错误类型 A类:语法错误。 B类:编译错误。 C类:属性设置错误。 D类:逻辑错误。 调试方法 方法一:利用“MSDN帮助菜单” “MSDN帮助菜单”是一个很好的自学工具,对于出现调试对话框的菜单来说,可以按下“帮助”按钮查看错误原因。 对于一些不是很清楚的函数格式、保留字的作用,也可以借助“帮助菜单”。 方法二:逐过程检查 主要检查代码是否写对,位置有没有错误,关键是要确定一段代码是在哪个事件控制下的。不妨先在脑海中把整个程序过一边,想一想究竟会有哪些事件发生(有些事件是人机互动的,例如:鼠标点击;而有些是机器自己执行的,这时要想到计时器的作用);然后想一想每一件事发生后有什么效果。我们代码所编写的一般就是事件发生后的这个效果,那么以此事件来决定代码所写的位置。 方法三:逐语句检查(顺序、语义) 主要检查每一句代码的顺序是否写对,语义是否正确。 把整个代码从头至尾地读一边,仔细思索每一段子过程什么时候执行,以及每一子过程中的每一句代码什么时候发生,必要时可以在程序段中插入Print语句分段查看;也可用注释语

C语言调试功能以及常见错误提示详解

C语言编译环境中的 调试功能及常见错误提示 调试功能 1.常用健 : 激活系统菜单 : 将光标在编辑窗口和、信息窗口之间切换 : 加载一个文件 + : 查看程序运行结果 : 得到有关编辑器在线帮助 + : 得到有关C语言的在线帮助 + : 终止正在运行的程序 2.块操作 KB: 定义块首 KK: 定义块尾 KV: 块移动 KC: 块复制 KY: 块删除 KH: 取消块定义 3.查找、替换和删除操作 QF: 查找字符串 QA: 查找并替换字符串 Option: G(全程),B(向文件头),N(直接替换) Y : 删除一行 QY: 删除从光标位置到行末的所有字符 编译中的常见错误例析 (1) 警告类错误 …XXX?declare but never used变量XXX已定义但从未用过。 …XXX?is assigned a value which is never used变量XXX已赋值但从未用过。 Code has no effect 程序中含有没有实际作用的代码。 Non-portable pointer conversion不适当的指针转换,可能是在应该 使用指针的地方用了一个非0的数 值。 Possible use of …XXX?before definition表达式中使用了未赋值的变量 Redeclaration of …main?一个程序文件中主函数main不止一个。 Suspicious pointer conversion可疑的指针转换。通常是使用了基本类型不匹配的指针。 Unreachable code程序含有不能执行到的代码。 (2) 错误或致命错误 Compound statement missing } in function main程序结尾缺少括号}。

调试与错误处理

第9章调试与错误处理 一、问答题 1.请思考如何避免错误。 答:1)事先精心设计应用程序,描述清楚相关事件以及代码响应每一事件的方法,为每一事件过程和每个普通过程都指定一个特点的、明确的目标。 2)多加注释。如果用注释说明每个过程的目的,在以后分析代码时,能更深入地理解这些代码。 3)对过程中用到的每个变量或对象都应该在过程开始部分加以定义。 4)在应用程序中对变量和对象提出一种前后一致的命名方案。 2.请简要设计错误处理程序的三个步骤。 答:1)捕获错误,并强制程序跳转 2)编写错误处理程序 3)退出错误处理程序 3.简述常用的程序调试技巧。 答:1)事先做好备份; 2)分离受怀疑的程序; 3)缩小搜索范围; 4)使用MsgBox语句。 4.简要说明VB程序调试的主要方法和工具。 答:VB 程序调试的主要方法:用编译器提示错误;使用调试工具来发现和改正错误;采用常用的调试技巧,如事先做好备份,分离受怀疑的程序,缩小搜索范围,使用MsgBox语句等。 主要工具:“调试”菜单下的“逐语句”、“逐过程”、“跳出”、“运行到光标处”、“添加监视”、“快速监视”、“切换断点”等子菜单项。 5.VB程序错误大体可分为哪几种,它们的含义是什么? 答:VB程序错误大体分为三种:编译错误、实时错误和语法错误。 编译错误是在编写程序时书写了有错误的语法的代码,导致VB编译器无法正确解释源代码而产生的错误,也称语法错误。实时错误是指在运行期间,一跳语句试图执行一条不可能执行的操作而产生的错误,也称运行时错误。逻辑错误是指程序的运行结果和程序员的设想有出入时产生的错误。 6.请说明On Error GoTo 与On Error Resume Next 的区别。 答:On Error GoTo 行标识符语句:当发生错误时,使用该语句强制改变程序的执行方向。而On Error Resume Next 语句:当发生错误时,VB程序将忽略引发错误的语句,并继续执行下一条语句。 二、程序设计题 1.程序改错。以前面学到的冒泡排序算法为例,开发以下程序,请上机练习排除其中的错误。 1

STM 调试过程中常见的问题及解决方法

一、在“Debug选项卡”下设置好仿真器的类型后,下载程序时却提示“No ULINK Device foun d.” 解决办法:Keil MDK默认使用ULINK仿真器下载程序,在“Utilities选项卡”下把编程所使用的仿真器改为相应的类型即可。 二、编译工程时提示如下信息: main.axf: Error: L6218E: Undefined symbol __BASEPRICONFIG (referred from stm32f10 x_nvic.o). main.axf: Error: L6218E: Undefined symbol __GetBASEPRI (referred from stm32f10x_nvi c.o). main.axf: Error: L6218E: Undefined symbol __RESETFAULTMASK (referred from stm32f 10x_nvic.o). main.axf: Error: L6218E: Undefined symbol __RESETPRIMASK (referred from stm32f10x _nvic.o). main.axf: Error: L6218E: Undefined symbol __SETFAULTMASK (referred from stm32f10x _nvic.o). main.axf: Error: L6218E: Undefined symbol __SETPRIMASK (referred from stm32f10x_n vic.o). 解决办法:工程缺少“cortexm3_macro.s”文件,把cortexm3_macro.s和STM3210x.s全部添加到工程即可。 三、调试器不能连接到STM32的问题与解决办法 很多人都碰到过调试器不能连接到STM32的问题,不管是IAR的J-Link还是Keil的ULink,或者是ST的ST-Link。出现这个问题时,调试软件会提示不能建立与Cortex-M3的连接,或提示不能下载程序,或提示找不到要调试的设备等。 这样的问题都是发生在调试那些可以在CPU不干预的时候自动运行的模块、或在调试低功耗模式的程序的时候。所谓“可以在CPU不干预的时候自动运行的模块”包括:DMA、定时器、连续转换模式下的ADC、看门狗等模块。 -------------------------------------------------------------------------------- 这个问题的根源是: 1. 调试器需要在RAM内执行一段程序,对Flash进行擦写操作,如果不停止这些自动运行的模块,它们会干扰程序在RAM中的执行,致使下载失败。比如DMA模块被配置为不停地拷贝一段数据区,而调试器刚好需要使用DMA数据传输的目标区域,这时DMA的操作将会与调试器的操作发生冲突。再比如,如果启动了看门狗而没有执行硬件复位,则在下次调试器需要下载程序时,看门狗超时将触发芯片复位,导致下载操作失败。 2. 低功耗是通过停止CPU的时钟而实现,JTAG调试是通过与CPU的通信实现,停止了C PU的时钟致使调试器会失去与CPU的通信。 --------------------------------------------------------------------------------

程序调试步骤

一、认识调试功能 在组建(build)菜单中,点击开始调试(start debug),在其下级子菜单中,包含了启动调试器运行的各项子命令(如图1所示) 图1 开始调试菜单 各子命令及其功能如下: ?Go:从程序中的当前语句开始执行,直到遇到断点(后面讲)或遇到程序结束。 ?Step Into:控制程序单步执行,并在遇到函数调用时进入函数内部。 ?Run to Cursor:在调试运行程序时,使程序运行到当前光标所在位置时停止,相当于设置了一个临时断点。 二、单步调试代码 利用图1菜单中的Step into功能或按F11键,进入单步调试状态,有一个箭头指向程序的第一行,每按一次F11键,程序再向前执行一行语句,如图2所示。

图2 开始调试后的界面 我们对图2的界面进行观察。 首先,菜单中增加一个调试(debug)菜单,如图中①处,下面是菜单中的部分功能(鼠标浮到上面时,会有提示,请试一试。) ?Step Into(F11):单步调试程序,遇到调用函数时,进入函数内部逐步执行; ?Step Over(F10):也是单步调试程序,遇到调用函数时,并不进入函数内容执行; ?Step Out:调试程序时,从正在执行的某个嵌套结构的内部跳到该结构的外部,常用于知道调用函数中不存在错误的情况; ?Run to Cursor(CTRL-F10):调试程序时,直接运行到插入点处。 其次,和当前正在执行的语句相关的变量,以及其当前的值显示在了②处。 再次,黄色箭头代表了正在执行的位置。 【练习1】 下面,针对求1+2+3+...+100的程序,体验单步执行。步骤: (1)编写如图所示求1+2+3+...+100的程序,排除编译错误; (2)按前述开始单步执行,用“Step Into(F11)”持续执行,在执行过程中,注意观察变量的变化。 ?调试中,要将自己的预期和计算机执行的结果进行比较,当发现不一致,恭喜,问题找到了。

Aleader--AOI-调试步骤与技巧

A l e a d e r--A O I-调试步骤 与技巧 -标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

标准注册与调试步骤 1.标准注册: A.电容: 电容的检测主要是检查其焊点、是否贴有元件和是否错料 电容命名格式是C-元 件大小-数字,eg:如图的 电容c0603-1 选定位框定位,框住 本体,便于找位 0603的元件偏移范围在之间, 若偏移范围过大,会导致测试 过程中框偏移而影响测试 注册时规定其中一个焊盘朝右 为零度,若当时元件不是按如图 所示的放置,则按此键旋转,使 B.电阻: 电阻的标准分两部分作,第一部分是看焊点(如下图图一),每二部分是看丝印(如下图图二),这样既可以检测焊点又可以检测是否错料(丝印检测) 电容命名格式是R-阻值(即本体 上的丝印),若同一块PCB板有大 小不同、阻值相同的元件,则R- 阻值-元件大小 焊点检测时不用滤色功能和调 整对比度、亮度 在上面的选项都选择完后,点 击此按钮,确定注册 图一

丝印的变化较多,若与本体 一起作标准,则影响焊点的 检测,且误判较多,很难调顺, 单独对丝印作标准,可以减 少由于丝印变化而带来的误 偏移范围一般填 作丝印检测时通过滤色可以消除 松香对丝印的影响,调整对比度和 亮度可使白的部分更白黑的更黑, 图二 C.三极管: 三极管的的标准分三部分作,具体步骤如下: ⑴本体和两个脚一起框,主要用来检测两个脚的焊点,加上本体能更好定位,编程时若三极管来料较多,都可以用一个来替换,可以节约编程时间,且在调试时可以不考虑丝印对它的影响,只要看焊点是否完好,而检测错料可以对丝印单独作标准{见第 三极管的命名格式是Q-数字,允 许偏移范围一般在加上极性检测 后能更好地检测元件是否贴反,定 位框定位能更准确找位 不管元件原来在PCB板的 放置如何,注册标准时一定 要将焊盘朝右,按此按钮可 以实现

Visual C++6.0中的调试工具使用及常见错误

C语言常见错误及解决方法 (注:红色粗体是常见的错误,请大家检查自己的程序,并注意尽量不要犯这些常见的错误。其余它体是避免错误的方法和正确的写法) 一、基础知识和数据类型、表达式 1、拼写错误,尤其是include,main,void,float等词。C语言的32个关键字与基本含义如下:double:声明双精度变量或函数 int:声明整型变量或函数 char:声明字符型变量或函数 float:声明浮点型变量或函数 void:声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) auto:声明自动变量一般不使用 struct:声明结构体变量或函数 break:跳出当前循环 else:条件语句否定分支(与if连用) long:声明长整型变量或函数 switch:用于开关语句 case:开关语句分支 enum:声明枚举类型 register:声明积存器变量 typedef:用以给数据类型取别名(当然还有其他作用) extern:声明变量是在其他文件正声明(也可以看做是引用变量) return:子程序返回语句(可以带参数,也看不带参数) union:声明联合数据类型 const:声明只读变量 short:声明短整型变量或函数 unsigned:声明无符号类型变量或函数 continue:结束当前循环,开始下一轮循环 for:一种循环语句(可意会不可言传) signed:生命有符号类型变量或函数 default:开关语句中的“其他”分支 goto:无条件跳转语句 sizeof:计算数据类型长度 volatile:说明变量在程序执行中可被隐含地改变 do:循环语句的循环体 while:循环语句的循环条件 static:声明静态变量 if:条件语句 2、{},[],(),‘’,“”不配对。解决这个问题最好的方法就是每当写这些符号的时候就 先写成一对,然后再在中间加内容。 3、忘记在语句的末尾加分号,或在预处理命令后多加分号。记住:每一个语句的后边都要 加分号,而预处理命令并不是语句,所以不加分号,他们必须每行一条,不能把多个命

相关主题
相关文档 最新文档