I used to look at the source for %G for this, but lately Intersystems has stopped distributing the .INT code. I guess in theory I could use an eXecute statement in a loop to check $D on every legal global name but that's silly and unreasonably slow.
So what is currently the right way to do it?
You could always use the class query in %SYS.GlobalQuery.
use special global variable ^$GLOBAL
for example: