• Austin Clements's avatar
    runtime: print hexdump on traceback failure · dbd8f3d7
    Austin Clements authored
    Currently, if anything goes wrong when printing a traceback, we simply
    cut off the traceback without any further diagnostics. Unfortunately,
    right now, we have a few issues that are difficult to debug because
    the traceback simply cuts off (#21431, #23484).
    
    This is an attempt to improve the debuggability of traceback failure
    by printing a diagnostic message plus a hex dump around the failed
    traceback frame when something goes wrong.
    
    The failures look like:
    
    goroutine 5 [running]:
    runtime: unexpected return pc for main.badLR2 called from 0xbad
    stack: frame={sp:0xc42004dfa8, fp:0xc42004dfc8} stack=[0xc42004d800,0xc42004e000)
    000000c42004dea8:  0000000000000001  0000000000000001
    000000c42004deb8:  000000c42004ded8  000000c42004ded8
    000000c42004dec8:  0000000000427eea <runtime.dopanic+74>  000000c42004ded8
    000000c42004ded8:  000000000044df70 <runtime.dopanic.func1+0>  000000c420001080
    000000c42004dee8:  0000000000427b21 <runtime.gopanic+961>  000000c42004df08
    000000c42004def8:  000000c42004df98  0000000000427b21 <runtime.gopanic+961>
    000000c42004df08:  0000000000000000  0000000000000000
    000000c42004df18:  0000000000000000  0000000000000000
    000000c42004df28:  0000000000000000  0000000000000000
    000000c42004df38:  0000000000000000  000000c420001080
    000000c42004df48:  0000000000000000  0000000000000000
    000000c42004df58:  0000000000000000  0000000000000000
    000000c42004df68:  000000c4200010a0  0000000000000000
    000000c42004df78:  00000000004c6400  00000000005031d0
    000000c42004df88:  0000000000000000  0000000000000000
    000000c42004df98:  000000c42004dfb8  00000000004ae7d9 <main.badLR2+73>
    000000c42004dfa8: <00000000004c6400  00000000005031d0
    000000c42004dfb8:  000000c42004dfd0 !0000000000000bad
    000000c42004dfc8: >0000000000000000  0000000000000000
    000000c42004dfd8:  0000000000451821 <runtime.goexit+1>  0000000000000000
    000000c42004dfe8:  0000000000000000  0000000000000000
    000000c42004dff8:  0000000000000000
    main.badLR2(0x0)
    	/go/src/runtime/testdata/testprog/badtraceback.go:42 +0x49
    
    For #21431, #23484.
    
    Change-Id: I8718fc76ced81adb0b4b0b4f2293f3219ca80786
    Reviewed-on: https://go-review.googlesource.com/89016
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarCherry Zhang <cherryyz@google.com>
    dbd8f3d7
print.go 5.65 KB