如何打印Groovy堆栈跟踪?Java方法Thread.currentThread().getStackTrace()产生一个巨大的堆栈跟踪,包括很多Groovy内部.我看到一个从StreamingMarkupBuilder中调用两次的函数看起来应该只调用一次,我想看看为什么Groovy认为应该调用它两次.
amc*_*ack 17
Google搜索会返回以下信息:
显然,有一种org.codehaus.groovy.runtime.StackTraceUtils
叫做方法printSanitizedStackTrace
.没有该方法多文档,虽然有一个叫方法sanitize
被描述为
从异常实例中删除所有明显的groovy-internal跟踪条目.这会修改原始实例并返回它,它不会克隆
所以我会尝试org.codehaus.groovy.runtime.StackTraceUtils.printSanitizedStackTrace(Throwable t)
(它是静态的),看看它是否适合你.
我在搜索时发现了这个问题"spock print full stack trace"
。
我的单元测试是用 Groovy 编写的,使用 Spock 测试框架,并且它们在 Gradle 构建的上下文中运行。
对我来说,修复就像添加exceptionFormat = 'full'
到我的 Gradle 测试任务规范一样简单:
test {
testLogging {
exceptionFormat = 'full'
}
}
Run Code Online (Sandbox Code Playgroud)