我正在做一个项目(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()
(在移动构造函数中)之外,我没有太多限制。