report how to create a compiler stacktrace #1280
This commit is contained in:
parent
9bd72fc0d9
commit
fc5700619b
2 changed files with 18 additions and 1 deletions
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue