2011-06-15 75 views
4

我正在部署在Tomcat服務器上的Web應用程序上工作。在我的本地測試系統上,我使用Eclipse和WST將我的代碼部署到服務器。如果堆棧跟蹤被拋出,我可以看到每行的源文件和行號 - 正如所料。無法在Java堆棧跟蹤中看到java源文件

但是,如果在生產系統上引發異常,源文件以及行號都是未知的。這種情況僅適用於我自己的代碼,對於外部庫的跟蹤中的所有堆棧元素,源文件和行號是已知的。

我編譯我的項目如下(使用Ant):

<javac srcdir="${src}" destdir="${build}" fork="true" debug="true" debuglevel="lines, vars, source"> 
    <classpath refid="classpath" /> 
</javac> 

我absoutely不知道問題出在哪裏,但它必須是超級簡單的解決。

感謝您的幫助!

>>編輯:我的部署一些詳細信息:我肯定用這些Ant目標,以創建WAR文件:

<target name="compile" depends="update-dependencies"> 
    <mkdir dir="${build}" /> 
    <javac srcdir="${src}" destdir="${build}" fork="true" debug="true" debuglevel="lines, vars, source"> 
     <classpath refid="classpath" /> 
    </javac> 
    <javac srcdir="${tests}" destdir="${build}" fork="true" debug="true" debuglevel="lines, vars, source"> 
     <classpath refid="classpath" /> 
    </javac> 

    <!-- Copy non-java files --> 
    <copydir dest="${build}" src="${src}"> 
     <exclude name="**/*.java"/> 
    </copydir> 

    <copydir dest="${build}" src="${tests}"> 
     <exclude name="**/*.java"/> 
    </copydir> 
</target> 


<target name="war" depends="compile">  
    <war destfile="${war.file}" webxml="WebContent/WEB-INF/web.xml"> 
     <fileset dir="WebContent" /> 
     <lib dir="${lib}" /> 
     <classes dir="${build}" /> 
    </war> 
</target> 

在本地系統上我使用Eclipse來爲我做部署,所以我不使用我的任何螞蟻目標。我需要部署中的.java文件嗎?

>> EDIT2:實例堆棧跟蹤(唯一的例外本身是沒有問題的!):

javax.naming.NamingException: Name is not valid 
     at org.apache.naming.NamingContext.unbind(NamingContext.java:248) 
     at org.apache.naming.NamingContext.unbind(NamingContext.java:282) 
     at org.apache.naming.SelectorContext.unbind(SelectorContext.java:256) 
     at javax.naming.InitialContext.unbind(InitialContext.java:416) 
     at org.hibernate.impl.SessionFactoryObjectFactory.removeInstance(SessionFactoryObjectFactory.java:139) 
     at org.hibernate.impl.SessionFactoryImpl.close(SessionFactoryImpl.java:894) 
     at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.destroy(AbstractSessionFactoryBean.java:251) 
     at org.springframework.orm.hibernate3.LocalSessionFactoryBean.destroy(LocalSessionFactoryBean.java:899) 
     at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:184) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:487) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:463) 
     at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:431) 
     at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1048) 
     at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1022) 
     at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:970) 
     HERE: at my.pkg.ContextLoaderListener.closeWebApplicationContext(Unknown Source) 
     HERE: at my.pkg.ContextLoaderListener.contextDestroyed(Unknown Source) 
     at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4174) 
     at org.apache.catalina.core.StandardContext.stop(StandardContext.java:4778) 
     at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:924) 
     at org.apache.catalina.startup.HostConfig.undeployApps(HostConfig.java:1319) 
     at org.apache.catalina.startup.HostConfig.stop(HostConfig.java:1290) 
     at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:323) 
     at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
     at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1086) 
     at org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1098) 
     at org.apache.catalina.core.StandardEngine.stop(StandardEngine.java:450) 
     at org.apache.catalina.core.StandardService.stop(StandardService.java:587) 
     at org.apache.catalina.core.StandardServer.stop(StandardServer.java:744) 
     at org.apache.catalina.startup.Catalina.stop(Catalina.java:648) 
     at org.apache.catalina.startup.Catalina$CatalinaShutdownHook.run(Catalina.java:692) 
+0

你可以發佈它打破的行和它顯示的相應日誌跟蹤嗎? – Bhushan 2011-06-15 22:39:29

+3

您是否在本地部署了與部署到生產環境相同的戰爭文件,或者您是否正在重建它?我有相同的螞蟻腳本,它的構建沒有問題。 – 2011-06-15 22:42:31

+0

您是否驗證過部署到生產服務器上的代碼是否使用此ant腳本構建?很多RE人員都試圖避免將調試數據放入他們構建的罐子中。 – vkraemer 2011-06-15 22:47:26

回答

9

我找到了解決方案 - 簡單而笨:

在螞蟻javac的步驟definintion,改變部分

DEBUGLEVEL = 「行,乏,源」

debuglevel =「lines,vars,source」(no spaces)

它會工作。

Erik

0

首先要檢查可的日誌記錄級別的託管服務器設置。