golang 오류 추적 및 디버깅

1881 단어
프로그램 개발 과정에서 버그를 만날 수 있기 때문에 버그의 포지셔닝과 분석이 매우 관건적이다.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
", 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

문제는 빠르게 위치를 정할 수 있다!

좋은 웹페이지 즐겨찾기