There are several flavors of debugging an application such as - print debugging, post mortem / core-dump analysis, live debugging and remote debugging. Out of all these methods of debugging - remote debugging is the trickiest one. In general, you will always have your source code files on the same machine on which you are debugging. With the source code on the same machine, your debugger will be able to map each instruction to the files on the disk and provide seamless stepping through the code being debugged. But at times, when you are debugging some live setup where the source code is not available it becomes very difficult to understand the flow of the program while debugging.