It's undefined behavior to declare that a function returns a value, but then not actually return a value (unless you throw an exception, of course).
So, "where" the garbage comes from, is irrelevant, and it's extremely unlikely that a debugger will be able to help you here, because you are right, no object is being constructed. So, what happens here:
fooOne = (fooTwo = fooThree);
is (probably) that the compiler looks for where the return object should have been constructed, treats that location as though an object exists there, and assigns that object to fooOne. However, since no object was ever constructed there, you get garbage. I say "probably", because, like I said, it's undefined behavior, so any thing could happen, as far as the standard is concerned.