草庐IT

Valgrind

全部标签

c - valgrind 是否通过驱动程序跟踪内存初始化?

valgrind正在报告来自如下代码的未初始化内存错误:unsignedcharbuf[100];structdriver_commandcmd;cmd.len=sizeof(buf);cmd.buf=buf;ioctl(my_driver_fd,READ,&cmd);for(i=0;i如果我在调用驱动程序之前memset()buf,错误就会消失。valgrind能否检测linux驱动程序是否正确写入缓冲区?(我查看了驱动程序代码,它似乎是正确的,但也许我遗漏了什么。)还是它只是通过了驱动程序调用而无法知道缓冲区已写入内核?谢谢。 最佳答案

linux - 测量 Linux 多线程应用程序的堆栈使用情况

我正在为Linux嵌入式平台开发多线程应用。目前我正在将每个线程的堆栈大小(通过pthread_set_attr)设置为相当大的默认值。我想将每个线程的值微调到更小的值,以减少我的应用程序的内存使用量。我可以通过反复试验将每个线程的堆栈大小设置为逐渐变小的值,直到程序崩溃,但应用程序使用约15个线程,每个线程具有完全不同的功能/属性,因此这种方法将非常耗时。我更愿意能够直接测量每个线程的堆栈使用情况。人们可以推荐一些实用工具来做到这一点吗?(例如,我来自vxWorks背景并使用vxWorksshell中的“ti”命令直接提供有关堆栈使用情况的统计信息以及有关任务状态的其他有用信息。)谢

linux - 测量 Linux 多线程应用程序的堆栈使用情况

我正在为Linux嵌入式平台开发多线程应用。目前我正在将每个线程的堆栈大小(通过pthread_set_attr)设置为相当大的默认值。我想将每个线程的值微调到更小的值,以减少我的应用程序的内存使用量。我可以通过反复试验将每个线程的堆栈大小设置为逐渐变小的值,直到程序崩溃,但应用程序使用约15个线程,每个线程具有完全不同的功能/属性,因此这种方法将非常耗时。我更愿意能够直接测量每个线程的堆栈使用情况。人们可以推荐一些实用工具来做到这一点吗?(例如,我来自vxWorks背景并使用vxWorksshell中的“ti”命令直接提供有关堆栈使用情况的统计信息以及有关任务状态的其他有用信息。)谢

c++ - 使用 valgrind 查找 mysql c++ 客户端中的内存泄漏

我正在使用valgrind来尝试追踪内存泄漏是从mysql分发的mysqlc++客户端。在示例(resultset.cpp)和我自己的程序中,都有一个未释放的56字节block。在我自己的程序中,我已将泄漏追踪到对mysql客户端的调用。下面是我运行测试的结果:valgrind--leak-check=full--show-reachable=yes./my-executable==29858==Memcheck,amemoryerrordetector==29858==Copyright(C)2002-2009,andGNUGPL'd,byJulianSewardetal.==298

c++ - 使用 valgrind 查找 mysql c++ 客户端中的内存泄漏

我正在使用valgrind来尝试追踪内存泄漏是从mysql分发的mysqlc++客户端。在示例(resultset.cpp)和我自己的程序中,都有一个未释放的56字节block。在我自己的程序中,我已将泄漏追踪到对mysql客户端的调用。下面是我运行测试的结果:valgrind--leak-check=full--show-reachable=yes./my-executable==29858==Memcheck,amemoryerrordetector==29858==Copyright(C)2002-2009,andGNUGPL'd,byJulianSewardetal.==298

c - 检测退出时释放的 C 内存 'leaks'

假设我有一个C程序(在Linux下运行),它处理许多数据结构,有些很复杂,其中一些可以增长和收缩,但通常不应随时间增长。观察到该程序的RSS随着时间的推移逐渐增加(超过内存碎片可以解释的程度)。我想找到泄漏的东西。在valgrind下运行是这里明显的建议,但是valgrind(使用--leak-check=full和--show-reachables=yes)显示没有泄漏。我相信这是因为数据结构本身在退出时被正确地释放了,但其中一个在程序的生命周期中正在增长。例如,可能有一个随时间线性增长的链表,有人忘记删除列表中的资源,但退出清理在退出时正确地释放了列表中的所有项目。当然,如果它们被

c - 检测退出时释放的 C 内存 'leaks'

假设我有一个C程序(在Linux下运行),它处理许多数据结构,有些很复杂,其中一些可以增长和收缩,但通常不应随时间增长。观察到该程序的RSS随着时间的推移逐渐增加(超过内存碎片可以解释的程度)。我想找到泄漏的东西。在valgrind下运行是这里明显的建议,但是valgrind(使用--leak-check=full和--show-reachables=yes)显示没有泄漏。我相信这是因为数据结构本身在退出时被正确地释放了,但其中一个在程序的生命周期中正在增长。例如,可能有一个随时间线性增长的链表,有人忘记删除列表中的资源,但退出清理在退出时正确地释放了列表中的所有项目。当然,如果它们被

linux - 如何与我们的进程并行运行 Valgrind,使其性能不会下降太多?

我需要使用Valgrind来检测服务器应用程序中发生的任何内存访问违规。服务器创建许多线程。我怀疑存在导致服务器每1小时左右崩溃一次的竞争条件。我们使用Valgrind分析其内存使用情况,但服务器进程的速度急剧下降。服务器的速度下降得如此之快,以至于几乎无法使用,并且在可能的情况下没有比赛条件。有没有办法让Valgrind与我们的应用程序并行运行,这样我们就不会损失那么多性能? 最佳答案 你不能那样做。Valgrind实际上并不在native执行您的代码-而是在模拟器中运行它。这就是为什么它这么慢。所以,没有办法让它运行得更快,同时

linux - 如何与我们的进程并行运行 Valgrind,使其性能不会下降太多?

我需要使用Valgrind来检测服务器应用程序中发生的任何内存访问违规。服务器创建许多线程。我怀疑存在导致服务器每1小时左右崩溃一次的竞争条件。我们使用Valgrind分析其内存使用情况,但服务器进程的速度急剧下降。服务器的速度下降得如此之快,以至于几乎无法使用,并且在可能的情况下没有比赛条件。有没有办法让Valgrind与我们的应用程序并行运行,这样我们就不会损失那么多性能? 最佳答案 你不能那样做。Valgrind实际上并不在native执行您的代码-而是在模拟器中运行它。这就是为什么它这么慢。所以,没有办法让它运行得更快,同时

c++ - 如何有效地使用 valgrind

我刚刚开始学习使用valgrind和--tool=memcheck但我遇到的困难实际上是发现问题。例如一个这样的问题是这样的。==12561==Conditionaljumpormovedependsonuninitialisedvalue(s)==12561==at0x425779:Server::HandleReceiveFrom(boost::system::error_codeconst&,unsignedlong)(mUUID.h:63)==12561==by0x428EC4:boost::asio::detail::reactive_socket_recvfrom_op,b