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



在Linux程序中,我在一个进程中有多个线程。一些线程正在调用clock_gettime(clock_MONOTONIC,&time);以便计算超时值,例如查看某些动作是否在时间内完成。如果系统正常运行,这将非常有效。但是,如果进程被某个GDB断点停止,Linux系统计时器将在后台继续计数,如果GDB继续执行进程,则会超过所有超时值。

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

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

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

将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.

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

我说有点问题,有几个原因。。。。

  • 在多核上使用pthreads不会很好
  • 当您阻止I/O时,它无法正常工作
  • 它不能与sleep()或sigsuspend()一起正常工作

作为";帮我调试hack";它有点工作,所以也许可以切换。

最新更新