V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jeffh
V2EX  ›  程序员

Java 调用链跟踪源码求助

  •  
  •   jeffh · Apr 21, 2020 · 3389 views
    This topic created in 2201 days ago, the information mentioned may be changed or developed.
    项目使用的是 Hibernate,我想看看当我执行 SQL 时 Hibernate 具体执行了它自身的哪些代码,我想跟踪源码看看,是否有工具可以看到它执行过程的调用栈呢?感谢。
    20 replies    2020-04-22 12:56:54 +08:00
    monkeyWie
        1
    monkeyWie  
       Apr 21, 2020
    打个断点不就看到了吗
    jeffh
        2
    jeffh  
    OP
       Apr 21, 2020
    @monkeyWie 不知道在 Hibernate 源码中的哪个地方打断点
    royan
        3
    royan  
       Apr 21, 2020
    祝早日脱离 hibernate 的苦海
    340244120w
        4
    340244120w  
       Apr 21, 2020
    @jeffh #2
    在你业务查询代码里打个断点,到断点的时候,仔细看 idea 的 debug 窗口里所有 tab 。。。
    jeffh
        5
    jeffh  
    OP
       Apr 21, 2020
    @340244120w 这个时候调用栈还没到 hibernate 里面
    guyeu
        6
    guyeu  
       Apr 21, 2020
    @jeffh #5 然后一行一行跟,它总能走进去的
    340244120w
        7
    340244120w  
       Apr 21, 2020
    用 xrebel 吧
    jeffh
        8
    jeffh  
    OP
       Apr 21, 2020
    @guyeu 我试过,按住 F7 不放,半天了都没进去,所以才来求助,(哭
    zhaorunze
        9
    zhaorunze  
       Apr 21, 2020
    先抛异常,然后在异常所在文件的函数上面打断点。当然如果没有异常当我没说,或者可以认为的制造异常,然后抛异常的位置,大概就是关键代码位置。
    ic2y
        10
    ic2y  
       Apr 21, 2020
    @jeffh 直接在 jdbc 的 jar 包打断点,让线程停住,然后回头看调用栈。看看上下文是怎么做 ORM 处理的。
    ic2y
        11
    ic2y  
       Apr 21, 2020
    例如,com.mysql.jdbc.StatementImpl 的 executeQuery 方法,这种底层 jdbc 的 查询和 execute 方法,打上断点,然后做一些业务操作,静静等待断点到来
    aitaii
        12
    aitaii  
       Apr 21, 2020 via Android
    断电看调用栈
    aitaii
        13
    aitaii  
       Apr 21, 2020 via Android
    @aitaii 断点
    jeffh
        14
    jeffh  
    OP
       Apr 21, 2020
    @340244120w 貌似不是我想要的
    ilumer
        15
    ilumer  
       Apr 22, 2020
    故意抛出异常,然后跟着堆栈走
    scemsjyd
        16
    scemsjyd  
       Apr 22, 2020 via Android
    arthas 可以看调用栈,不过没有直接本地 debug 来的快
    THESDZ
        17
    THESDZ  
       Apr 22, 2020
    是不是看似没进去,实际使用了反射,然后你跳过了?
    itechify
        18
    itechify  
    PRO
       Apr 22, 2020 via Android
    呆呆的办法~

    ```java
    public void test(){
    A a = aDao.save(new A());
    // 断点下一行
    sout("断点这一行然后看调用栈找到你需要的断点入口再断点");
    }
    ```
    340244120w
        19
    340244120w  
       Apr 22, 2020
    @jeffh #14 xrebel 能看到 sql 语句到 controller 的所有栈信息,不就是你要的么。。你用了就知道了
    zek
        20
    zek  
       Apr 22, 2020
    试试 java Agent
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1284 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 16:59 · PVG 00:59 · LAX 09:59 · JFK 12:59
    ♥ Do have faith in what you're doing.