diff --git a/pkg/probe/probe.go b/pkg/probe/probe.go index b11a03d80..51c36e43c 100644 --- a/pkg/probe/probe.go +++ b/pkg/probe/probe.go @@ -137,11 +137,14 @@ func (e *Error) String() string { if e.Cause != nil { str := e.Cause.Error() + "\n" - for i, tp := range e.CallTrace { - if len(tp.Env) > 0 { - str += fmt.Sprintf(" (%d) %s:%d %s(..) Tags: [%s]\n", i, tp.Filename, tp.Line, tp.Function, strings.Join(tp.Env["Tags"], ", ")) + callLen := len(e.CallTrace) + for i := callLen - 1; i >= 0; i-- { + if len(e.CallTrace[i].Env) > 0 { + str += fmt.Sprintf(" (%d) %s:%d %s(..) Tags: [%s]\n", + i, e.CallTrace[i].Filename, e.CallTrace[i].Line, e.CallTrace[i].Function, strings.Join(e.CallTrace[i].Env["Tags"], ", ")) } else { - str += fmt.Sprintf(" (%d) %s:%d %s(..)\n", i, tp.Filename, tp.Line, tp.Function) + str += fmt.Sprintf(" (%d) %s:%d %s(..)\n", + i, e.CallTrace[i].Filename, e.CallTrace[i].Line, e.CallTrace[i].Function) } } diff --git a/pkg/probe/probe_test.go b/pkg/probe/probe_test.go index 778988ac9..3a6d4ec41 100644 --- a/pkg/probe/probe_test.go +++ b/pkg/probe/probe_test.go @@ -29,15 +29,23 @@ type MySuite struct{} var _ = Suite(&MySuite{}) -func testDummy() *probe.Error { +func testDummy0() *probe.Error { _, e := os.Stat("this-file-cannot-exit") - es := probe.NewError(e) - es.Trace("Important info 1", "Import into 2") - return es + return probe.NewError(e) +} + +func testDummy1() *probe.Error { + return testDummy0().Trace("DummyTag1") +} + +func testDummy2() *probe.Error { + return testDummy1().Trace("DummyTag2") } func (s *MySuite) TestProbe(c *C) { - es := testDummy() + es := testDummy2().Trace("TopOfStack") + // Uncomment the following Println to visually test probe call trace. + // fmt.Println("Expecting a simulated error here.", es) c.Assert(es, Not(Equals), nil) newES := es.Trace()