档案

Archive for the ‘C/C++’ Category

源代码中插入断点以方便调试

11月 21, 2012 留下评论

主要利用中断int 3:

#define DEBUG_BREAK do {asm volatile ("int3"); } while(0)

但是, 在没有attach调试器的情况下直接调用int3触发SIGTRAP会导致进程退出, 因此需要再这之前检查进程是否已经被调试器attach。
1,在OSX/BSD上可以使用sysctl来检测;
2,在Linux中可以通过读取/proc/self/status文件的TracerPid字段来检查进程是否被attach (如果未被attach, 则TracerPid:0);
3, Windows上则直接有IsDebuggerPresent API可以使用。
阅读更多…

分类:C/C++