【问题标题】:Tracing the execution of a java program running on a remote *nix machine跟踪在远程 *nix 机器上运行的 java 程序的执行
【发布时间】:2011-07-15 18:46:48
【问题描述】:

我正在尝试调试在远程 Solaris 机器上运行的程序。 我想知道程序在执行过程中采用的路径,就像股权跟踪一样 喜欢

Class A.method1 called method2 in class B
Class B.method2 called method3 in class C
..
...
Control returned from method2 in class B to
method1 in Class A etc

我们无法从 eclipse 运行程序,因为环境无法复制,因为它是一个大型企业级系统,具有许多上游和下游系统。

我怀疑程序中的某个地方抛出了一个异常,并且没有像空的 catch 块一样正确处理/没有记录或重新抛出异常。

调试此类程序的最佳方法是什么。请帮助我解决您的问题。

【问题讨论】:

    标签: java debugging exception


    【解决方案1】:

    您可以使用Eclipse调试远程应用程序,您只需添加一些启动参数:http://eclipse.dzone.com/articles/how-debug-remote-java-applicat

    【讨论】:

    • 我没有应用程序的完整源代码。我们只有我们正在处理的模块的代码,在这种情况下,这会工作吗?
    • 是的,应该。无论如何,您通常都没有所有类的源代码。例如,src.zip 不包括 sun.* 类的源代码。
    【解决方案2】:

    可以用eclipse远程调试,见this

    【讨论】:

    • 我没有应用程序的完整源代码。我们只有我们正在处理的模块的代码,在这种情况下,这会工作吗?
    【解决方案3】:

    如果您想跟踪 Java 代码的执行,可以使用名为 InTrace 的工具。

    InTrace 支持将跟踪从 Java 程序输出到磁盘或通过网络输出到 InTrace UI。这对于在远程 Solaris 机器上调试 Java 程序应该是理想的。

    注意:InTrace 是我编写的免费开源工具。

    【讨论】:

      【解决方案4】:

      由于您的远程计算机在 Solaris 下运行,因此您可以使用 DTrace 将探针动态添加到正在运行的 JVM 和整个系统中。

      【讨论】:

        【解决方案5】:

        您可以远程调试,Eclipse 支持,但系统管理员可能不允许。我唯一能想到的另一件事是大量的日志记录

        【讨论】:

          【解决方案6】:

          在这种情况下,我使用了 Btrace https://dzone.com/articles/introduction-btrace,它不需要您设置远程调试器,也不需要您的 Java 应用程序的源代码。

          另一种方法是运行 jdb https://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html 并附加到进程 - 但您必须启用进程 JVM 才能使用 jdwp -agentlib:jdwp=transport=dt_shmem,server=y,suspend=n

          总的来说,我同意 JDK 缺少专业的内置跟踪/调试工具

          【讨论】:

            猜你喜欢
            • 2018-09-10
            • 2013-05-15
            • 2016-02-24
            • 1970-01-01
            • 2020-12-14
            • 1970-01-01
            • 1970-01-01
            • 2014-11-05
            • 1970-01-01
            相关资源
            最近更新 更多