gpt4 book ai didi

c++ - C/C++ 经过的进程周期,不包括在断点处

转载 作者:行者123 更新时间:2023-11-28 04:08:21 27 4
gpt4 key购买 nike

请参阅以下代码,这是我尝试打印循环之间耗时。

void main()
{
while (true)
{
static clock_t timer;

clock_t t = clock();
clock_t elapsed = t - timer;
float elapsed_sec = (float)elapsed / (float)CLOCKS_PER_SEC;
timer = t;

printf("[dt:%d ms].\n", (int)(elapsed_sec*1000));
}
}

但是,如果我设置一个断点并在那里停留 10 秒,当我继续执行时,耗时包括这 5 秒——我不希望这样,因为我的预期用途。

我假设 clock() 是错误的函数,但正确的函数是什么?请注意,如果没有针对此的标准 C 或 C++ 单次调用——那么,您如何计算它?有posix方法吗?

我怀疑这实际上是只有特定于平台的调用才能知道的信息。如果是这样的话,我想至少知道如何在 Windows (msvc) 上这样做。

最佳答案

是的,尝试测量进程的 CPU 时间将取决于操作系统的支持。不过,我认为您的方法存在缺陷,而不是查看各种操作系统提供的支持。

调试通常使用关闭了大多数优化的调试版本(以便更轻松地执行诸如准确设置断点之类的操作)。未优化构建的时间缺乏实用值(value)。因此,当您使用断点时,通常应忽略程序的任何计时——即使断点位于计时部分之外。

为了结合使用断点和计时,我会分两个阶段进行调试。在一个阶段中,您设置断点并查看调试构建中发生的情况。在另一个阶段,您使用相同的输入(如果有帮助,将文件重定向到 std::cin)并在发布构建中对过程计时。当您确定正在发生的事情时,各个阶段之间可能会有一些来回。没关系;关键不是要有两个阶段,而是要将断点和时间分开。

关于c++ - C/C++ 经过的进程周期,不包括在断点处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58312194/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com