gpt4 book ai didi

java - 查找第三方库抛出的异常

转载 作者:行者123 更新时间:2023-11-30 04:32:24 25 4
gpt4 key购买 nike

我希望我能正确解释这一点。我正在使用 Javolution 库来读取和写入 XML 配置文件。我正在使用 XMLStreamReader/Writer。在读取过程中,我希望读取标签并将其属性存储在 LinkedHashMap 中。但是,我抛出了一个异常,对我来说,由于抛出该异常的时间以及代码中当前发生的情况,该异常看起来毫无意义。

使用 Eclipse 调试器,将属性的键和值添加到我的映射时会引发异常。

public class Element {
private HashMap<String, String> attributes = new LinkedHashMap<String, String>();
...

public void setAttribute(String key, String value) {
...
attributes.put(key, value);
}
}

添加键和值后,this 立即捕获来自 Javolution 的异常:

javolution.xml.stream.XMLStreamException: Local name cannot be null

keyvalue 都不为 null。当它们被添加到映射中时,我无法进一步进入代码以查看在何处引发异常,没有堆栈跟踪,也没有在任何地方显示文件/行号来解释在何处甚至如何引发异常。

通过对 Javolution 旧实现的快速 google 搜索,我可以看到这个特定的异常仅使用 XMLStreamWriterImpl 类型的一些方法引发。我在每次使用这些方法时都设置了断点,但是调试器直到代码中很晚的时候才捕获它们的使用(并且我的 localName 变量在声明时初始化)。

有人可以建议我如何确定抛出此异常的原因吗?

堆栈跟踪:

Java HotSpot(TM) 64-Bit Server VM[localhost:3999]   
Thread [main] (Suspended)
XMLImplMain$Element.setAttribute(String, String) line: 827
XMLImplMain.translate(Element) line: 133
XMLImplMain.translate(Element) line: 140
XMLImplMain.translate(Element) line: 140
XMLImplMain.loadXML(String) line: 118
Bootstrap.main(String[]) line: 32
Thread [EventWriter] (Running)

最佳答案

这个 Javolution 库可能没有正确编译,通过 javac 编译时可能没有参数 -g,这将使输出 jar 缺少调试信息。您可以找到您当前正在使用的 jar 的相应源代码,并使用足够的参数重新编译它,使其可以自行调试。

或者,有一种更复杂但不需要自定义编译的解决方法,编写 BTrace 脚本并捕获所有 XMLStreamException 的初始化,然后打印出堆栈跟踪,如下所示:

package com.sun.btrace.samples;
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;

@BTrace
public class OnThrow {
@OnMethod(clazz = "javolution.xml.stream.XMLStreamException", method = "<init>", location = @Location(Kind.RETURN))
public static void endMethod(@Self Exception self) {
jstack();
}
}

还有类似的例子here 。你可以再深入一点here .

关于java - 查找第三方库抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14336128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com