美文网首页
golang错误追踪与调试

golang错误追踪与调试

作者: 李孝伟 | 来源:发表于2018-08-21 17:07 被阅读139次

程序开发过程中总会遇到bug,所以bug的定位与分析就非常关键。
golang里面定义了很多error,但有些时候只有error是很难定位到问题,所以还是需要堆栈信息。
我们通常会先定义一个错误打印的函数,这样可以对错误进行统一的处理和分析:

func ErrorPbResponse(errCode string, errMsg string) pb.Response {
    LogMessage("errcode[" + errCode + "] Errmsg:" + errMsg)
    
    if errCode == RESP_CODE_SYSTEM_ERROR {
        PrintStack() //堆栈函数
    }
       //TODO
}

那堆栈函数如下:

func PrintStack() {
    var buf [4096]byte
    n := runtime.Stack(buf[:], false)
    fmt.Printf("==> %s\n", string(buf[:n]))
}

具体效果如下:

errcode[5000] Errmsg:GetDataByCompositeKey 解密数据错误签名已失效
==> goroutine 374 [running]:
main.PrintStack()
    /chaincode/input/src/github.com/hyperledger/fabric/lychee/chaincode/go/cc_bscf/tool.go:54 +0x5b
main.ErrorPbResponse(0xb043e0, 0x4, 0xc420019c80, 0x37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
    /chaincode/input/src/github.com/hyperledger/fabric/lychee/chaincode/go/cc_bscf/tool.go:47 +0x2b4
main.agentCountQuery(0x1075c20, 0xc42007f680, 0xc42000c230, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
    /chaincode/input/src/github.com/hyperledger/fabric/lychee/chaincode/go/cc_bscf/invoke_common.go:1263 +0x512
main.(*SmartContract).Invoke(0x10c8d00, 0x1075c20, 0xc42007f680, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
    /chaincode/input/src/github.com/hyperledger/fabric/lychee/chaincode/go/cc_bscf/invoke_main.go:122 +0x193
github.com/hyperledger/fabric/core/chaincode/shim.(*Handler).handleTransaction.func1(0xc4201e7dc0, 0xc4203910e0)
    /opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/shim/handler.go:329 +0x4f3
created by github.com/hyperledger/fabric/core/chaincode/shim.(*Handler).handleTransaction
    /opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/shim/handler.go:295 +0x49

问题就能快速定位了!

相关文章

  • golang错误追踪与调试

    程序开发过程中总会遇到bug,所以bug的定位与分析就非常关键。golang里面定义了很多error,但有些时候只...

  • GO 优雅追踪堆栈错误包

    Golang tracks stack error package. 优雅追踪堆栈错误包 安装(Install) ...

  • debugserver or lldb-server not f

    mac 中安装golang调试器dlv 调试时候出现错误 debugserver or lldb-server n...

  • PHPStorm和Vagrant环境下安装Xdebug 实现断点

    Xdebug是一个PHP的扩展,它可以允许PHP开发者调试与分析代码,追踪错误。如果你不熟悉它,可以在看本篇文章之...

  • delve:Golang的最佳调试工具

    推荐使用Golang原生调试器delve,gdb不能切换goroutine。 推荐文章Golang程序调试工具介绍...

  • 2.SpringBoot添加logback日志

    在项目中添加日志输出,有利于调试和错误追踪。本篇主要实现LogBack彩色日志输出。 1、为项目添加Lombok ...

  • Golang:Delve版本太低无法Debug

    问题描述 最近把Golang升级到了1.14,突然发现Goland编辑器没法Debug调试程序了,会报出如下错误:...

  • Shell脚本

    1、脚本的执行 2、条件判断 3、循环执行(loop) 4、Shell脚本的追踪与调试

  • golang

    参考: [转]golang在Windows下Sublime Text开发调试环境的配置 golang 视频集(Yo...

  • JavaScript错误与调试

    一、错误处理 1. try-catch 语句 catch 会受到一个包含错误信息的对象,与其他语言不同的是,即使你...

网友评论

      本文标题:golang错误追踪与调试

      本文链接:https://www.haomeiwen.com/subject/whbdiftx.html