延迟断点:何时加载类



我正在使用mvnDebug调试maven:jdb -attach 8000
我尝试放置断点,但得到:

main[1] stop in DeployMojo.DeployMojo
Deferring breakpoint DeployMojo.DeployMojo.
It will be set after the class is loaded.
main[1] stop at Dependency:66
Deferring breakpoint Dependency:66.
It will be set after the class is loaded.

当我运行时,不会调用断点。我有源代码(使用 maven 命令生成),但如何使它们可供调试器使用?
是否有可以放置断点的类加载器?

这可能是因为您的类名错误或您省略了包。如果类 Dependency 在包 com.my.package 中,则在类 com.my.package.Dependency 中中断,而不是在Dependency中中断。

我正在使用jdb -attach -sourcepath ~/path/to/project/main/java.事实证明,jdb不喜欢~,需要jdb -attach -sourcepath $HOME/path/to/project/main/java或绝对路径。

对我来说,tibtof的回答只是我需要的一半,让它工作。在我显式添加包名称后,jdb 将在我的这个 gradle 项目上产生"尝试使用调试进行编译":

> Unable to set deferred breakpoint package.ClassName:LineNumber : No linenumber information for package.ClassName.  Try compiling with debugging on.

在这种情况下,如果您使用的是 gradle,则需要确保options.debug=true compileJava任务中,您可以使用下面的println进行检查。

就我而言,我正在编译调试 - 或者我是这么认为的。我有这样的build.gradle(基于这个答案和这篇文章):

tasks.withType(JavaCompile) {
    options.compilerArgs << '-Xlint:all' << '-Werror' << '-g'
    options.debug = project.hasProperty('debug')
    options.debugOptions.debugLevel = 'source,lines,vars'
    options.debugOptions.debugLevel = 'source,lines,vars'
    doLast {
      println "Args for for $name are $options.allCompilerArgs"
      println "debug=$options.debug"
    }
}

当我运行./gradlew build -Pdebug时,它按预期打印:

Args for for compileJava are [-Xlint:all, -Werror, -g]
debug=true

事实证明,当我后来运行./gradlew runMyTask --debug-jvm时,它重新运行了compileJava任务,因为我没有再次传递-Pdebug。运行 gradle 与 --info 证实了这一点:

Task ':compileJava' is not up-to-date because:
  Value of input property 'options.debug' has changed for task ':compileJava'
当我

添加上述println几个小时后,这一事实才变得明显:

afarah@gentoopc $ ./gradlew runMyTask --debug-jvm
> Task :compileJava
Args for for compileJava are [-Xlint:all, -Werror, -g]
debug=false
> Task :runMyTask
Listening for transport dt_socket at address: 5005

所以解决方案是运行./gradlew runMyTask --debug-jvm -Pdebug,即再次传递-Pdebug

afarah@gentoopc $ ./gradlew runMyTask --debug-jvm -Pdebug
> Task :compileJava
Args for for compileJava are [-Xlint:all, -Werror, -g]
debug=true
> Task :runMyTask
Listening for transport dt_socket at address: 5005

注意现在debug=true,最后 jdb 没有抱怨,停在我的 LineNumber 断点处。

相关内容

  • 没有找到相关文章

最新更新