gpt4 book ai didi

java - 异常发现得太早

转载 作者:行者123 更新时间:2023-12-02 08:31:08 25 4
gpt4 key购买 nike

背景:Hibernate 使用在 GUI 中输入的用户名和密码连接到数据库。失败时,错误不会作为异常向上传播,而是会在记录器中以堆栈跟踪的形式出现。我不知道异常是在哪里捕获的。另外一个有点麻烦的是以下 block :

if (reason != null)    {
println("getConnection failed: " + reason);
throw reason;
}

我的断点设置在抛出行(并成功触发),但 println 语句永远不会生成输出(MySQL 正在使用某种记录器设置,我找不到打开的文件手)。有什么技巧可以定位捕获异常的位置吗?

编辑1:

我打电话

sessionFactory = /*AnnotationConfiguration*/ ac.buildSessionFactory();

Hibernate 在 java.sql.DriverManager 类和我的 HibernateUtil 类之间的某个位置捕获了该异常。我想我们可以责怪 Hibernate 决定我真的不想看到异常。我想说服 hibernate 让我看到异常。

编辑2:

我的堆栈是这样的:

java.sql.SQLException: Access denied for user 'user'@'machine' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3923)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1273)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
/* Exception is thrown on the next line (1st code block in original post). */
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
/* Begin hidden source calls */
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:110)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
/* End hidden source calls */
at com.****.****.util.HibernateUtil.initialize(HibernateUtil.java:34)

我无法让调试器查看除 DriverManager.java:582 之外的堆栈上方的任何点。堆栈中除此之外的所有内容在调试器中都不可见。

最佳答案

首先,正如您提到的有一个记录器,您应该将所有 println 语句替换为日志调用。

您还可以添加更多日志消息来识别应用内发生的情况。或者(或与上述结合),您可以单步执行调试器中的关键代码部分,以查看异常实际发生的位置。

关于java - 异常发现得太早,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3345319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com