gcov 不适用于 pthreads、WSL-2、Clion
gcov not working with pthreads, WSL-2, Clion
背景:
如果我不使用任何线程或只生成 1 个线程,这似乎工作正常,这使得这一切更加混乱。
Clion 项目here
问题:
我设置了一个启动 2 个线程并从主线程、线程 2 和线程 3 打印到控制台的基本示例项目。
#include <iostream>
#include <thread>
void thread1()
{
for(int i = 0; i < 10000; i++)
{
std::cout << "thread1" << std::endl;
}
}
void thread2()
{
for(int i = 0; i < 10000; i++)
{
std::cout << "thread2" << std::endl;
}
}
int main()
{
std::cout << "Hello, World!" << std::endl;
std::thread threadObj(thread1);
std::thread threadObj2(thread2);
for(int i = 0; i < 10000; i++)
{
std::cout<<"MainThread"<<std::endl;
}
threadObj.join();
std::cout<<"Exit of Main function"<<std::endl;
return 0;
}
编译使用:
--coverage -pthread -g -std=gnu++2a
当我在 clion 中 运行 使用“运行 'EvalTest' with Coverage”时,出现以下错误:
Could not find code coverage data
所以它没有生成所需的 gcov 文件,但如果我注释掉以下代码行,它就可以正常工作:
int main()
{
std::cout << "Hello, World!" << std::endl;
std::thread threadObj(thread1);
// std::thread threadObj2(thread2);
for(int i = 0; i < 10000; i++)
{
std::cout<<"MainThread"<<std::endl;
}
threadObj.join();
std::cout<<"Exit of Main function"<<std::endl;
return 0;
}
需要执行 threadObj.join() 和 threadObj2.join()。所以代码看起来像:
int main()
{
std::cout << "Hello, World!" << std::endl;
std::thread threadObj(thread1);
std::thread threadObj2(thread2);
for(int i = 0; i < 10000; i++)
{
std::cout<<"MainThread"<<std::endl;
}
threadObj.join();
threadObj2.join(); // need to join both thread for gcov to work properly
std::cout<<"Exit of Main function"<<std::endl;
return 0;
}
背景: 如果我不使用任何线程或只生成 1 个线程,这似乎工作正常,这使得这一切更加混乱。
Clion 项目here
问题: 我设置了一个启动 2 个线程并从主线程、线程 2 和线程 3 打印到控制台的基本示例项目。
#include <iostream>
#include <thread>
void thread1()
{
for(int i = 0; i < 10000; i++)
{
std::cout << "thread1" << std::endl;
}
}
void thread2()
{
for(int i = 0; i < 10000; i++)
{
std::cout << "thread2" << std::endl;
}
}
int main()
{
std::cout << "Hello, World!" << std::endl;
std::thread threadObj(thread1);
std::thread threadObj2(thread2);
for(int i = 0; i < 10000; i++)
{
std::cout<<"MainThread"<<std::endl;
}
threadObj.join();
std::cout<<"Exit of Main function"<<std::endl;
return 0;
}
编译使用:
--coverage -pthread -g -std=gnu++2a
当我在 clion 中 运行 使用“运行 'EvalTest' with Coverage”时,出现以下错误:
Could not find code coverage data
所以它没有生成所需的 gcov 文件,但如果我注释掉以下代码行,它就可以正常工作:
int main()
{
std::cout << "Hello, World!" << std::endl;
std::thread threadObj(thread1);
// std::thread threadObj2(thread2);
for(int i = 0; i < 10000; i++)
{
std::cout<<"MainThread"<<std::endl;
}
threadObj.join();
std::cout<<"Exit of Main function"<<std::endl;
return 0;
}
需要执行 threadObj.join() 和 threadObj2.join()。所以代码看起来像:
int main()
{
std::cout << "Hello, World!" << std::endl;
std::thread threadObj(thread1);
std::thread threadObj2(thread2);
for(int i = 0; i < 10000; i++)
{
std::cout<<"MainThread"<<std::endl;
}
threadObj.join();
threadObj2.join(); // need to join both thread for gcov to work properly
std::cout<<"Exit of Main function"<<std::endl;
return 0;
}