13

Google Testフレームワークを使用して作成された死亡テストを実行すると、各テストに対して次の警告が生成されます。

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

LinuxでGoogleTestにスレッド数を検出させる方法はありますか?

4

2 に答える 2

11

ソースコードを調べたところ、スレッド数の検出はMacOS XとQNXでのみ実装されており、Linuxやその他のプラットフォームでは実装されていないことがわかりました。そこで、のエントリ数を数えることで、不足している機能を自分で実装しました/proc/self/task。他の人にも役立つかもしれないので、ここに投稿します(Google Testグループにも送信しました):

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日の時点で、GoogleTestは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 に答える