I am debugging a system which consist of a kernel and some user programs and I want to trace one of these user programs. The problem is they are all loaded at the same virtual address; so that when I set a breakpoint at an address; it gets hit when the execution passes by this address in any of my user programs. I know that one way to solve it would be to load them in different address spaces, but I would like to avoid it if there is a better way...
I use qemu to emulate x86 architecture in order to run the system (Kernel + user code). In order to debug, I use an external gdb client which connects to gdbserver running on qemu.