【linux】Valgrind工具集详解(三):打印信息说明

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010168781/article/details/83547083

一、打印信息格式

Valgrind打印信息的格式如下,很容易和程序输出信息区分出来

== 进程ID ==Valgrind的打印信息

二、打印到何处

1、打印到文件描述符中

主要是设置打印到终端上,默认情况下为2(stderr标准错误输出)。如果要想打印到其他文件描述符(例如编号9),则可以指定 --log-fd=9。

2、打印到指定文件中

使用选项:–log-file=filename
若filename是空,则会引发终止。filename中可有三种格式信息;

  1. %p将被替换为当前进程的ID。当—trace-children=yes,而没用%p时,所有进程的信息都输向同一个文件,会比较混乱,信息也可能不全,最好文件名中包含%p。
  2. %q{FOO}被环境变量FOO的值代替,若FOO的内容奇怪的话也可能引发异常。一般不用这种格式,除了极少情况,如基于MPI(一种并行程序开发库)的程序。若用了此种格式,FOO不能为空,否则也引发异常。一些shell里面,”{””}”可能需要反斜杠转义。
  3. %%被代替为%,%不能后接任何其他字符,否则会引发异常。
3、打印到网络套接字(网络)

使用选项:–log-socket=IP:端口号
接收端使用valgrind-listener,valgrind-listener可以接受来自多达50个Valgrinded流程的同时连接。在每行输出前面,它在圆括号中打印当前活动连接数。
valgrind-listener [–exit-at-zero|-e] [port-number]
valgrind-listener 接受三个命令行选项:

  1. -e --exit-at-zero
    当连接的进程数量回落到零时,退出。没有它,它将永远运行,使用Ctrl+c来停止;
  2. –max-connect=INTEGER
    默认情况下,侦听器最多可以连接50个进程。偶尔,这个数字太小了。使用此选项可提供不同的限制。例如 --max-connect=100。
  3. portnumber
    从默认值(1500)更改它侦听的端口。指定的端口必须在1024到65535之间。相同的限制适用于由–log-socketValgrind本身指定的端口号 。

如果Valgrinded进程无法连接到侦听器,无论出于何种原因(侦听器未运行,无效或无法访问的主机或端口等),Valgrind将切换回写入stderr。

三、错误信息分析

Memcheck报告错误信息的一个例子:

==25832== Invalid read of size 4
==25832==    at 0x8048724: BandMatrix::ReSize(int, int, int) (bogon.cpp:45)
==25832==    by 0x80487AF: main (bogon.cpp:66)
==25832==  Address 0xBFFFF74C is not stack'd, malloc'd or free'd

错误信息分析:
程序在地址 0xBFFFF74C处非法读取了4字节。在程序源码bogon.cpp文件的第45行 ,ReSize(int, int, int),在程序源码bogon.cpp文件的第66行调用,等等。

Valgrind记得所有错误报告。检测到错误时,会将其与旧报告进行比较,以查看它是否重复。如果是,则记录错误,但不会发出进一步的评论。这可以避免被大量的重复错误报告所淹没。

如果想知道每个错误发生了多少次,请使用该-v选项运行。执行完成后,所有报告都会打印出来,并按其出现次数排序。这样可以轻松查看最常出现的错误。

通常,应该按照报告的顺序尝试修复错误。例如,在Memcheck上运行时,将未初始化的值复制到多个内存位置并稍后使用它们的程序将生成多个错误消息。第一个这样的错误消息可能会给出问题根本原因的最直接线索。

检测重复错误的过程非常昂贵,如果程序产生大量错误,可能会成为显着的性能开销。为避免出现严重问题,Valgrind将在看到1,000种不同的错误或者总共10,000,000个错误之后停止收集错误。在这种情况下,要停止程序并修复它,因为Valgrind在此之后不再输出任何有价值的信息。

如果不想受到上述的限制(1,000种不同的错误或者发现10,000,000个错误后停止收集错误)可以使用该 --error-limit=no选项。然后Valgrind将始终显示错误,无论有多少。但是这将会对性能产生不良影响。

猜你喜欢

转载自blog.csdn.net/u010168781/article/details/83547083