not sure why you are setting them to empty strings...
Because I don't generate default debugger configurations to match all the compilers.
And for the default debugger in every compiler I reuse the old field for the debugger's executable.
I can add new field for the compiler's default config, so the old one won't be messed up. The messing up happens only when the default.conf is created, if you have something there and you don't change '--- invalid configuration---' to something valid, the value is preserved.
So if you have new C::B and old C::B, when you switch to old C::B the debugger executable will be correctly set.