c – 如何有效地使用valgrind
发布时间:2020-12-13 19:09:45 所属栏目:Linux 来源:网络整理
导读:我刚开始学习使用valgrind和tool = memcheck 但我遇到的麻烦实际上是找到了问题. 例如 一个这样的问题是这个. ==12561== Conditional jump or move depends on uninitialised value(s)==12561== at 0x425779: Server::HandleReceiveFrom(boost::system::erro
我刚开始学习使用valgrind和–tool = memcheck 但我遇到的麻烦实际上是找到了问题. 例如 一个这样的问题是这个.
另一个是这个
我想知道如何最有效地追踪这些类型的问题. (条件跳转和未初始化的值.) 编辑 这有什么值得担心的吗?似乎消失了选项–run-libc-freeres = no.
最佳答案
基本上,每个Valgrind错误都会显示堆栈跟踪.堆栈跟踪的较高部分可能对您没有用,因为它们引用库代码.但是,最终这些问题源于代码中的问题.首先扫描堆栈跟踪的第一部分,它引用应用程序中的一行代码(而不是库函数).如果检查堆栈跟踪,您将看到obbs.cpp的第198行是指向您的应用程序导致您的第一个问题的原因.在堆栈的上方,您可以看到mUUID.h的第63行最终是通过if语句或循环计算未初始化变量的位置.
错误“条件跳转或移动取决于未初始化的值”意味着您有一个未初始化的变量,用于影响程序的流量.在您的情况下,看起来您正在将未初始化的变量传递给Boost库函数,并且库函数正在调用您的处理程序类,该类在条件语句中计算未初始化的变量.这意味着您的程序显示未定义的行为. 导致此问题的一个简单示例将是:
首先检查obbs.cpp的第198行,然后向上移动堆栈跟踪,直到意识到问题为止. 我还要补充说,如果使用所有警告进行编译,编译器有时会捕获这样的错误. (例如,在GCC中,确保使用-Wall标志进行编译) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |