在jdb中指定源路径,我做错了什么

  • 本文关键字:错了 路径 jdb java jdb
  • 更新时间 :
  • 英文 :


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

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

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

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

其中我的主方法包含在信封类中,该类是信封包的一部分,我做错了什么?

我知道

这个已经很老了,但也许有人仍然会对它感兴趣

假设我们有文件

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]

我遇到了与 SO 相同的问题,除了提供的解决方案外,我还想指出,您需要从正确的目录执行 JDB。如果你的类属于任何包,例如.class MainActivity属于包org.gradle.samples,那么你的项目文件夹包含以下目录:

yourProject/
├── src
│   └── main
│       └── java
│           └── org
│               └── gradle
│                   └── samples
│                       └── MainActivity.java

然后你必须从<pathToYourProject>/src/main/java执行jdb,其中JDB -sourcepath也是<pathToYourProject>/src/main/java

如果从其他位置执行 JDB,则 list 命令将不起作用,即使您定义了正确的-sourcepath。或者即使您通过 use 命令更改 JDB 控制台中的源路径。

有一种即时的替代方法。

"Sourcepath"也是JDB本身中的一个命令。 因此,假设您已经附加/设置断点/运行,并且收到此错误并且不想重新开始.
只需输入sourcepath /path/to/srcdir,它应该从那里开始很高兴。

相关内容

  • 没有找到相关文章

最新更新