13

运行使用 Google 测试框架编写的死亡测试时,会为每个测试生成以下警告:

[WARNING] .../gtest-death-test.cc:789:: Death tests use fork(), which is unsafe
particularly in a threaded context. For this test, Google Test couldn't detect
the number of threads.

有没有办法让 Google Test 检测 Linux 上的线程数?

4

2 回答 2

11

我查看了源代码,结果发现线程数的检测仅适用于 MacOS X 和 QNX,而不适用于 Linux 或其他平台。所以我通过计算/proc/self/task. 由于它可能对其他人有用,我将其发布在这里(我也将其发送到Google 测试组):

size_t GetThreadCount() {
  size_t thread_count = 0;
  if (DIR *dir = opendir("/proc/self/task")) {
    while (dirent *entry = readdir(dir)) {
      if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0)
        ++thread_count;
    }
    closedir(dir);
  }
  return thread_count;
}

截至 2015 年 8 月 25 日,Google Test在 Linux 上实现GetThreadCount

size_t GetThreadCount() {
  const string filename =
      (Message() << "/proc/" << getpid() << "/stat").GetString();
  return ReadProcFileField<int>(filename, 19);
}
于 2012-12-28T00:57:25.603 回答
6

如果您不太关心测试执行时间,一个方便的替代方法是使用:

::testing::FLAGS_gtest_death_test_style = "threadsafe";

更多细节在这里

于 2014-03-20T23:36:20.980 回答