客户端/服务器pthreads程序未在Valgrind下执行。运行正常

时间:2017-12-05 19:05:51

标签: c linux multithreading gcc valgrind

我有一个C服务器程序,可以创建&打开命名管道的写入端(在/ var / run中),并在SIGIO信号上中断tty uart,将数据从该接口推送到管道中。

这个程序还会生成一个辅助pthread,它打开一个单独管道的读取端(同样,在/ var / run中),从中读取(阻塞),并将该数据传递回我的主线程以便写出来我的tty。

使用互斥锁结构在这些数据之间共享数据。我还有一个测试客户端程序来处理另一端。权限/文件访问权限有效。

这似乎在bash中运行良好。

我想用Valgrind加倍确定,特别是memcheck和helgrind工具,用于内存泄漏和线程错误。但是当我在valgrind中启动我的服务器程序时,它会挂起并且在我的客户端启动时不会运行。我甚至没有在程序开始时从服务器上看到我的初始启动printf。 Valgrind就坐在那里,直到我杀了它。

我正在运行以下选项:

valgrind --tool=helgrind ./server

valgrind --undef-value-errors=no ./server

输出如下(对于两个命令):

==7577== Memcheck, a memory error detector
==7577== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==7577== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==7577== Command: ./server
==7577== 
--7577-- WARNING: Serious error when reading debug info
--7577-- When reading debug info from /lib/arm-linux-gnueabihf/ld-2.24.so:
--7577-- Ignoring non-Dwarf2/3/4 block in .debug_info
--7577-- WARNING: Serious error when reading debug info
--7577-- When reading debug info from /lib/arm-linux-gnueabihf/ld-2.24.so:
--7577-- Last block truncated in .debug_info; ignoring

抑制undef-value-errors,因为ld.so有吨,而且它充斥着我的输出。

你能想到我可能做错了吗?也许ld库中缺少调试信息?如果需要,我可以转储代码,或者进一步详细说明。

谢谢。

1 个答案:

答案 0 :(得分:1)

看起来你的valgrind版本相当陈旧:

==7577== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==7577== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info

假设ld-2.24.so来自glibc,那是大约五年的工具链开发,谁知道在用于编译glibc的gcc和binutils版本时会有什么样的改进。