我有一个java项目,其中文件系统如下:我有3个目录:bin,src和lib.
我正在学习如何使用jdb,但每次我尝试使用list命令时,它只是说无法找到源文件.我从bin目录中运行以下命令:
jdb -classpath ../lib/*:. -sourcepath ../src envelope.Envelope
Run Code Online (Sandbox Code Playgroud)
我的main方法包含在信封包中,它是信封包的一部分,我做错了什么?
我知道这个已经很老了,但也许会有人对它感兴趣
假设我们有文件
package mypackage;
public class Main {
public static void main(String [] arg) {
System.out.println("Hello world");
}
}
Run Code Online (Sandbox Code Playgroud)
项目布局如下
jdb_test/
??? src
? ??? mypackage
? ??? Main.java
??? target
??? mypackage
??? Main.class
Run Code Online (Sandbox Code Playgroud)
类文件是使用以下方法编译的:
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 {} \;
Run Code Online (Sandbox Code Playgroud)
然后,在jdb_test目录中,我们可以调用
jdb -sourcepath src -classpath target mypackage.Main
Run Code Online (Sandbox Code Playgroud)
并调试代码
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]
Run Code Online (Sandbox Code Playgroud)