Great paper on anti-debugging techniques from a developers perspective, and can also be used for reverse engineering:

https://docs.google.com/gview?url=https://www.veracode.com/images/pdf/whitepaper_antidebugging.pdf&pli=1

Abstract— Anti-debugging is the implementation of one or more
techniques within computer code that hinders attempts at
reverse engineering or debugging a target binary. Within this
paper we will present a number of the known methods of anti-
debugging in a fashion that is easy to implement for a developer
of moderate expertise. We will include source code, whenever
possible, with a line by line explanation of how the anti-
debugging technique operates. The goal of the paper is to educate
development teams on anti-debugging methods and to ease the
burden of implementation.