I was very frustrated by the lack of debug-info at the gdb prompt during
rust coding recently. I note too that people on #rust complain about the
lack of visibility into debugging rustc itself.
I think there is a lightweight, quick to implement, solution to these
problems.
I have in mind a simple facility provided by a compiler flag that injects
(logging-controlled) printf or tracing-log statement at the top and bottom
of every function. Something like:
// example:
fn fun1(a:int, b:str, c:HashMap<~str, int>) -> HashMap<~str,int> {
c.insert(a,b)
}
// would effectively become, with rustc --autotrace enabled:
fn fun1(a:int, b:str, c:HashMap<~str, int>) {
// intro
if (global_tracking_flag) {
stack_depth = stack_depth + 1;
trace!("%s call fun1(%?, %?, %?)",
indent_spaces_according_to_stack_depth(), a, b, c);
}
c.insert(a,b);
// outro : would have to be like a destructor, that is called on every
return path...
if (global_tracking_flag) {
trace!("%s return from fun1 -> %?",
indent_spaces_according_to_stack_depth(), c);
stack_depth = stack_depth - 1;
}
}
Although not without cost, the --autotrace facility could even be highly
useful for runtime monitoring (and therefore better/faster/cheaper than
comprehensive debug-info). The idea being that it would be cheap enough
(surely global_tracking_flag could be persuaded to live in a register, no?)
that it could be left compiled into most non-inlined function, and
activated at runtime without bringing a production system down.
Related experience.... Justin Sheehy at Basho talks about how Erlang's
runtime monitoring facilities were under-appreciated when they started.
"Many other features that we didn’t understand the full importance of at
the time (such as the ability to inspect and modify a live system at
run-time with almost no planning or cost) have also helped us greatly in
making systems that our users and customers trust with their most critical
data." http://basho.com/erlang-at-basho-five-years-later/
Thoughts? Is --autotrace a viable idea at all?
Jason
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev