7

我有一个 java 项目,其中的文件系统如下:我有 3 个目录:binsrclib

  • src包含我的*.java文件
  • bin包含我的*.class文件(使用src中的文件编译)
  • lib包含一些由大多数src文件导入的*.jar文件

我正在学习如何使用 jdb,但每次我尝试使用 list 命令时,它只会说找不到源文件。我正在我的 bin 目录中运行以下命令:

jdb -classpath ../lib/*:. -sourcepath ../src envelope.Envelope

我的主要方法包含在作为信封包的一部分的信封类中,我做错了什么?

4

1 回答 1

6

我知道这个很老了,但也许有人还会对它感兴趣

假设我们有文件

package mypackage;

public class Main {
  public static void main(String [] arg) {
    System.out.println("Hello world");
  }
}

项目布局如下

jdb_test/
├── src
│   └── mypackage
│       └── Main.java
└── target
    └── mypackage
        └── Main.class

类文件是使用以下方法编译的:

javac -sourcepath src -d target src/mypackage/Main.java
# if you have multiple files, you can always do
find . -name "*.java" -exec javac -sourcepath src -d target {} \;

然后,在jdb_test目录中,我们可以调用

jdb -sourcepath src -classpath target mypackage.Main

并调试代码

Initializing jdb ...
> stop in mypackage.Main.main
Deferring breakpoint mypackage.Main.main.
It will be set after the class is loaded.
> run
run mypackage.Main
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
>
VM Started: Set deferred breakpoint mypackage.Main.main

Breakpoint hit: "thread=main", mypackage.Main.main(), line=5 bci=0
5        System.out.println("Hello world");

main[1] list
1    package mypackage;
2
3    public class Main {
4      public static void main(String [] arg) {
5 =>     System.out.println("Hello world");
6      }
7    }
main[1]
于 2017-06-26T11:51:01.130 回答