Well, the output of #[derive(Debug)] has got little to do with the compiler per-say. It is a proc-macro which on expansion call debug() on all the fields/variants. Only some of the root level "things", like u32 have a direct impl. Almost everything else is a derive. So, if:
Some struct changes its Debug impl
Or the proc-macro is itself changed
the output will change, otherwise not. Now I imagine that stdlib maintainers won't randomly go about changing it. But I don't think there are guarantees.
No. In practice, it shouldn't change much, since for many types there's one main way to make a human-readable debugging output, but this isn't guaranteed.