I parse the debug line directives in the assembler output. Something about the way rust/llvm outputs with -O makes this a little worse than the equivalent in C++/clang but it's 'good enough' to get the gist of what's happening I think.
Oh, nice. Rust's debuginfo does seem to have a few peculiarities where lines numbers don't quite work out (or something, I haven't really been able to "quantify" it); but there's currently someone working on debuginfo.