Java 调用链跟踪源码求助

2020-04-21 17:49:18 +08:00
 jeffh
项目使用的是 Hibernate,我想看看当我执行 SQL 时 Hibernate 具体执行了它自身的哪些代码,我想跟踪源码看看,是否有工具可以看到它执行过程的调用栈呢?感谢。
2687 次点击
所在节点    程序员
20 条回复
monkeyWie
2020-04-21 17:52:32 +08:00
打个断点不就看到了吗
jeffh
2020-04-21 18:03:25 +08:00
@monkeyWie 不知道在 Hibernate 源码中的哪个地方打断点
royan
2020-04-21 18:03:41 +08:00
祝早日脱离 hibernate 的苦海
340244120w
2020-04-21 18:15:52 +08:00
@jeffh #2
在你业务查询代码里打个断点,到断点的时候,仔细看 idea 的 debug 窗口里所有 tab 。。。
jeffh
2020-04-21 18:16:50 +08:00
@340244120w 这个时候调用栈还没到 hibernate 里面
guyeu
2020-04-21 18:32:18 +08:00
@jeffh #5 然后一行一行跟,它总能走进去的
340244120w
2020-04-21 18:34:35 +08:00
用 xrebel 吧
jeffh
2020-04-21 18:45:43 +08:00
@guyeu 我试过,按住 F7 不放,半天了都没进去,所以才来求助,(哭
zhaorunze
2020-04-21 19:10:14 +08:00
先抛异常,然后在异常所在文件的函数上面打断点。当然如果没有异常当我没说,或者可以认为的制造异常,然后抛异常的位置,大概就是关键代码位置。
ic2y
2020-04-21 19:19:06 +08:00
@jeffh 直接在 jdbc 的 jar 包打断点,让线程停住,然后回头看调用栈。看看上下文是怎么做 ORM 处理的。
ic2y
2020-04-21 19:22:40 +08:00
例如,com.mysql.jdbc.StatementImpl 的 executeQuery 方法,这种底层 jdbc 的 查询和 execute 方法,打上断点,然后做一些业务操作,静静等待断点到来
aitaii
2020-04-21 20:11:48 +08:00
断电看调用栈
aitaii
2020-04-21 20:12:03 +08:00
@aitaii 断点
jeffh
2020-04-21 21:33:57 +08:00
@340244120w 貌似不是我想要的
ilumer
2020-04-22 00:29:28 +08:00
故意抛出异常,然后跟着堆栈走
scemsjyd
2020-04-22 08:12:30 +08:00
arthas 可以看调用栈,不过没有直接本地 debug 来的快
THESDZ
2020-04-22 09:03:58 +08:00
是不是看似没进去,实际使用了反射,然后你跳过了?
oneisall8955
2020-04-22 09:09:58 +08:00
呆呆的办法~

```java
public void test(){
A a = aDao.save(new A());
// 断点下一行
sout("断点这一行然后看调用栈找到你需要的断点入口再断点");
}
```
340244120w
2020-04-22 10:48:13 +08:00
@jeffh #14 xrebel 能看到 sql 语句到 controller 的所有栈信息,不就是你要的么。。你用了就知道了
zek
2020-04-22 12:56:54 +08:00
试试 java Agent

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/664728

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX