GDM is obviously much more complicated than I thought. Having been wondering why GDM doesn't read my ~/.bash_profile for days, I finally found a
thread on debian-user mailing list.
Then I spend a few hours poking around and found out adding ~/.xsession doesn't work (most probably due to /etc/gdm/Sessions/Default doesn't exist, but I am not sure), and decided to just hack on system configuration files. I add a new session /etc/gdm/Sessions/User, copied the one-line /etc/gdm/Sessions/Debian, add lines to source /etc/profile and ~/.bash_profile. Go back to GDM, choose Sessions->User in menu, now it works, yay!
However the gnome-terminal still use some strange $PATH. Hmm, way to go.