I don't use tmux, but terminator instead. Where tmux is a terminal multiplexor, terminator is .. a terminal! With amazing split-window abilities ..
So I work like this: a "main window" in terminator with my vim session (in which vim administers its own windows - great with cscope integration and so on) and two sub-windows. The two sub-windows are for doing things like shell hacking on the project, another for builds, and so on.
To cut/paste between the windows, when necessary, I either use tee to put things in /tmp for easy ":r"-ing in vim, or I just use the window manager clipboard. In the 'main editing window' where vim has its own windows for each file and so on, yank/paste work great - to go from shell to shell, mouse-select/mouse-middle-button work great.
Debugging, you say, with line-by-line code inspection? In a sub-shell: 'gdb -tui' is awesome. I also build most of my projects such that ':make' returns a proper vim clist that can easily be easily navigated through standard vim bindings..
I don't use tmux, screen, for the simple reason that I like the flexibility that having terminator manage the windows gives .. Check it out, in case you're interested.