On Saturday, 14 September 2013 at 17:34:27 UTC, Adam D. Ruppe
wrote:
On Saturday, 14 September 2013 at 12:25:44 UTC, Paolo Invernizzi
wrote:
Give me a way to writeln the callstack frames at a certain
Challenge accepted:
import std.stdio;
string getStackTrace() {
import core.runtime;
version(Posix) {
// druntime cuts out the first few functions on
the trace as they are internal
// so we'll make some dummy functions here so
our
actual info doesn't get cut
Throwable.TraceInfo f5() { return
defaultTraceHandler(); }
Throwable.TraceInfo f4() { return f5(); }
Throwable.TraceInfo f3() { return f4(); }
Throwable.TraceInfo f2() { return f3(); }
auto stuff = f2();
} else {
auto stuff = defaultTraceHandler();
}
return stuff.toString();
}
void foo() {
writeln("on foo");
bar();
}
void bar() {
writeln("on bar");
omg();
}
void omg() {
writeln("on omg");
writeln(getStackTrace());
}
void main() {
omg();
writeln("\n****\n");
foo();
}
O_o
Adam, this is *really* an unexpected gift!
I suggest to add this example in the core.runtime DDoc at least!
- Paolo