report how to create a compiler stacktrace #1280

This commit is contained in:
Simon Hafner
2015-02-01 23:24:43 -06:00
parent 9bd72fc0d9
commit fc5700619b
2 changed files with 18 additions and 1 deletions

View File

@@ -715,7 +715,10 @@ type
proc handleError(msg: TMsgKind, eh: TErrorHandling, s: string) =
template quit =
if defined(debug) or gVerbosity >= 3 or msg == errInternal:
writeStackTrace()
if stackTraceAvailable():
writeStackTrace()
else:
stderr.writeln("No stack traceback available\nTo create a stacktrace, rerun compilation with ./koch temp c <file>")
quit 1
if msg >= fatalMin and msg <= fatalMax:

View File

@@ -175,6 +175,8 @@ proc auxWriteStackTrace(f: PFrame, s: var string) =
add(s, tempFrames[j].procname)
add(s, "\n")
proc stackTraceAvailable*(): bool
when hasSomeStackTrace:
proc rawWriteStackTrace(s: var string) =
when NimStackTrace:
@@ -188,6 +190,18 @@ when hasSomeStackTrace:
auxWriteStackTraceWithBacktrace(s)
else:
add(s, "No stack traceback available\n")
proc stackTraceAvailable(): bool =
when NimStackTrace:
if framePtr == nil:
result = false
else:
result = true
elif defined(nativeStackTrace) and nativeStackTraceSupported:
result = true
else:
result = false
else:
proc stackTraceAvailable*(): bool = result = false
proc quitOrDebug() {.inline.} =
when not defined(endb):