2

我正在使用 ARM PMU 计数器来计算进程在两个系统调用之间执行的指令数。特别是我使用“INST_RETIRED”事件来计算用户模式下进程执行的指令数。参考:ARMv7 R/A 参考手册. 如果我在自由模式下或在 GDB 下运行程序,指令的数量是一致的。当我尝试使用 pthread_create 创建线程时出现问题。当我在 GDB 下运行它时,同一程序在两个系统调用 mprotect 和 clone(均由函数 pthread_create 执行)之间执行的指令数不同。这意味着用户程序在调试器下运行时正在执行一些不同的代码,可能在库 libpthread 中。我已经看过 pthread_create 的源代码,但找不到与跟踪/调试标志相关的任何内容。Copuld有人请指导我,那么这种歧义来自哪里?

4

1 回答 1

0

我已经看过 pthread_create 的源代码,但找不到与跟踪/调试标志相关的任何内容

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

于 2018-03-05T04:35:55.373 回答