2010-09-21 44 views
2

我对java/eclipse开发相当陌生,而且我在调试web应用程序中特定jar的代码时遇到了一些问题公司使用。在eclipse中调试tomcat时找不到特定jar/class的源代码

首先,我已经正确安装了Tomcat,并且可以成功运行webapp(除了我正在尝试查找的bug之外)。在web目录的lib目录中大约有二十个jar文件,当我试图在其他jar文件中调试文件时,调试器正确捕获它们的断点,并且一切都很开心。我在新jar中的代码中设置的断点会被跳过,当我沿调试堆栈进一步捕获断点时,任何尝试点击我感兴趣的类都会导致“未找到源”。

我点击“编辑源查找路径...”按钮,单击包含代码的项目,它只是将我返回到“找不到源”错误。我已经尝试将查找路径设置为项目以及文件系统目录和工作区项目。每次都有同样的结果。

我对调试器如何将调试堆栈窗口中的特定函数调用绑定到源代码有点模糊 - 它仅仅基于课程文件的包名和类名?如果是这样,我不明白为什么它不会工作。

任何想法?

+0

我刚刚注意到的一些事情 - 每次在选择源查找路径后单击“确定”,代码在“源未找到”消息再次出现之前在窗口中闪烁几分之一秒。它太快了,我无法100%确定地知道它是我正在查找的文件,但我相当肯定它是。这是否表明什么?有没有可能会显示一些东西的日食错误日志?这只是一个日食错误? – 2010-09-21 20:29:21

回答

0

确保您指向正确的目录。如果类是com.foo.SomeClass,那么您需要将src目录设置为基本目录,以便Eclipse可以找到$ basedir/com/foo/SomeClass.java。这不一定是项目的根源,它可能是$ project/src,或者甚至是Maven项目的$ project/src/main/java。

+0

当我将源查找路径添加为当前位于工作区中的Java项目时,是否应该保证它不在正确的位置?这就是我添加了可调试的其他罐子的方法。 – 2010-09-21 20:22:31

0

原来我错过了一个项目被重新命名,移动到不同的回购,并有一个几乎相同的包名......事实上,“近”字。感谢锁定唯一的回应!

com.companyname.java.x.y.z.classname != com.companyname.java.y.z.classname 
0

我哈瓦建议要解决以另一种方式你的问题: 当U要调试该DONOT inlude Tomcat的lib或其他的lib绑定到Tomcat这需要处理请求和响应的东西,像Struts2的。

即使你使用spring,也请在主函数中运行程序;

public static void main(String[] args) { 

    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
        "classpath*:/applicationContext.*.xml"); // check your applicationCntext formate , maybe applicationContext-*.xml ; 

    context.afterPropertiesSet(); 
    find(context); 
} 
private static void find(ClassPathXmlApplicationContext context) { 

    Map beans = getContext().getBeansOfType(SomeCLass.class); 
SomeCLass bean=beans.values().iterator().next(); 
bean.callFunction(); 

}