report how to create a compiler stacktrace #1280

This commit is contained in:
Simon Hafner 2015-02-01 23:24:43 -06:00
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) = proc handleError(msg: TMsgKind, eh: TErrorHandling, s: string) =
template quit = template quit =
if defined(debug) or gVerbosity >= 3 or msg == errInternal: 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 quit 1
if msg >= fatalMin and msg <= fatalMax: 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, tempFrames[j].procname)
add(s, "\n") add(s, "\n")
proc stackTraceAvailable*(): bool
when hasSomeStackTrace: when hasSomeStackTrace:
proc rawWriteStackTrace(s: var string) = proc rawWriteStackTrace(s: var string) =
when NimStackTrace: when NimStackTrace:
@ -188,6 +190,18 @@ when hasSomeStackTrace:
auxWriteStackTraceWithBacktrace(s) auxWriteStackTraceWithBacktrace(s)
else: else:
add(s, "No stack traceback available\n") 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.} = proc quitOrDebug() {.inline.} =
when not defined(endb): when not defined(endb):