为什么程序在GDB下运行时执行的指令数量有所不同?

时间:2018-03-05 02:55:33

标签: arm gdb pthreads glibc performance-monitor

我正在使用ARM PMU计数器来计算进程在两次系统调用之间执行的指令数。特别是我正在使用" INST_RETIRED"事件,用于计算进程在用户模式下执行的指令数。 Reference: ARMv7 R/A Reference Manual。如果我在自由模式下或在GDB下运行程序,则指令数是一致的。当我尝试使用pthread_create创建线程时出现问题。当我在GDB下运行它时,同一程序在两个系统调用mprotect和clone之间执行的指令数(由函数pthread_create执行)是不同的。这意味着用户程序在调试器下运行时执行一些不同的代码,可能在库libpthread中。我已经看到了pthread_create的源代码,但找不到与trace / debug标志相关的任何内容。 Copuld任何人请指导我从哪里来的这个ambuguity?

1 个答案:

答案 0 :(得分:0)

  

我看过pthread_create的源代码,但找不到与trace / debug标志相关的任何内容

实际上有这样的代码herehere。只有在调试器下运行时,report_events才会设置为true。