在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);但这两行似乎只打印了堆栈跟踪的一半-我想添加代码,以便打印完整的堆栈跟踪。我已经编辑了原始问题以添加代码-如上述答案所示