Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当Java代码不同步时,如何调试它?_Java_Eclipse - Fatal编程技术网

当Java代码不同步时,如何调试它?

当Java代码不同步时,如何调试它?,java,eclipse,Java,Eclipse,我遇到的一个问题是我的jar文件和源文件不匹配 我想: 当源代码和二进制文件不匹配时会收到通知(我认为VisualStudio可以执行类似的操作…) 不是按直线设置断点,而是按函数设置断点。例如,在函数foo()的入口设置断点 我主要使用eclipse;所以eclipse的解决方案是最受欢迎的,但任何IDE(或命令行调试器)都可以。 谢谢 开发时只需使用并链接到IDE保存的.class文件。 如果您的项目开始增长到链接到.jar非常有用的程度,那么最好将jar作为单独的项目处理。调试信息仅限于源

我遇到的一个问题是我的jar文件和源文件不匹配

我想:

  • 当源代码和二进制文件不匹配时会收到通知(我认为VisualStudio可以执行类似的操作…)
  • 不是按直线设置断点,而是按函数设置断点。例如,在函数foo()的入口设置断点
  • 我主要使用eclipse;所以eclipse的解决方案是最受欢迎的,但任何IDE(或命令行调试器)都可以。
    谢谢

    开发时只需使用并链接到IDE保存的
    .class
    文件。


    如果您的项目开始增长到链接到
    .jar
    非常有用的程度,那么最好将jar作为单独的项目处理。

    调试信息仅限于源文件中的行号。。。我同意警告行是错误的会很好,但这需要jar中比我认为可用的更多的元数据

    <>你可能想考虑一下你的构建过程中的变化来应对挑战。这并不能完全回答你的问题,但希望它能给你一个解决潜在问题的策略

    在生成用于部署的jar时,还要生成一个包含二进制和源代码的jar。为了研究实时服务器上堆栈跟踪的源代码,在eclipse中设置一个单独的项目,并将binary+源jar放在类路径上。您可能需要显式地将源代码位置设置回同一个jar(尽管我认为Eclipse会自动执行此操作)

    然后,在进行部署时,只需将二进制+源jar的复制添加到工作区中的适当位置(最好使用部署脚本)


    如果是你的服务器,你可能甚至想考虑将二进制+源jar部署到Live服务器——这样你就永远可以得到源。

    < P>使用行断点代替。可以将它们设置为在进入/退出方法时停止。您可以通过双击包含方法声明的行中的左侧编辑器来获得它们。

    转到Eclipse中的项目选项卡,然后

    • 单击清理:项目->清理
    • 单击自动生成:项目->自动生成

    当您执行(即运行、调试、部署等)时,在后台持续编译的IDE将更为有利。我相信Eclipse可以用这种方式配置,我确实知道Eclipse的“自动构建”。我无法重新编译和重新部署jar文件。jar文件存在于远程计算机上,我的本地编译是一个较新的版本。FWIW我从未见过您在Visual Studio中描述的行为。现在,我只在VS中进行C++开发,所以也许C调试器具有这种能力——但是如果我在VS+C++中设置断点,并且在编译了调试的EXE/DLL之后,行号已经改变,它绝对不只是“解决它”。事实上,我们有一个相当严格的源代码控制策略,我们在每次提交时都会捕获已编译的PDB文件和源代码,这样我们就可以重新构建问题。是的,这是行不通的:(我知道如何在C++中完成所有这些事情,所以我认为java一定有一个方法。虽然这看起来确实应该工作,但是我测试了这个,当代码与JAR文件不同步时它不起作用。@ Grothaar,在我的例子中,我的代码与代码不同步,因为在代码里面丢失了注释。所以,行号I当使用方法断点时,虽然没有显示调试指针,但我可以按F6(在Eclipse上)想象调试指针在哪里,我也可以跟踪变量的值。