假设我有一些这样的代码:
value, err := some3rdpartylib.DoSomething()
if err != nil {
panic(err)
}
万一err != nil
我会得到这样的东西:
panic: some error explanation here
goroutine 1 [running]:
main.main()
/tmp/blabla/main.go:6 +0x80
此堆栈跟踪完全合法,但有时这些错误消息可能无法阐明发生了什么,因此我想更深入地研究第三方库的源代码,以调查究竟是什么导致该错误被返回。但是,当我的代码如此恐慌时,无法获得返回此错误的实际位置。
需要更多说明:当我来自抛出异常的JVM世界时,我可以完全跟踪抛出异常的确切代码行,从而可以轻松找到问题的所在并查看出了什么问题。Go堆栈跟踪恰好在我的代码恐慌的地方结束,因此在我的情况下不太有用。
我在这里创建了一个游乐场,理想情况下,我希望能够将错误跟踪到实际返回错误的地方,而不是惊慌失措。(例如,到第17行return "", errors.New("some error explanation here")
)
这有可能吗?
很快:这是不可能的。由于错误是值,因此不会以任何特殊方式处理它们。因此,当函数(通常)返回时,堆栈不再可用(即,另一个函数调用可能会覆盖返回错误函数的堆栈使用的内存)。
go1.5引入了一个称为 trace 的工具,但目前尚无全面的教程,我发现其中的任何一个都没有说要包含这种功能。
我有一个带有的堆栈跟踪: [...]原因:ch.ethz.id.wai.lakshmi.engine.common.lakshmiException:处理用户事务时出错。在ch.ethz.id.wai.lakshmi.engine.common.TransactionHelper.commitTransaction(TransactionHelper.java:79)在ch.ethz.id.wai
问题内容: 如何获得Java中的当前堆栈跟踪,就像你可以在.NET中那样? 我找到了,但这不是我想要的-我想找回堆栈跟踪信息,而不是打印出来。 问题答案: 你可以使用。 这将返回一个数组,该数组代表程序的当前堆栈跟踪。
在我们的日志文件中,我们发现以下内容: 只有这一行,没有异常堆栈跟踪。 出现此异常的try块正在执行使用javassist创建的动态生成的Java字节码。 我想知道两件事: : null 丢失的堆栈跟踪,尽管在块内使用调用日志挂钩,这通常会导致完整的堆栈跟踪被打印在日志文件中。 我的问题: > 什么样的代码会导致日志输出“java.lang.ArrayIndexOutOfBoundsExcepti
问题内容: 在Java中,如果一个方法抛出错误,则调用它的方法可以将其传递给下一个方法。 我正在迅速编写一个应用程序,并且希望做同样的事情。这可能吗?如果不可能,还有哪些其他可能的解决方案?我进行调用的原始函数具有此结构。 问题答案: 参考Swift- 错误处理文档 ,您应该: 1- 通过声明符合错误协议的 枚举 来创建自定义错误类型: 2- 声明为可抛出函数: 3- 声明为throwable函数
我得到了堆栈跟踪。我所能跟踪的最远的回调是中的调用。没有留下是从调用的信息。 有没有一种方法可以获得完整的堆栈跟踪?
在另一种情况下,经过去模糊处理后,我得到的不是正常的堆栈跟踪,而是如下所示: 是什么原因,有可能莫名其妙地从这得到一个正常的堆栈跟踪?