]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/debug: fix incorrect Stack output if package path contains a dot
authorVincent Vanackere <vincent.vanackere@gmail.com>
Mon, 27 Jan 2014 22:00:00 +0000 (14:00 -0800)
committerIan Lance Taylor <iant@golang.org>
Mon, 27 Jan 2014 22:00:00 +0000 (14:00 -0800)
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

index 2896b21417afad5ece2836198dfe2b4fc758cd3d..c29b0a226a2b08c583a2f73827e3a324c14c69c3 100644 (file)
@@ -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:]
        }