我正在编写使用 ptrace 的单步测试的应用程序。总的来说,这有效,但我有一个问题。这就是我所做的:
这是有效的,直到被追踪的程序在单步执行期间使用系统调用 当它这样做时,SIGTRAP将被交付,并且检查singlestep / hw断点会给出答案,这不是这些,所以SIGTRAP被交付。这是错误的,因为跟踪过程本身不会做任何应该导致SIGTRAP的事情,所以不应该传递这个。
我现在检查的内容:
- 当没有追踪过程时(当然),这不会发生
- 当跟踪过程而不是单步处理时,不会发生这种情况
- 发生这种情况时,DR_TRAPx和DR_SINGLESTEP未设置
- 当发生这种情况时siginfo的si.code == TRAP_BKPT (而不是像断点一样的TRAP_HWBKPT)
- 32位应用程序由32位跟踪器跟踪,32位应用程序跟踪器跟踪32位,64位跟踪器跟踪64位时发生这种情况。
我的问题是:为什么我会收到此SIGTRAP?
(这个exacly来自/可以在其他情况下发生TRAP_BKPT吗?)