I checked the VTE API documentation.
In version 0.26 (or even earlier?), the function "vte_pty_child_setup()" appears. It's documented as "FIXMEchpe", but the documentation for vte_pty_new() says "you MUST call it before using fork or spawn with this terminal". No such remark for vte_pty_new_foreign(), used by Scope, but given that we indirectly (via gdb) connect the terminal to a spawned program, maybe vte_pty_child_setup() will help?..
Starting with 0.38, vte_pty_new_foreign() has been renamed to vte_pty_new_foreign_sync(), which sounds disturbing. A sync read from the pty is very likely to block, which is exactly what we see. Maybe we should explicitly set the master to non-blocking I/O, before / after / instead of vte_pty_child_setup()?..
Last and least, there may be a bug in VTE, or it may be simply impossible to use it for the program spawned by gdb any more. How about describing the situation to the VTE devs?