Cur*_*ind 2 debugging stack-trace go aws-lambda
在我的 go 之旅中发现没有堆栈跟踪。因此,每当出现问题时,我们都会收到一条简单的字符串错误消息,而没有任何信息来自何处。这与我习惯查看详细堆栈跟踪的其他语言形成鲜明对比
\n\n例如,下面是来自apex的错误消息
\n\n$ cat event.json | apex invoke --logs webhook \n \xe2\xa8\xaf error parsing response: json: cannot unmarshal array into Go value of type map[string]interface {}\nRun Code Online (Sandbox Code Playgroud)\n\n这里它告诉我解组到地图无法工作,因为它event.json是一个数组。我们已解组interface{}以支持数组和映射。但是,它并没有告诉我哪个文件/行导致了此错误。
问题:
\n\n有什么方法可以快速找到此错误来自哪个文件/行?
除非是未恢复的恐慌,否则不会打印默认堆栈。
一般来说,地鼠是否可以使用一些提示/技巧来从该字符串错误消息中快速找到问题的根源?大多数 go 项目的堆栈跟踪都是这样的,还是应该遵循任何最佳实践?
一般来说,您需要检查大多数函数调用的错误返回。有不止一种方法可以做到这一点。我通常使用标准库包log打印带有文件和行号的错误日志,以便于在简单程序中进行调试。例如:
package main
import "log"
import "errors"
func init() { log.SetFlags(log.Lshortfile | log.LstdFlags) }
func callFunc() error {
return errors.New("error")
}
func main() {
if err := callFunc(); err != nil {
log.Println(err)
}
}
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/0iytNw7eZ7
输出:
2009/11/10 23:00:00 main.go:14: error
Run Code Online (Sandbox Code Playgroud)
此外,标准库中还有一些函数可供您打印或检索当前堆栈runtime/debug,例如https://golang.org/pkg/runtime/debug/#PrintStack
有许多社区致力于使错误处理变得更容易,您可以在 GoDoc 中搜索错误:https ://godoc.org/?q=error
| 归档时间: |
|
| 查看次数: |
4549 次 |
| 最近记录: |