如何在jstack输出中显示源行号?

时间:2009-02-22 05:18:52

标签: java debugging concurrency jvm

这是来自正在运行的JVM的jstack输出

"FooThread" prio=10 tid=0x00007f159c2ca000 nid=0x6e21 waiting on condition ..snipped
    java.lang.Thread.State: TIMED_WAITING (sleeping) 
    at java.lang.Thread.sleep(Native Method)
    at com.myco.impl.QueueFooThread.run(Unknown Source)

我希望QueueFooThread中的行号显示为Catalina流程的此框架

 at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1548)

在编译/引导期间我应该怎么做才能启用此功能?感谢

4 个答案:

答案 0 :(得分:3)

这可能不是一个完整的答案,但将-g(调试)选项传递给javac可使调试器(jdb)显示源信息,包括行号。我不确定它是否适合您的情况。

答案 1 :(得分:1)

使用调试选项编译源代码。 E.g。

<javac target="1.5" source="1.5" classpathref="class.path" srcdir="${src}" destdir="${build}" debug="true" encoding="UTF-8"/>

答案 2 :(得分:0)

编译代码时需要启用调试。 注意:对于库,它们必须在编译时启用调试。

答案 3 :(得分:0)

使用调试信息进行编译当然是最好的。但如果它不是你的来源,你总是可以用像jad这样的东西进行反编译。这对行号没有帮助,但是如果你做了一些有根据的猜测,那么它仍然可以用在紧要关头。