如何将以下命令的输出保存到文本文件中,以便编写分析器?
(gdb) x/10000000s 0x20000000
这实际上很容易:
(gdb) set height 0 # prevent GDB from stopping every screenfull
(gdb) set logging on # GDB output is now also copied into gdb.txt
(gdb) x/10000000s 0x20000000
(gdb) quit
瞧,享受你的输出gdb.txt
。
我有一个错误(内存泄漏)软件。...“将 gdb 格式的输出保存到文件中,并运行模式匹配以查看出现最多的魔术字符串。”
这种想法不太可能产生令人满意的结果。考虑:
void some_function() {
std::vector<string> *v = new std::vector<string>();
// code to insert and use 1000s of strings into "v".
return; // Oops: forgot to delete "v".
}
即使您可以有效地“看到出现最多的魔术字符串”,您也会发现您正在泄漏所有字符串;但它们不是问题,泄漏“v”是问题。
所以你真正想要的是构建一个图,其中分配的区域指向其他分配的区域,并找到该图的“根”。这几乎是不可能手工完成的。
那么什么更有可能帮助您找到内存泄漏?幸运的是,有很多工具可以为您解决这个问题: