当 GDB 停止进程时如何停止 Linux 计时器

Gal*_*leo 5 linux timer

在 Linux 程序中,一个进程中有多个线程。一些线程正在调用clock_gettime(CLOCK_MONOTONIC, &time) ; 为了计算超时值,例如查看某些操作是否已在规定时间内完成。如果系统正常运行的话,这是完美的。但是,如果进程被某个 GDB 断点停止,Linux 系统计时器会在后台继续计数,并且如果 GDB 继续执行该进程,则会超出所有超时值。

有人能告诉我,当 GDB 由于断点而停止进程时,是否有办法启动/停止(进程本地)计时器?

作为替代方案,我可以创建自己的计时器系统,该系统将由系统计时器的信号触发,但随后我需要在 GDB 停止进程时阻止这些信号。这可能吗 ?

小智 0

我知道的唯一方法有点问题......

将 CLOCK_MONOTONIC 的所有使用更改为 CLOCK_PROCESS_CPUTIME_ID

  CLOCK_PROCESS_CPUTIME_ID (since Linux 2.6.12)
         A clock that measures (user and system) CPU time consumed by (all of the threads in) the calling process.
Run Code Online (Sandbox Code Playgroud)

当 gdb 停止进程时它就会停止。

我说有点问题有几个原因......

  • 它在多核上的 pthreads 上表现不佳。
  • 当您阻塞 I/O 时,它无法正常工作
  • 它不能与 sleep() 或 sigsuspend() 一起正常工作

作为“帮助我调试黑客”,它有点起作用,所以也许可以使其可切换。