Skip to content

Commit 256b994

Browse files
committed
Convert merry stacktrace
1 parent ab0fa2e commit 256b994

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

sentry.go

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"sync"
88
"time"
99

10+
"github.com/ansel1/merry"
1011
raven "github.com/getsentry/raven-go"
1112
"github.com/pkg/errors"
1213
"github.com/sirupsen/logrus"
@@ -305,36 +306,43 @@ func (hook *SentryHook) Flush() {
305306

306307
func (hook *SentryHook) findStacktrace(err error) *raven.Stacktrace {
307308
var stacktrace *raven.Stacktrace
308-
var stackErr errors.StackTrace
309+
var stack []uintptr
309310
for err != nil {
310-
// Find the earliest *raven.Stacktrace, or error.StackTrace
311+
// Find the earliest *raven.Stacktrace, error.StackTrace or merry.Stack
311312
if tracer, ok := err.(Stacktracer); ok {
312313
stacktrace = tracer.GetStacktrace()
313-
stackErr = nil
314+
stack = nil
314315
} else if tracer, ok := err.(pkgErrorStackTracer); ok {
315316
stacktrace = nil
316-
stackErr = tracer.StackTrace()
317+
stackErr := tracer.StackTrace()
318+
stackFrames := []errors.Frame(stackErr)
319+
stack = make([]uintptr, len(stackFrames))
320+
for i := 0; i < len(stack); i++ {
321+
stack[i] = uintptr(stackFrames[i])
322+
}
323+
} else {
324+
stacktrace = nil
325+
stack = merry.Stack(err)
317326
}
318327
if cause, ok := err.(causer); ok {
319328
err = cause.Cause()
320329
} else {
321330
break
322331
}
323332
}
324-
if stackErr != nil {
325-
stacktrace = hook.convertStackTrace(stackErr)
333+
if stack != nil {
334+
stacktrace = hook.convertStack(stack)
326335
}
327336
return stacktrace
328337
}
329338

330-
// convertStackTrace converts an errors.StackTrace into a natively consumable
339+
// convertStack converts an []uintptr into a natively consumable
331340
// *raven.Stacktrace
332-
func (hook *SentryHook) convertStackTrace(st errors.StackTrace) *raven.Stacktrace {
341+
func (hook *SentryHook) convertStack(stack []uintptr) *raven.Stacktrace {
333342
stConfig := &hook.StacktraceConfiguration
334-
stFrames := []errors.Frame(st)
335-
frames := make([]*raven.StacktraceFrame, 0, len(stFrames))
336-
for i := range stFrames {
337-
pc := uintptr(stFrames[i])
343+
frames := make([]*raven.StacktraceFrame, 0, len(stack))
344+
for i := range stack {
345+
pc := stack[i]
338346
fn := runtime.FuncForPC(pc)
339347
file, line := fn.FileLine(pc)
340348
frame := raven.NewStacktraceFrame(pc, fn.Name(), file, line, stConfig.Context, stConfig.InAppPrefixes)

0 commit comments

Comments
 (0)