github.com/daludaluking/addr2line@v0.0.0-20180726102841-edf762fb5d97/addr2line_test.go (about) 1 package addr2line 2 3 import ( 4 "flag" 5 "os" 6 "strconv" 7 "testing" 8 ) 9 10 var globalT *testing.T 11 12 func printUsage() { 13 globalT.Error("usage: addr2line [so library paht] [hexadecimal address]\n\tex) addr2line libc.so 0x493c\n") 14 } 15 16 func usage() { 17 printUsage() 18 } 19 20 func TestGetAddr2LineEntry(t *testing.T) { 21 globalT = t 22 23 if len(os.Args) < 2 || os.Args[1] == "--help" { 24 usage() 25 } 26 27 flag.Usage = usage 28 flag.Parse() 29 30 if flag.NArg() != 2 { 31 usage() 32 return 33 } 34 35 addressStr := flag.Arg(1) 36 37 if len(addressStr) > 2 && addressStr[:2] == "0x" { 38 addressStr = addressStr[2:] 39 } 40 41 addr, err := strconv.ParseInt(addressStr, 16, 64) 42 if err != nil { 43 t.Errorf("%v\n", err) 44 } 45 46 e, err := GetAddr2LineEntry(flag.Arg(0), uint(addr), true) 47 48 if err != nil { 49 t.Error(err) 50 } else { 51 //t.Logf("%v\n", e) 52 t.Logf("library : %s\n", e.SoPath) 53 t.Logf("address : 0x%x\n", e.Address) 54 t.Logf("function : %s\n", e.Func) 55 t.Logf("file : %s\n", e.File) 56 t.Logf("line : %d\n", e.Line) 57 t.Logf("inline : %v\n", e.Inline) 58 } 59 } 60 61 func BenchmarkGetAddr2LineEntry(t *testing.B) { 62 if len(os.Args) < 2 || os.Args[1] == "--help" { 63 usage() 64 } 65 66 flag.Usage = usage 67 flag.Parse() 68 69 if flag.NArg() != 2 { 70 usage() 71 return 72 } 73 74 addressStr := flag.Arg(1) 75 76 if len(addressStr) > 2 && addressStr[:2] == "0x" { 77 addressStr = addressStr[2:] 78 } 79 80 addr, err := strconv.ParseInt(addressStr, 16, 64) 81 if err != nil { 82 t.Errorf("%v\n", err) 83 } 84 85 e, err := GetAddr2LineEntry(flag.Arg(0), uint(addr), true) 86 87 if err != nil { 88 t.Error(err) 89 } else { 90 //t.Logf("%v\n", e) 91 t.Logf("library : %s\n", e.SoPath) 92 t.Logf("address : 0x%x\n", e.Address) 93 t.Logf("function : %s\n", e.Func) 94 t.Logf("file : %s\n", e.File) 95 t.Logf("line : %d\n", e.Line) 96 t.Logf("inline : %v\n", e.Inline) 97 } 98 }