debug遇到的问题

合集下载

Keil使用Debug调试模式时出现的几种错误总结

Keil使用Debug调试模式时出现的几种错误总结

Keil使⽤Debug调试模式时出现的⼏种错误总结Keil版本:keil4V4.60调试器:j_link1.在使⽤j-link下载程序时,target options中的debug选项中选择了j-link选项后,出现了J-LINK the connected emulator is a j-link clone问题,然后keil软件⾃⾏关闭。

解决⽅式:⽤SEGGER安装⽬录下的JLinkARM.dll替换掉MDK安装⽬录下的./ARM/Segger/JLinkARM.dll就可以了2.出现了TCK (pin 9) low, but should be high. Please check target。

的错误解决⽅式:⾸先先检查原理图中是不是接错线了(就我⽽⾔,错的实在是太离谱,电源和地接反,⽽且BOOT0引脚完全没有接地),当我将这些个问题解决掉了之后,设置target options->Debug->右上⾓Use->Setting->Debug->Port选择SW选项。

3.在解决第⼆个问题之后,出现了未发现CPU的错误。

解决⽅式:这个问题的解决⽅式是在target options中的Utilities选项中点击Settings在Programming Algorithm选择框内添加芯⽚的类型(就我⽽⾔是STM32F10x 128K的)就⾏。

4.在debug模式下进⾏调试时,发现程序没有从main函数进⾏运⾏,⽽是⼀直在汇编代码BKPT那⾥停下,当点复位时,到了systemInit那⾥解决⽅式:我在⽹上查找资料,⼀般的解决⽅式有以下的⼏种:1).⼯程所在⽬录存在汉字⽬录或⽬录路径过深(由于所⽤软件绝⼤部分为外国软件且可能都是破解版,导致对汉字⽀持较差);实测⼯程汉字⽬录较长(⼤概30个汉字)且⽬录路径较深(7级),导致进⼊调试模式单步执⾏了 2 步,就出现了 IDE 已停⽌⼯作,KEIL崩溃2).KEIL 软件本⾝⼀些必要的配置,即Target Options Configure的Dubug选项下⾯选择Run to main()3).程序中存在的问题,就好⽐上述使⽤了未实现 printf() 函数或未实现的函数、条件宏等;4).硬件问题,当然做个最简单的流⽔灯便能排除。

eclipse调试(debug)弹出错误

eclipse调试(debug)弹出错误

eclipse调试(debug)弹出错误
警告信息:
Cannot connect to VM
com.sun.jdi.connect.TransportTimeoutException
控制台错误信息:
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
ERROR: transport error 202: unable to create socket: winsock error 87
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [../../../src/share/back/debugInit.c:741]
百度了两天都没能解决这个问题,我⼀直都不开防⽕墙的,ping localhost也能连上,神奇的是java6能debug,java7不能debug
刚刚仔细看错误信息,看到⾥⾯有socket这个词,难道debug还需要socket吗?事实确实如此,不管是java project调试,tomcat调试、远程调试都需要socket。

既然跟socket有关,那就是跟⽹络有关。

但是我电脑也能上⽹啊,难道配置不对?抱着这个想法,我打开万能的360断⽹急救箱强⾏恢复⽹络配置,重启机器后就能debug啦~
哟西哟西~。

debug怎么解决方案

debug怎么解决方案

Debug怎么解决方案引言在软件开发过程中,经常会遇到各种bug和错误,这时候就需要进行debug(调试)来定位和解决问题。

本文将介绍一些常见的debug解决方案,帮助开发者更高效地调试和解决问题。

1. 确定问题在开始debug之前,首先需要准确定位问题。

了解用户遇到的问题及如何复现可以帮助开发者更快地找到问题所在。

以下是几种确定问题的常用方法:•复现问题:尽量重现用户遇到的问题,并记录重现步骤和环境信息。

这可以帮助开发者更好地理解问题,并在相同的环境中进行调试。

•日志分析:分析应用程序的日志文件,查找错误信息和异常堆栈,以确定问题的来源。

•版本对比:对比出现问题的版本和之前正常工作的版本,查找引入问题的代码变更。

2. 使用调试工具调试工具是开发者解决问题的有力助手,可以帮助定位问题并提供更多的调试信息。

以下是常用的调试工具:•断点调试器:通过在代码中设置断点,在程序执行到断点时暂停,可以逐步调试并查看变量的值、堆栈信息等。

常用的断点调试器有GDB(C/C++)、pdb(Python)、Xcode(iOS)等。

•日志工具:可用于输出调试信息、错误日志和性能统计等。

常见的日志工具有log4j(Java)、log4net(.NET)、NSLog(Objective-C)等。

•性能分析工具:用于检测应用程序的性能瓶颈和优化建议,例如VisualVM(Java)、Instruments(iOS)。

•网络抓包工具:用于分析网络请求和响应,例如Wireshark、Fiddler 等。

可以帮助开发者定位网络相关的问题。

3. 逐步调试逐步调试是一种常用的调试方法,通过逐行或逐块执行代码,观察程序的行为和输出,以定位问题。

以下是逐步调试的步骤:1.设置断点:选择合适的位置,在代码中设置断点。

断点一般设置在问题所在的代码附近,以便观察其执行情况。

2.启动调试:运行调试模式,让程序在断点处暂停执行。

3.逐步执行:逐行或逐块执行代码,观察变量值的变化、函数调用的顺序等。

Eclipse下Debug时breakpoint报错

Eclipse下Debug时breakpoint报错

Eclipse下Debug时breakpoint报错Eclipse下Debug时弹出错误“Unable to install breakpoint due to missing line number attributes,Modify compiler options to generate line number attributes"遇到这个错误时找到的解答方案汇总:1、使用Ant编译时,未打开debug开关,在写javac 任务时确认debug=true,否则不能调试。

THe settings for the eclipse compiler don't affect the ant build and even if you launch the ant build from within eclipse. ant controls it's own compiler settings.you can tell ant to generate debugging info like this 'javac ... debug="true".../>(我的问题是因为这个原因);2、编译器的设置问题,window->preferences->java->Compiler在compiler起始页,classfile Generation区域中确认已经勾选了All line number attributes to generated class files。

如果已经勾选,从新来一下再Apply一下。

或者从项目层次进行设定,项目属性->java compiler同样在起始页,确定已经勾选Eclipse报的这个错,无非就这两个原因造成的回答2:以前总是被这个问题困绕,也找不到解决的办法,无意间才明白他是怎么回事,这个问题根本原因是:你eclipse里的project 和deploy 到web container(tomcat)里的project对应不起来.解决的办法:从eclipse里redeploy,然后从eclipse里run,或者到web container里先把the project删除,在从eclipse里deploy,然后从eclipse里runEclipse下Debug时弹出错误“Unable to install breakpoint due to missing line number attributes,Modify compiler options to generate line number attributes"遇到这个错误时找到的解答方案汇总:1、使用Ant编译时,未打开debug开关,在写javac 任务时确认debug=true,否则不能调试。

关于QT中printf和Debug造成程序异常情况的说明

关于QT中printf和Debug造成程序异常情况的说明

关于QT中printf和Debug造成程序异常情况的说明我们都知道,在嵌入式图形界面中使用最多的也就是QT了。

但在使用过程中可能会遇到各种各样问题,最近我就遇到一个问题。

想必printf和Debug都使用过很多次了吧。

但是在QT界面里请慎用,还是直奔主题吧!我的开发环境是IMX287开发板。

需要开发一个通讯控制程序。

需要长时间运行。

但我发现我的程序大约在运行8个小时左右界面就会卡死,奇怪的是看门狗却没有复位。

当时以为自己的程序有问题。

查了好几遍都没有找出原因。

后来进过多次测试才发现原来是我程序中的printf导致的。

IMX287默认带有一个图标启动程序,当我把我的程序做成图标程序启动时,发现过几个小时,程序界面就会卡死。

当我用命令行启动时,程序跑了30多个小时还是正常的。

相同的程序,不同的启动方式,造成不同的结果。

唯一区别就是我在程序里加的printf语句在用命令行启动时打印在串口上了。

用图标启动时串口就没有打印出任何东西。

可能原因是printf在通过QT启动时,标准输出对应的应该是LCD,但是printf是无法直接在打印在ARM LCD上的。

所以printf打印的内容一致驻留在linux 的缓冲区内,当数据越来越多就会造成溢出。

然后程序界面就会卡死。

但是看门狗不复位。

此时串口显示如下(前提是用图标启动前已通过串口登陆开发板,如果卡死后再通过串口登陆无法难道下面的打印信息):DMA: 66*4kB 0*8kB 1*16kB 1*32kB 2*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 440kBNormal: 8*4kB 1*8kB 1*16kB 0*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 760kB 289 total pagecache pages0 pages in swap cacheSwap cache stats: add 0, delete 0, find 0/0Free swap = 0kBTotal swap = 0kB16384 pages of RAM359 free pages1486 reserved pages875 slab pages150 pages shared0 pages swap cachedOut of memory: kill process 2171 (start_zylaunche) score 795 or a childKilled process 2193 (framework) vsz:97360kB, anon-rss:49908kB, file-rss:556kB根据提示可以看出是内存什么的不够了啊,而且也kill掉start_zylaunche和framework两个进程了,所以卡死后通过ps命令发现那两个进程都没有了(正常情况下是有的)。

关于DEBUG和RELEASE的一些问题及解决方法

关于DEBUG和RELEASE的一些问题及解决方法

[release][版本][调试]release版本下调试正常运行exe出错 - VC/MFC / 基础类10月 9th, 2010 by adminPosted in VC/MFC | No Comments »我做的一个调用dll的程序,在debug下调试和运行exe都正常在release下调试也正常,但是直接运行release下的exe就会挂掉,请高人指点一下,到底是什么原因。

程序中有调用外部工具执行解压和压缩,因为没有使用多线程,在解压缩的时候会使主框架无响应,在这样的状态下进入调用dll的模块,然后程序执行一半就挂掉了,是不是和解压缩有关呢 ?不会是跟路径有关吧?程序中使用的相对路径???跟路径无关,都是相对路径而且release下调试是通过的,能正常运行得出结果但是,直接执行release下的exe文件就挂掉了,很奇怪运行就挂掉是指,没有响应?程序崩溃?程序直接消失?没有响应的话,是某个地方阻塞掉了,可以根据程序流程来跟踪,看执行到哪里才没响应的.程序崩溃的话,看看提示是什么,再跟踪程序流程.程序直接消失的话,多半是栈溢出了.挂掉的时候attach process一下,再查看堆栈,可以定位出在哪个函数挂掉了。

<<很可能就是路径的问题release调试的时候,可以设置工作目录,其他相对路径都是基于这个工作目录release运行的时候,工作目录应该是其所在的文件夹用几个messagebox调试的看看一定是路径问题!把dll放到release一份看看。

把dll放到release 目录下,再直接运行exe文件试试.- - 路径不正确吧。

一些指针变量未初始化??字节对齐方式不对??在PostMessage或者在SendMessage处查看,我也碰到这问题,就是这么解决的.80%是相对路径,改成绝对路径试试有没有考虑过权限的问题,调试的时候程序是有DEBUG权限的,直接运行是没有这么高的权限+看下库依赖问题 depends<顶一个!<Tags: , release, 版本, 调试[release][版本][VC/MFC]急!!~~release版本出现问题 - VC/MFC / 基础类09月 17th, 2010 by adminPosted in VC/MFC | No Comments »本人的聊天程序在debug的版本下可以顺利发送和接收对方聊天消息,但是在release版本下却出现了严重问题,症状如下:第一次发送消息,对方能正常接收并显示,当第二次发送消息对方接收到消息后,也能显示,但接着程序就出错,按“调试”按钮后就进入一个汇编代码文件,按F5往下运行就弹出“无效的句柄”对话框。

debug info error级别

debug info error级别

在调试过程中,你可能遇到各种不同级别的错误信息。

一般来说,错误级别可以分为以下几种:
1.致命错误(Fatal Error):这种错误通常使程序无法继续运行。

例如,如
果程序在尝试访问一个它没有权限访问的内存地址,就可能会产生这种错误。

2.运行时错误(Runtime Error):这种错误在程序运行时发生,但不会立
即导致程序停止。

例如,除以零错误或数组越界错误就属于这种类型。

3.逻辑错误(Logic Error):这种错误是由于程序的逻辑不正确而导致的。

这可能是由于编程时的错误,或者是因为程序的某个部分没有按照预期的方式工作。

4.编译错误(Compile Error):这种错误在编译时发生,是由于源代码中
存在语法错误或其他问题,导致编译器无法将其转换为可执行代码。

5.运行信息(Run Information):这种信息通常在程序开始运行时或在特
定事件发生时显示。

这可能包括程序的版本信息、系统配置、输入参数等。

这些错误的级别是依次递增的,也就是说,如果一个程序遇到了致命错误,那么它肯定也会遇到运行时错误、逻辑错误和编译错误。

然而,这并不意味着你应该忽视较低级别的错误,因为它们可能是更高级别错误的前兆,或者影响程序的正确运行。

debug怎么解决方案

debug怎么解决方案

debug怎么解决方案在软件开发的过程中,往往难免会遇到各种各样的bug。

这些bug可能导致程序崩溃、功能失效,甚至引发数据丢失等严重后果。

在解决这些bug的过程中,debug成为了程序员日常工作中必不可少的一环。

本文将探讨debug的一些解决方案,帮助程序员更有效地解决bug。

1. 了解问题首先,要解决一个bug,你需要全面了解问题的本质。

这意味着你需要读懂报错信息,分析代码逻辑,找出潜在的问题所在。

有时候,一个看似微小的错误可能隐藏着更深层次的问题。

因此,不要急于找解决方案,而是要花时间仔细分析问题。

2. 分析代码在找到问题的大致方向后,下一步是分析代码。

你可以使用调试器工具,逐行查看代码执行过程,观察变量的值变化和函数调用的顺序。

这有助于你找到代码中的瑕疵,并定位到具体的错误发生点。

3. 添加日志有时候,bug的解决并不是那么直观。

这时,你可以通过添加日志语句来帮助定位问题。

日志可以记录程序执行过程中的关键信息,帮助你了解程序的内部状态。

通过观察日志输出,你可以更容易地跟踪代码的执行情况,找出问题所在。

4. 编写单元测试单元测试是一种有效的debug手段。

通过编写单元测试,你可以在开发过程中模拟各种情况,测试代码的各个部分。

当你发现某个测试用例失败时,就能快速判断出问题所在,然后修复bug。

同时,单元测试也是一种预防bug的手段,通过及时发现问题,减少bug的出现。

5. 团队合作在大型项目中,debug往往不是一个人独立完成的任务。

团队合作是解决bug的重要方式之一。

团队成员可以互相协作,共同分析问题,提供不同的思路和解决方案。

通过集思广益,可以更快地找到解决方案,并保持高效的开发进度。

6. 查看文档和社区当你遇到困难时,不要忘记查阅文档和参与开发者社区的讨论。

文档通常提供了许多关于特定工具和框架的技术细节和常见问题的解决方法。

此外,开发者社区中有着众多经验丰富的开发者,他们可能已经遇到了类似的问题并找到了解决方案。

代码调试中的常见错误与解决方法

代码调试中的常见错误与解决方法

代码调试中的常见错误与解决方法在编写和调试代码的过程中,很容易遇到各种错误和问题。

这些错误可能会导致代码无法正常运行或产生不正确的结果。

本文将介绍一些常见的代码调试错误以及相应的解决方法,以帮助程序员更有效地解决问题。

1. 语法错误语法错误是最常见的问题之一。

它们通常是由拼写错误、缺少或多余的标点符号、未闭合的括号或引号等造成的。

在调试过程中,代码编辑器通常会标记出这些错误,帮助我们快速找到问题所在。

解决方法:- 仔细阅读代码,检查拼写和标点符号是否正确。

- 确保所有的括号和引号都是成对出现的,并且正确地闭合。

- 可以使用代码编辑器的自动格式化功能,帮助我们检查和修复一些常见的语法错误。

2. 逻辑错误逻辑错误会导致代码在运行时产生不正确的结果。

这些错误可能是由于错误的条件判断、错误的算法或逻辑流程造成的。

逻辑错误通常不会被代码编辑器标记出来,因此要找到并修复这些错误可能需要更多的时间和耐心。

解决方法:- 使用调试器(debugger)逐行执行代码,并观察程序的行为,以找到错误所在。

- 根据程序的预期输出和实际输出进行对比,分析可能的错误原因。

- 使用日志输出或打印语句来跟踪程序的执行流程,帮助找出错误出现的位置。

3. 数组越界错误数组越界错误是指访问数组中不存在的索引,或者访问超出数组范围的索引。

这种错误通常会导致程序崩溃或产生不可预知的结果。

解决方法:- 仔细检查数组的大小和索引的范围,确保不会越界访问。

- 在访问数组元素之前,始终检查索引是否有效。

- 使用循环结构来遍历数组,确保循环条件不会导致数组越界。

4. 空指针错误空指针错误是指在访问或操作空指针(null)时发生的错误。

这种错误通常是由于未经过初始化的指针、未分配内存空间或者引用已被释放的对象而导致的。

解决方法:- 在使用指针之前,始终确保指针已被正确初始化,并分配了合适的内存空间。

- 使用条件判断语句来检查指针是否为空,避免在空指针上进行操作。

DEBUG灯常见的错误代码含义如下

DEBUG灯常见的错误代码含义如下

常见的错误代码含义如下:1、“C1”内存读写测试,如果内存没有插上,或者频率太高,会被BIOS认为没有内存条,那么POST就会停留在“C1”处。

2、“0D”表示显卡没有插好或者没有显卡,此时,蜂鸣器也会发出嘟嘟声。

3、“2B”测试磁盘驱动器,软驱或硬盘控制器出现问题,都会显示“2B”。

4、“FF”表示对所有配件的一切检测都通过了。

但如果一开机就显示“FF”,这并不表示系统正常,而是主板的BIOS出现了故障。

导致的原因可能有:CPU没插好,CPU核心电压没调好、CPU频率过高、主板有问题等。

实战DEBUG灯——Award BIOS篇]DEBUG灯的使用也很简单,下面针对几种常见的故障代码和大家讨论一下解决问题的方法。

需说明的是,目前市场上的主板绝大部分使用的是AWARD BIOS或AMI BIOS,由于目前DEBUG 灯实际上是调用了主板BIOS的自检过程,所以主板BIOS程序的不同,DEBUG灯显示的代码也不同,解决问题的方法也不可一概而论。

因此我们也将分两个部分讨论。

以下的说明中将选择最常见的故障代码及解决方法,至于其他更详细的代码含义,请读者参考DEBUG灯的说明手册。

1. Award BIOS篇错误代码:00(FF)代码含义:主板没有正常自检解决方法:这种故障较麻烦,原因可能是主板或CPU没有正常工作。

一般遇到这种情况,可首先将电脑上除CPU外的所有部件全部取下,并检查主板电压、倍频和外频设置是否正确,然后再对CMOS进行放电处理,再开机检测故障是否排除。

如故障依旧,还可将CPU从主板上的插座上取下,仔细清理插座及其周围的灰尘,然后再将CPU安装好,并加以一定的压力,保证CPU与插座接触紧密,再将散热片安装妥当,然后开机测试。

如果故障依旧,则建议更换CPU测试。

另外,主板BIOS损坏也可造成这种现象,必要时可刷新主板BIOS后再试。

错误代码:01代码含义:处理器测试解决方法:说明CPU本身没有通过测试,这时应检查CPU相关设备。

stm32数学debug计算无结果

stm32数学debug计算无结果

stm32数学debug计算无结果(最新版)目录1.STM32 简介2.数学调试的意义3.无结果的原因分析4.解决无结果问题的方法5.总结正文【1.STM32 简介】STM32 是一种基于 ARM Cortex-M 内核的微控制器,广泛应用于嵌入式系统中。

它具有高性能、低功耗、多功能、易扩展等特点,因此深受工程师们喜爱。

【2.数学调试的意义】数学调试,顾名思义,就是在程序开发过程中,对涉及到的数学运算进行检查和调试。

在 STM32 中进行数学调试,可以有效地发现和解决程序中的计算错误,保证程序的正确运行。

【3.无结果的原因分析】在进行 STM32 数学调试时,可能会遇到无结果的情况。

这种情况通常有以下几种可能的原因:(1)算法错误:程序中的数学算法可能出现了逻辑错误,导致计算结果不正确。

(2)数据错误:参与计算的数据可能出现了错误,导致计算结果不准确。

(3)代码实现错误:程序中的代码可能存在语法错误或者运行时错误,导致计算结果无法得出。

(4)硬件故障:STM32 微控制器可能出现了硬件故障,导致计算结果无法正常输出。

【4.解决无结果问题的方法】针对无结果的问题,可以采取以下几种解决方法:(1)检查算法:仔细检查程序中的数学算法,确保其逻辑正确。

(2)检查数据:核对参与计算的数据,确保数据的准确性。

(3)检查代码:审查程序代码,查找可能存在的语法错误或运行时错误,并进行修复。

(4)检查硬件:如果以上方法都无法解决问题,可以考虑是否是硬件故障,需要对 STM32 微控制器进行检查或更换。

【5.总结】在 STM32 数学调试过程中,遇到无结果的情况,需要通过分析原因并采取相应的解决方法,以保证程序的正确运行。

VC-Debug-Release出错的问题解决办法

VC-Debug-Release出错的问题解决办法

DEBUG和RELEASE 版本差异及调试相关问题:I. 内存分配问题1. 变量未初始化。

下面的程序在debug中运行的很好。

thing * search(thing * something)BOOL found;for(int i = 0; i < whatever.GetSize(); i++){if(whatever[i]->field == something->field){ /* found it */found = TRUE;break;} /* found it */}if(found)return whatever[i];elsereturn NULL;而在release中却不行,因为debug中会自动给变量初始化found=FALSE,而在release版中则不会。

所以尽可能的给变量、类或结构初始化。

2. 数据溢出的问题如:char buffer[10];int counter;lstrcpy(buffer, "abcdefghik");在debug版中buffer的NULL覆盖了counter的高位,但是除非counter>16M,什么问题也没有。

但是在release版中,counter可能被放在寄存器中,这样NULL就覆盖了buffer下面的空间,可能就是函数的返回地址,这将导致ACCESS ERROR。

3. DEBUG版和RELEASE版的内存分配方式是不同的。

如果你在DEBUG版中申请ele 为6*sizeof(DWORD)=24bytes,实际上分配给你的是32bytes(debug版以32bytes为单位分配),而在release版,分配给你的就是24bytes(release版以8bytes为单位),所以在debug版中如果你写ele[6],可能不会有什么问题,而在release版中,就有ACCESS VIOLATE。

debug不能运行的原因

debug不能运行的原因

"Debug"不能运行的原因可能有很多,这取决于具体的情况。

以下是一些可能的原因:
代码错误:您的代码可能存在语法错误、逻辑错误或运行时错误。

这些错误可能导致程序无法正常运行。

环境问题:您可能没有正确设置开发环境,例如缺少必要的库、框架或工具。

权限问题:您可能没有足够的权限来运行程序,例如需要管理员权限或特定的操作系统权限。

配置问题:您的程序可能依赖于特定的配置文件或环境变量,如果这些文件或变量没有正确设置,程序可能无法正常运行。

依赖问题:您的程序可能依赖于其他软件或库,如果这些依赖项没有正确安装或配置,程序可能无法正常运行。

网络问题:如果您正在使用网络服务,例如从远程服务器下载代码或上传结果,网络连接问题可能会导致Debug不能运行。

硬件问题:例如,内存不足、硬盘空间不足或处理器过载等问题可能会导致Debug不能运行。

未知错误:有时候程序会因为未知错误而无法运行,这可能需要更深入的调查以确定问题的根本原因。

如果您遇到Debug不能运行的问题,建议您首先检查错误消息或日志以确定问题的原因。

如果无法确定原因,您可以尝试在搜索引擎中搜索错误消息或寻求其他开发人员的帮助以找到解决方案。

DEBUG 使用教程 查错 排错 debug 模式 大全

DEBUG 使用教程  查错 排错 debug 模式 大全

1.项目报错,即eclipse里面项目工程有红叉eclipse中打开Problems视图,window->show view->other->General->Problems通过Problems视图中的错误信息,找到错误源(有可能是java文件,或者(xml,有可能是 1.xml有错;2.含有错误字符(比如从word复制过来);3.假报)buildpath -> eclipse中工程,右键->Build Path-> Configure Build path -> Libraries选项卡察看JRE System Library(引入jdk自带包0),Server Runtime(引入jsp/servlet实现包,比如Apache Tomcat V6.0(这个是window->preferences->server下定义的Runtime Environment对应))Web App Libraries(包含了eclipse中项目工程自带的WEB-INF/lib 下引入的jar包)junit(调试用,不一定需要)User Library(一般eclipse使用者把自己引入的jar包放在一起,定义一个library,在eclipse中引用)2.项目启动,控制台报错察看控制台错误信息可能错误信息包括:1.session factory(可能是hibernate的实体类定义错误), 控制台一般看到dao,sessionFactory,hibernate的关键字eg.Caused by: org.hibernate.PropertyNotFoundException: Could not find a getter for name1 in class demo.ssh2.model.Roleatorg.hibernate.property.BasicPropertyAccessor.createGetter(BasicProperty Accessor.java:306)atorg.hibernate.property.BasicPropertyAccessor.getGetter(BasicPropertyAc cessor.java:299)atorg.hibernate.mapping.Property.getGetter(Property.java:294)atorg.hibernate.tuple.entity.PojoEntityTuplizer.buildPropertyGetter(PojoEnt ityTuplizer.java:300)atorg.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTu plizer.java:141)atorg.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.ja va:78)... 55 more2.bean定义错误,dao,service,action,1.<property name="" ref=""/>中的ref找不到对应的bean的id从sessionfactory->dao->service->action,前面的错误总能导致出后面的错误eg.比如定义了如下spring配置信息<bean id="sessionFactory" ..../><bean id="baseDao" abstract="true" class="demo.ssh2.dao.BaseHibernateDao"><property name="sessionFactory" ref="sessionFactory1" /></bean>控制台报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in file...(备注:此处省略多少字)Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory1' is definedatorg.springframework.beans.factory.support.DefaultListableBeanFactory.g etBeanDefinition(DefaultListableBeanFactory.java:527)atorg.springframework.beans.factory.support.AbstractBeanFactory.getMerg edLocalBeanDefinition(AbstractBeanFactory.java:1083)atorg.springframework.beans.factory.support.AbstractBeanFactory.doGetB ean(AbstractBeanFactory.java:274)atorg.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:190)atorg.springframework.beans.factory.support.BeanDefinitionValueResolver .resolveReference(BeanDefinitionValueResolver.java:322)... 30 more2.setter方法名和spring配置文件中的<property name="" ref=""/>中的name 不匹配eg.比如定义如下:<bean id="roleService" class="demo.ssh2.service.RoleService"><property name="roleDao" ref="roleDao"/></bean>RoleService中roleDao的setter方法如下public void setRoleDao1(RoleDao roleDao) {this.roleDao = roleDao;}方法setRoleDao1和<property name="roleDao" 不匹配控制台报错:Caused by: org.springframework.beans.NotWritablePropertyException:Invalid property 'roleDao' of bean class[demo.ssh2.service.RoleService]:Bean property 'roleDao' is not writable or has an invalid setter method.Did you mean 'roleDao1'?atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWr apperImpl.java:1024)atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWr apperImpl.java:900)atorg.springframework.beans.AbstractPropertyAccessor.setPropertyValues( AbstractPropertyAccessor.java:76)atorg.springframework.beans.AbstractPropertyAccessor.setPropertyValues( AbstractPropertyAccessor.java:58)atorg.springframework.beans.factory.support.AbstractAutowireCapableBea nFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.jav a:1358)... 28 more3.缺少setter方法比如配置<bean id="roleService" class="demo.ssh2.service.RoleService"><property name="roleDao" ref="roleDao"/></bean>在类RoleService中没有定义roleDao的setter方法控制台报错:Caused by: org.springframework.beans.NotWritablePropertyException:Invalid property 'roleDao' of bean class [demo.ssh2.service.RoleService]:Bean property 'roleDao' is not writable or has an invalid setter method.Does the parameter type of the setter match the return type of the getter?atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWr apperImpl.java:1024)atorg.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWr apperImpl.java:900)atorg.springframework.beans.AbstractPropertyAccessor.setPropertyValues( AbstractPropertyAccessor.java:76)atorg.springframework.beans.AbstractPropertyAccessor.setPropertyValues( AbstractPropertyAccessor.java:58)atorg.springframework.beans.factory.support.AbstractAutowireCapableBea nFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.jav a:1358)... 28 more3.eclipse缓存问题,更改了文件,部署到web server中的文件仍然旧的servers视图中,先停止server,然后删除servereclipse中点击项目工程,Project->clean->最上面选中Clean Projects selected below->点击ok3.项目运行,控制台报错察看控制台错误信息可能错误信息包括:1.jdbc配置错误(数据库url,用户名,密码)比如jdbc配置文件错误,将ername=root修改为ername=root1页面报错如下:org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection 控制台报错如下:2013-11-20 09:39:25,441 [org.hibernate.util.JDBCExceptionReporter]-[ERROR] Cannot create PoolableConnectionFactory (Access denied for user 'root1'@'localhost' (using password: YES))2.页面访问不到404或页面有异常信息根据访问的url里面的action,找到Action类对应的方法,打个断点(打在方法体内的代码块的第一行)如果不能进入debug视图,表示struts.xml配置文件有问题,页面输入url中的action找不到对应的Action类eg.比如将strus.xml配置名为<action name="role/list",页面访问role/list1.acito页面报错:ng.NoSuchMethodException:demo.ssh2.action.RoleAction.list1()ng.Class.getMethod(Class.java:1605)如果能进入debug视图,表示struts.xml配置文件没有问题,1.一般控制台会有异常栈错误信息eg.比如RoleAction有如下方法public String list(){List<?> list = roleService.getList();ActionContext.getContext().put("roles", list);return "list";}RoleService中getList方法如下public List<?> getList(){throw new RuntimeException();}页面报错:ng.RuntimeExceptiondemo.ssh2.service.RoleService.getList(RoleService.java:13)2.struts2标签或jstl标签使用错误3.页面不能显示出数据,1.action中私有实体类属性没有gettter/setter方法,或者没有使用request.setAttribute,或者使用ActionContext.getContext().put,传值2.struts2标签或jstl标签使用不对,但页面不报错。

T100 DEBUG报错说明

T100 DEBUG报错说明

具体sqlcode代码:0:成功-1:失败100:没有检索到数据sqlcode<>0通常不出现这个错误。

这是你的虚拟内存耗尽的标志。

-200, Unsupported type %s on line %d.通常不出现这个错误.这表明预编译器生成了一些库(函数)不认得的东西.可能你运行的预编译器和当前库不兼容.-201, Too many arguments line %d.这意味着Postgres 返回了比我们的匹配变量更多的参数.可能你漏了几个INTO :var1,:var2-列表里的宿主变量.-202, Too few arguments line %d.这意味着Postgres 返回了比我们的对应宿主变量要少的参数.可能你多输入了几个INTO :var1,:var2-列表里的宿主变量.-203, Too many matches line %d.着意味着查询返回了多个行,但你声明的变量不是数组.你执行的SELECT 可能不是唯一的.-204, Not correctly formatted int type: %s line %d.着意味着宿主变量是一个int 类型并且Postgres 数据库里的字段是另一种类型,包含着一个不能转换成一个int 类型的数值.库(函数)使用strtol 做此类转换.-205, Not correctly formatted unsigned type: %s line %d.着意味着宿主变量是一个unsigned int(无符号整数)类型而Postgres 数据库里的字段是另外一种类型并且包含一个不能转换成unsigned int 的数值.库(函数)使用strtoul 做这类转换.-206, Not correctly formatted floating point type: %s line % d.着意味着宿主变量是一个float (浮点)类型而Postgres 数据库里的字段是另外一种类型并且包含一个不能转换成float 的数值.库(函数)使用strtod 做这类转换.-207, Unable to convert %s to bool on line %d.这意味着宿主变量是一个bool (布尔)类型,而Postgres 数据库里的字段值既不是't' 也不是'f'。

Arthas在线上debug中解决的10个问题

Arthas在线上debug中解决的10个问题

Arthas在线上debug中解决的10个问题当你遇到以下类似问题⽽束⼿⽆策时,Arthas可以帮助你解决:1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?使⽤sc命令可以查看指定类的详细信息,包括从哪个jar包加载。

sc *.OfficeListService -d?分⽀搞错了??2. 我改的代码为什么没有执⾏到?难道是我没 commit?分⽀搞错了如果需要确认当前运⾏的代码,可以通过jad命令,反编译出代码。

jad *.OfficeListService queryOfficeUser3. 遇到问题⽆法在线上 debug,难道只能通过加⽇志再重新发布吗?arthas有⼀系列命令可以对线上代码进⾏监测。

启动监测后,每当⽅法被调⽤就会输出监测的相关数据。

watch命令:对指定⽅法进⾏数据观测,包括⼊参、返回值和抛出异常。

watch *.FormController queryApplyDataDetail -f {params,returnObj} -x2monitor命令:统计指定⽅法的调⽤情况,调⽤次数、成功次数、平均执⾏时间等monitor -c 5 *.DashboardMetaController queryListstack命令:输出指定⽅法被调⽤的路径。

stack *.FormDataService queryDataDetail4. debug时,想在代码中添加⽇志,但为⼀⾏⽇志代码重新发布太⿇烦了。

arthas⽀持代码热更新,不需要项⽬重新发布,只修改需要的代码,编译后就可以替换线上正在运⾏的类。

⽐如现在线上运⾏的getVersion接⼝,现在要修改成返回”arthas_test_version”。

⽤jad命令反编译出接⼝所在类的代码,输出成⽂件。

jad --source-only com.****.system.rest.system.sys.SysConfigController > ~/arthas_test/SysConfigController.java修改输出的代码。

stm32数学debug计算无结果

stm32数学debug计算无结果

stm32数学debug计算无结果
出现这种情况可能有以下几个原因:
1. 代码逻辑错误:请检查你的代码逻辑是否正确,是否漏掉了某些处理步骤或者条件判断。

2. 变量类型错误:在进行数学计算时,确保变量类型正确,例如使用浮点数计算时,变量类型应该为float或者double。

3. 调用函数错误:检查你调用的数学函数是否正确,函数名称、参数以及返回值类型等都需要正确。

4. 编译器设置问题:某些编译器可能需要特定的设置才能正确进行数学计算,例如启用浮点数支持或优化选项等,请检查你的编译器设置。

5. 显式类型转换问题:如果你在进行变量类型转换时没有做好显式类型转换,可能会导致计算结果不符合预期,请确保你进行适当的显式类型转换。

如果以上方法都不能解决问题,建议检查你的硬件连接以及调试工具是否正常。

如果问题仍然存在,你可以提供更多的代码细节或者错误信息,以便我们能够更具体地帮助你解决问题。

idea debug窗口消失不见的解决方法

idea debug窗口消失不见的解决方法

在软件开发过程中,idea debug窗口的消失或不见是一个常见的问题,它可能会给开发人员带来困扰。

今天我们将探讨这个问题,并共享一些解决方法。

1. 问题的深度和广度评估idea debug窗口消失的问题可能涉及到软件的版本、配置、插件、操作系统等多个方面。

我们需要从多个角度对这个问题进行评估,以便全面了解并解决这个问题。

2. 解决方法2.1 检查配置我们可以检查idea的配置,确保debug窗口未被意外关闭。

可以在设置选项中查看debug窗口的配置,确认是否有误操作导致了窗口消失。

2.2 检查插件有时,idea的插件也可能会影响debug窗口的显示。

我们可以尝试禁用一些插件,然后重新打开debug模式,看看是否能够解决问题。

2.3 检查操作系统操作系统也可能会对debug窗口的显示产生影响。

我们可以检查操作系统的更新情况,以确保系统的稳定性和兼容性。

另外,还可以尝试在其他操作系统中运行idea,看看是否能够复现问题。

3. 总结和回顾debug窗口消失的问题可能涉及到多个因素,解决起来可能并不容易。

通过深度和广度的评估,我们可以更全面地了解并解决这个问题。

在实际操作中,我们还需要不断尝试不同的解决方法,直到找到最适合的方案。

4. 个人观点和理解在解决技术问题时,我认为深度和广度的评估非常重要。

只有全面地了解问题的各个方面,我们才能够找到最合适的解决方法。

不怕尝试和失败也是很重要的,这样才能够不断积累经验,找到最终的解决方案。

以上就是关于idea debug窗口消失不见的解决方法的一些讨论和共享,希望能对大家有所帮助。

对于这个问题,还请大家多加思考和探讨,相信会有更多有价值的解决方法出现。

在软件开发过程中,debug窗口的重要性不言而喻。

它提供了开发人员对代码进行调试和分析的关键工具,当debug窗口消失或不见时,会给开发人员带来不小的困扰。

问题的深度和广度评估当遇到debug窗口消失的问题时,首先需要全面评估问题的深度和广度。

关于DEBUG和RELEASE的一些问题及解决方法

关于DEBUG和RELEASE的一些问题及解决方法

[release][版本][调试]release版本下调试正常运行exe出错 - VC/MFC / 基础类10月 9th, 2010 by adminPosted in VC/MFC | No Comments »我做的一个调用dll的程序,在debug下调试和运行exe都正常在release下调试也正常,但是直接运行release下的exe就会挂掉,请高人指点一下,到底是什么原因。

程序中有调用外部工具执行解压和压缩,因为没有使用多线程,在解压缩的时候会使主框架无响应,在这样的状态下进入调用dll的模块,然后程序执行一半就挂掉了,是不是和解压缩有关呢 ?不会是跟路径有关吧?程序中使用的相对路径???跟路径无关,都是相对路径而且release下调试是通过的,能正常运行得出结果但是,直接执行release下的exe文件就挂掉了,很奇怪运行就挂掉是指,没有响应?程序崩溃?程序直接消失?没有响应的话,是某个地方阻塞掉了,可以根据程序流程来跟踪,看执行到哪里才没响应的.程序崩溃的话,看看提示是什么,再跟踪程序流程.程序直接消失的话,多半是栈溢出了.挂掉的时候attach process一下,再查看堆栈,可以定位出在哪个函数挂掉了。

<<很可能就是路径的问题release调试的时候,可以设置工作目录,其他相对路径都是基于这个工作目录release运行的时候,工作目录应该是其所在的文件夹用几个messagebox调试的看看一定是路径问题!把dll放到release一份看看。

把dll放到release 目录下,再直接运行exe文件试试.- - 路径不正确吧。

一些指针变量未初始化??字节对齐方式不对??在PostMessage或者在SendMessage处查看,我也碰到这问题,就是这么解决的.80%是相对路径,改成绝对路径试试有没有考虑过权限的问题,调试的时候程序是有DEBUG权限的,直接运行是没有这么高的权限+看下库依赖问题 depends<顶一个!<Tags: , release, 版本, 调试[release][版本][VC/MFC]急!!~~release版本出现问题 - VC/MFC / 基础类09月 17th, 2010 by adminPosted in VC/MFC | No Comments »本人的聊天程序在debug的版本下可以顺利发送和接收对方聊天消息,但是在release版本下却出现了严重问题,症状如下:第一次发送消息,对方能正常接收并显示,当第二次发送消息对方接收到消息后,也能显示,但接着程序就出错,按“调试”按钮后就进入一个汇编代码文件,按F5往下运行就弹出“无效的句柄”对话框。

关于Pycharm无法debug问题的总结

关于Pycharm无法debug问题的总结

关于Pycharm⽆法debug问题的总结
问题描述:在Pycharm中写python时可以运⾏程序却突然不能debug。

出现debug提⽰——pydev debugger: process XXXX is connecting,但是之后却⼀直处于等待连接状态⽽报错。

与该错误相关的⽹上的解决⽅案:
解决⽅案⼀:Pycharm的⽹络被禁,需要解禁⽹络。

解决⽅案⼆:去掉 ".idea"⽂件重启项⽬
尝试了所有的⽅案后还是不能解决我的问题,突然发现众多报错信息中有⼀个AttributeError: 'Queue' object has no attribute 'put'。

难道和我⾃⼰写的queue.py⽂件中的Queue类有关?
更改了queue.py的⽂件名后问题解决!
原因⼤概是⾃⼰创建的queue.py⽂件代替了python3中⾃带的同名⽂件被调试程序调⽤⽽出错。

以上这篇关于Pycharm⽆法debug问题的总结就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

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

关于CLOSE BY CLIENT STACK TRACE程序正常运行,数据库连接可以获取,一些列操作都可以实现,可在debug信息中总会一段时间就报如下错误:ng.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE atcom.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooled Connection.java:566)atcom.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooled Connection.java:234)atcom.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledCon nectionResourcePoolManager.destroyResource(C3P0PooledConnecti onPool.java:470)atcom.mchange.v2.resourcepool.BasicResourcePool$1DestroyResource Task.run(BasicResourcePool.java:964)atcom.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThrea d.run(ThreadPoolAsynchronousRunner.java:547)跟踪错误代码,发现是c3p0内部的异常输出(红色部分)C3p0相关源码:com.mchange.v2.c3p0.impl. NewPooledConnectionpublic synchronized void close() throws SQLException { close( null ); }private void close( Throwable cause ) throws SQLException { close( cause, false ); }private void close( Throwable cause, boolean forced ) throws SQLException{。

if ( cause == null ){this .invalidatingException = NORMAL_CLOSE_PLACEHOLDER;if ( Debug.DEBUG&& logger.isLoggable( MLevel.FINEST ) ) logger.log( MLevel.FINEST, this + " closed by a client.", new Exception("DEBUG -- CLOSE BY CLIENT STACK TRACE") );logCloseExceptions( null , closeExceptions );if (closeExceptions.size() > 0)throw new SQLException("Some resources failed to close properly while closing " + this );}else{this .invalidatingException = cause;if (Debug.TRACE> = Debug.TRACE_MED) logCloseExceptions( cause, closeExceptions );elselogCloseExceptions( cause, null );}}}为何会有这样的错误,一头雾水。

看了下配置文件,觉得可能是automaticTestTable配置引起的,将其注释掉,再运行,发现错误不再出现。

看了下关于automaticTestTable的作用:由于Mysql服务器默认的wait_timeout是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。

然而在C3P0 pools中的connections如果空闲超过8小时,Mysql将其断开,而C3P0并不知道该connection已经失效,如果这时有Client请求connection,C3P0将该失效的Connection提供给Client,将会造成异常。

解决方法可为:1.jdbcUrl上面加一个autoReconnect=true2.由于autoReconnect=true 在新的connector/J版本里面已经deprecated了,文档里面建议不要使用。

所以配置参数idleConnectionTestPeriod,automaticTestTable而配置automaticTestTable却会报CLOSE BY CLIENT STACK TRACE,故选择配置preferredTestQuery而不是automaticTestTable。

以上只是在使用c3p0是发现的问题,不知道是否理解正确,不过其正真原因到目前还是弄不清楚,望解答!补充:今天在/xhr8334/blog/item/cf15d1a6deb235fc9052ee9b .html看到一个见解:(引用主题内容)我看到那个DEBUG,我说,是调试信息,修改一下LOG4J的等级就行了。

这个群友很不解的问,既然成功了,干嘛还要丢异常出来?这里就不得不说到两个商业开发的原则问题了。

第一,对上家传入数据严加过滤,对传出给下家的数据仔细检查。

第二,合理使用异常。

第一点其实很简单的。

也就是模块化开发的一个思想问题。

对自己的行为负责。

前端返回的数据究竟是什么,需要进行校验。

不合格的剔除或者是修正。

合格的处理完后,在传出之前也要加以校验,是否合格。

具体到这个问题里,就是来自Spring关于数据源的那个配置文件。

<bean id="dataSource"class="boPooledDataS ource" destroy-method="close">//略去数据源相关信息的配置</bean>这个配置文件里,有两个信息是很管用的。

一个是class,一个是destroy-method。

简单点说,一个是数据源的实现类,一个是析构方法。

Spring在读取这个配置文件以后,需要根据这些信息来实例化一些类,然后内部再根据中间的那些配置信息来实际构造数据源。

比如username啥的。

可是来了个问题。

不能保证这里的ComboPooledDataSource数据源一定是可用的,也不能保证close方法一定能关闭连接,对吧?Spring 本身不能检查这个类是否真实有效,毫无Bug。

实际上呢,也检查不了。

同样的,close方法是否有效,也需要进行检查。

这就是我刚才说的,对上家数据的严加检查。

那好吧,怎么检查呢?最简洁的方法莫过于实际构造一下,连接池,获取数据库连接,执行一个测试语句,然后关闭连接。

如果一切都成功,那就OK。

关于那个测试语句,配置过WebSphere数据源的同学们还记得不?有个SQL语句会默认的写在数据源配置里,是" SELECT 1 FROM TABLE "。

嗯,对的,这个就是测试语句。

这一套流程能走得通,走的顺,那么就可以在自己能力范围内说这个数据源和连接池是能用的,对吧?这里补充一个知识。

java.sql.Connection,这玩意不是class,是interface。

声明是:public interface Connection extends Wrapper 。

任何一个JDBC数据库连接的实现类都应该实现这个接口的全部方法。

比如,close。

API里的描述是,立即释放此Connection对象的数据库和JDBC 资源,而不是等待它们被自动释放。

熟悉Java的同学们应该记得一点,在规范里有个要求,就是接口的实现类必须实现接口的所有方法。

但是呢,这句话还有个意思,那就是,你可以在实现所有方法之外,再写几个方法。

没人会管你。

啊哈,那就有疑问了。

虽然API规定了close是关闭连接释放资源的。

但这只是你接口的一厢情愿。

也许人家实现厂家觉得close方法不够帅,要改成closeConnection。

那。

Spring总不好傻傻的去死扣close方法来关闭连接吧?虽然这方法必须实现,但是可没说一定要有内容啊。

如果是空方法呢?所以有了destroy-method这个配置项的出现。

Spring 说,不碍的,您老人家看哪个爽,告诉我就行。

现在测试完了。

一切都成功了。

现在来看看第二个问题。

合理使用异常。

又遇到一个问题。

既然测试成功了,那总得给用户一点交待吧?难道说,测试成功了,就闷声大发财了?显然不合适嘛。

可以试想一下,你是程序员,然后点了个按钮,测试。

结果呢,实际上是测试成功了,但是系统啥动静都不给你。

然后你傻傻的等痴痴的盼,一直等到天荒地老……嗯嗯,扯的有点远。

如果你等一个小时还不见动静,活不见人死不见尸的,你说你会不会骂娘?那么怎么通知才能保证一定有效呢?println?这个不见得一定能看到。

因为别人也可能在同时输出信息,一下就刷掉了。

那么有同学说了,最好是能暂停一下,我输出以后,就暂停了,不动了。

嗯,很好。

大家想想看,输出一大堆东西,然后此程序不动了,不继续执行了,这是啥玩意?这不就是异常嘛!只有异常能保证程序员一定能看到这个信息,比如,测试成功。

这就是为什么Spring要采用这种方式来通知的原因。

这里呢,我想更正同学们一个习惯成自然的想法。

异常不一定是通知坏消息的。

异常就是异常,只要你愿意,你甚至可以在代码执行成功的时候,throws一个Exception。

异常只不过是比较激烈的一种通知方式而已。

无他,仅此而已。

现在又有个问题来了。

既然要测试,而且每次执行到此处的时候都要测试一下。

那么……难道都卡在这里不走了啊?显然更不合适啊。

熟悉log4J的同学应该看出来了,这是log4J输出的日志。

很明显的,这种日志只应当在开发期间存在,不应该在发布期间存在。

因为开发期间数据库变动很大,比如改表啊,改数据库配置啊。

所以需要通知用户是否成功。

但是产品一旦开发完毕,正式发布,这种信息就不应再出现,因为商业化运作的应用不允许乱动配置的,对不?所以log4J提供了一种方法。

消息级别。

INFO的时候,是看不到这个异常的。

实现起来也很好办,catch了,然后不做任何处理,也就是空的catch块。

相关文档
最新文档