在Java中-如何获得完整的堆栈跟踪

在Java中-如何获得完整的堆栈跟踪,java,java.util.logging,printstacktrace,Java,Java.util.logging,Printstacktrace,目前,我从代码运行中获得以下输出 Caused by: java.lang.NullPointerException at com.gargoylesoftware.htmlunit.html.HtmlScript$2.execute(HtmlScript.java:227) at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:256) at c

目前,我从代码运行中获得以下输出

Caused by: java.lang.NullPointerException
    at com.gargoylesoftware.htmlunit.html.HtmlScript$2.execute(HtmlScript.java:227)
    at com.gargoylesoftware.htmlunit.html.HtmlScript.onAllChildrenAddedToPage(HtmlScript.java:256)
    at com.gargoylesoftware.htmlunit.html.parser.neko.HtmlUnitNekoDOMBuilder.endElement(HtmlUnitNekoDOMBuilder.java:560)
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
    at com.gargoylesoftware.htmlunit.html.parser.neko.HtmlUnitNekoDOMBuilder.endElement(HtmlUnitNekoDOMBuilder.java:514)
    at net.sourceforge.htmlunit.cyberneko.HTMLTagBalancer.callEndElement(HTMLTagBalancer.java:1192)
    at net.sourceforge.htmlunit.cyberneko.HTMLTagBalancer.endElement(HTMLTagBalancer.java:1132)
    at net.sourceforge.htmlunit.cyberneko.filters.DefaultFilter.endElement(DefaultFilter.java:219)
    at net.sourceforge.htmlunit.cyberneko.filters.NamespaceBinder.endElement(NamespaceBinder.java:312)
    at net.sourceforge.htmlunit.cyberneko.HTMLScanner$ContentScanner.scanEndElement(HTMLScanner.java:3189)
    at net.sourceforge.htmlunit.cyberneko.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2114)
    at net.sourceforge.htmlunit.cyberneko.HTMLScanner.scanDocument(HTMLScanner.java:937)
    at net.sourceforge.htmlunit.cyberneko.HTMLConfiguration.parse(HTMLConfiguration.java:443)
    at net.sourceforge.htmlunit.cyberneko.HTMLConfiguration.parse(HTMLConfiguration.java:394)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at com.gargoylesoftware.htmlunit.html.parser.neko.HtmlUnitNekoDOMBuilder.parse(HtmlUnitNekoDOMBuilder.java:760)
    at com.gargoylesoftware.htmlunit.html.parser.neko.HtmlUnitNekoHtmlParser.parseFragment(HtmlUnitNekoHtmlParser.java:158)
    at com.gargoylesoftware.htmlunit.html.parser.neko.HtmlUnitNekoHtmlParser.parseFragment(HtmlUnitNekoHtmlParser.java:112)
    at com.gargoylesoftware.htmlunit.javascript.host.Element.parseHtmlSnippet(Element.java:868)
    at com.gargoylesoftware.htmlunit.javascript.host.Element.setInnerHTML(Element.java:920)
    at com.gargoylesoftware.htmlunit.javascript.host.html.HTMLElement.setInnerHTML(HTMLElement.java:676)
    at sun.reflect.GeneratedMethodAccessor17.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:188)
    ... 30 more
上面的
。。。30多个
表示我不知道导致问题的代码行。如何获取完整的堆栈跟踪

另外,如果它似乎没有使用
printStackTrace
运行任何catch语句,但是如果我使用以下命令关闭日志记录


java.util.logging.Logger.getLogger(“com.gargoylesoftware.htmlunit”).setLevel(java.util.logging.Level.OFF);

java.util.logging.Logger.getLogger(“org.apache.http”).setLevel(java.util.logging.Level.OFF); **根据下面的评论,我已经在下面输入了我的完整代码。但没有输入实际的URL** 导入com.gargoylesoftware.htmlunit.html.*; 导入java.io.File; 导入com.gargoylesoftware.htmlunit.WebClient; 导入com.gargoylesoftware.htmlunit.html.HtmlPage; 公共类下载到发送到堆栈溢出 { 公共静态void main(字符串参数[]) { String url=“不想包含实际的网站”; HtmlPage=null; WebClient WebClient=新的WebClient(); webClient.getOptions().setRedirectEnabled(true); webClient.getOptions().setJavaScriptEnabled(true);//尝试设置为false,但不起作用 webClient.getOptions().setCssEnabled(false); webClient.getOptions().SetUseSecureSSL(true); webClient.getOptions().setTimeout(30000); webClient.setJavaScriptTimeout(30000);//例如50s webClient.waitForBackgroundJavaScript(15000);//于2017年1月24日添加 webClient.waitForBackgroundJavaScriptStartingBefore(30000);//于2017年1月24日添加 尝试 { page=webClient.getPage(url); 保存页面\u just\u html(第页); } 捕获(例外e) { System.out.println(“引发的异常:----------------------------------------------”+e.getMessage()); e、 printStackTrace(); } } 受保护的静态字符串保存页\u just\u html(HtmlPage) { 尝试 { File saveFolder=新文件(“spool/”); page.save(saveFolder);//这是导致限制堆栈跟踪错误的行 } 捕获(例外e) { System.out.println(“引发IOException:--------------------------------------”+e.getMessage()); e、 printStackTrace(); } 返回“file.html”; } } ------------------------------------------------------ page.save(保存文件夹);上面是问题线。如果我把它取出来,我不会得到有限的statcktrace错误,但我也不会保存html页面——我想这样做 -问题是-为什么这一行只打印有限的堆栈跟踪
“原因”表示这是一个嵌套异常

嵌套异常stacktrace中的“…30多行”表示这30行与主异常中的相同

因此,只需查看主堆栈跟踪即可查看这些堆栈帧


显然,生成异常堆栈跟踪的方式是抑制(或删除)主异常堆栈跟踪。这是令人费解的,但它可能是由您正在使用的一个单元测试库完成的

要弄清这一点,您可能需要调试生成stacktrace的任何内容,或者编写一个脚本,以便其他人可以调试它。

原因”表示这是一个嵌套异常

嵌套异常stacktrace中的“…30多行”表示这30行与主异常中的相同

因此,只需查看主堆栈跟踪即可查看这些堆栈帧


显然,生成异常堆栈跟踪的方式是抑制(或删除)主异常堆栈跟踪。这是令人费解的,但它可能是由您正在使用的一个单元测试库完成的


要弄清这一点,您可能需要调试生成stacktrace的任何内容,或者编写一个脚本,以便其他人可以调试它。

非常感谢您的回答。但是,堆栈跟踪不是来自我的任何catch和e.printStackTrace。它似乎只有在包含以下两行时才会出现:-java.util.logging.Logger.getLogger(“com.gargoylesoftware.htmlunit”).setLevel(java.util.logging.Level.OFF);java.util.logging.Logger.getLogger(“org.apache.http”).setLevel(java.util.logging.Level.OFF);但是这两行似乎只打印了堆栈跟踪的一半-我想添加代码以便打印完整的堆栈跟踪。我已经编辑了原始问题以添加代码-正如上面的回答所建议的。非常感谢您的回答。但是,堆栈跟踪不是来自我的任何捕获和e.printStackTrace。它似乎只有在包含以下两行时才会出现:-java.util.logging.Logger.getLogger(“com.gargoylesoftware.htmlunit”).setLevel(java.util.logging.Level.OFF);java.util.logging.Logger.getLogger(“org.apache.http”).setLevel(java.util.logging.Level.OFF);但这两行似乎只打印了堆栈跟踪的一半-我想添加代码,以便打印完整的堆栈跟踪。我已经编辑了原始问题以添加代码-如上述答案所示