GC bugs are a lot like race conditions, even if everything is in one thread, because it is nondeterministic which action will trigger GC. Disabling GC over a range of code is reminiscent of locking a mutex or disabling interrupts.
When you're developing a run-time with GC, it behooves you to run at least some of your test cases in GC torture mode, which triggers collections often (like before every allocation). Anything that is not properly nailed down over a complex operation gets scavenged. If you make it so that a reclaimed object has a garbage type tag, then the use of a prematurely reclaimed object can be caught quite soon as a type issue.
When you're developing a run-time with GC, it behooves you to run at least some of your test cases in GC torture mode, which triggers collections often (like before every allocation). Anything that is not properly nailed down over a complex operation gets scavenged. If you make it so that a reclaimed object has a garbage type tag, then the use of a prematurely reclaimed object can be caught quite soon as a type issue.