Tricks can generally be composed to produce a combined effect. Some trick combinations will not work, though, because they have contrary purposes or interfering implementations. Similarly, signals can be skipped or modified, and tricks are notified when processes terminate. Process memory can also be changed, permanently or just for the duration of a call. The wait system call must also be carefully emulated, since ptrace disrupts the normal wait reporting mechanism.
Some problems are due to the current implementation or the limitations of the ptrace interface.
Other more general problems arise from the way that the Linux kernel works or because of the general difficulty of controlling program behavior. As an example, the subjective feel of Netscape Navigator is a little faster than running it on a remote X display over a 28.8 modem. Program behavior can diverge. Under Linux, program behavior can differ while the program is being traced, versus when it is not. One simple example is that nanosleep calls are interrupted by ignored signals under tracing, which doesn't happen in the untraced case.