rJava:如何获取堆栈跟踪/更详细的错误?
rJava: How to get stack traces / more verbose error?
有没有办法让 rJava 打印出错误的完整堆栈跟踪,而不仅仅是异常?例如,此代码(尝试从 R 调用 Ambit2 化学信息学库)
smrkMan <- .jnew("ambit2.smarts.SMIRKSManager", dcob)
reaction <- .jcall(smrkMan, "Lambit2/smarts/SMIRKSReaction;", "parse", ">>C" )
res <- .jcall(smrkMan, "Z", "applyTransformation", AC,
.jnull("ambit2/smarts/IAcceptable"),
reaction)
只给我
Fehler in .jcall(smrkMan, "Z", "applyTransformation", AC,
.jnull("ambit2/smarts/IAcceptable"), :
java.lang.NullPointerException
这不是很有用,我想看看它在哪一行失败了,这样我就可以返回并在源代码中跟踪它...
有可能吗?
您可以使用 .jgetEx()
获取异常对象并打印堆栈跟踪:
> .jcall("C",,"main",check=FALSE)
> ex=.jgetEx()
> .jcheck()
Error: java.lang.Exception: foo
> ex$printStackTrace()
java.lang.Exception: foo
at C.main(C.java:3)
和
public class C {
static void main() throws Exception {
throw new Exception("foo"); } }
只需确保在调用 printStackTrace()
之前调用 .jclear()
或 .jcheck()
,因为 Java 在您清除异常之前不会执行任何操作。
有没有办法让 rJava 打印出错误的完整堆栈跟踪,而不仅仅是异常?例如,此代码(尝试从 R 调用 Ambit2 化学信息学库)
smrkMan <- .jnew("ambit2.smarts.SMIRKSManager", dcob)
reaction <- .jcall(smrkMan, "Lambit2/smarts/SMIRKSReaction;", "parse", ">>C" )
res <- .jcall(smrkMan, "Z", "applyTransformation", AC,
.jnull("ambit2/smarts/IAcceptable"),
reaction)
只给我
Fehler in .jcall(smrkMan, "Z", "applyTransformation", AC,
.jnull("ambit2/smarts/IAcceptable"), :
java.lang.NullPointerException
这不是很有用,我想看看它在哪一行失败了,这样我就可以返回并在源代码中跟踪它...
有可能吗?
您可以使用 .jgetEx()
获取异常对象并打印堆栈跟踪:
> .jcall("C",,"main",check=FALSE)
> ex=.jgetEx()
> .jcheck()
Error: java.lang.Exception: foo
> ex$printStackTrace()
java.lang.Exception: foo
at C.main(C.java:3)
和
public class C {
static void main() throws Exception {
throw new Exception("foo"); } }
只需确保在调用 printStackTrace()
之前调用 .jclear()
或 .jcheck()
,因为 Java 在您清除异常之前不会执行任何操作。