From d7c14655a9a022ea900d25b49bda3c474cd1b97c Mon Sep 17 00:00:00 2001 From: Vincent Vanackere Date: Mon, 27 Jan 2014 14:00:00 -0800 Subject: [PATCH] runtime/debug: fix incorrect Stack output if package path contains a dot Although debug.Stack is deprecated, it should still return the correct result. Output before this CL (using a trivial library in $GOPATH/test.com/a): /home/vince/src/test.com/a/lib.go:9 (0x42311e) com/a.ShowStack: os.Stdout.Write(debug.Stack()) Output with this CL applied: /home/vince/src/test.com/a/lib.go:9 (0x42311e) ShowStack: os.Stdout.Write(debug.Stack()) LGTM=iant R=golang-codereviews, iant CC=golang-codereviews https://golang.org/cl/57330043 --- src/pkg/runtime/debug/stack.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/pkg/runtime/debug/stack.go b/src/pkg/runtime/debug/stack.go index 2896b21417..c29b0a226a 100644 --- a/src/pkg/runtime/debug/stack.go +++ b/src/pkg/runtime/debug/stack.go @@ -18,6 +18,7 @@ var ( dunno = []byte("???") centerDot = []byte("·") dot = []byte(".") + slash = []byte("/") ) // PrintStack prints to standard error the stack trace returned by Stack. @@ -84,6 +85,11 @@ func function(pc uintptr) []byte { // runtime/debug.*T·ptrmethod // and want // *T.ptrmethod + // Since the package path might contains dots (e.g. code.google.com/...), + // we first remove the path prefix if there is one. + if lastslash := bytes.LastIndex(name, slash); lastslash >= 0 { + name = name[lastslash+1:] + } if period := bytes.Index(name, dot); period >= 0 { name = name[period+1:] } -- 2.48.1