C++ 自动化 valgrind 过程

问题描述 投票:0回答:0

我正在做一个项目(HashMap - COVID-19 数据库,其中包括从

.csv
文件中读取数据并使用单独的链接将它们添加到地图中以处理冲突),我已经完成了它。我想添加的是能够从“菜单”
执行
valgrind

命令
/**
 * @brief Displays the menu for user interaction.
 */
void menu() {
  std::cout << "[1]\tCreate a Table\n"
            << "[2]\tAdd a Data entry\n"
            << "[3]\tGet a Data entry\n"
            << "[4]\tRemove a Data entry\n"
            << "[5]\tDisplay Table\n"
            << "[6]\tLog Data [db.log]\n"
            << "[7]\tLog Memory [valgrind.log]\n"
            << "[8]\tQuit\n";
}

如您所见,我正在处理#7。除了

int argv
char argc*[]
in
int main()
之外,我没有太多使用/传递命令行参数的经验。我做了一些研究,并在网上找到了一些使用这些库的代码:

#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

老实说,我很害怕使用它们,因为我之前在 ssh 服务器上引爆过 fork 炸弹。我正在使用多线程,显然,代码太糟糕了,它发送/运行了一堆子进程,导致服务器崩溃……

这是我到目前为止所得到的,非常基本的东西:

void CovidDB::log_memory() {
  #ifdef LOG
  std::string command = "valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --num-callers=20 --log-file=valgrind.log ./main";
  std::system(command.c_str());

  log(); //logs data to a covid_db.log file

  std::exit(EXIT_SUCCESS);
}
#endif

我遇到的唯一问题是,当用户选择 7 时,它会重新运行程序,用户必须自行退出才能获得报告。有没有办法避免这种情况? (我的意思是让它完全自动化)

作业的要求是对其进行彻底测试,其中包括测试内存错误。我过去完成它的唯一方法是使用像

valgrind
这样的工具(我知道存在类似于valgrind的其他工具(valgrind是唯一安装了root的内存工具),但如果有任何其他方式,请告诉我)。

除了不使用派生类、多态和

std::move()
(在移动构造函数中)之外,我没有太多限制。

c++ valgrind
© www.soinside.com 2019 - 2024. All rights reserved.