Valgrind手册翻译(下)

来源:互联网 发布:广州网络教育 编辑:程序博客网 时间:2024/04/30 14:31
 Valgrind手册翻译(下)
2008-03-28 14:19
MALLOC()相关的选项:
       对于使用自有版本的malloc() (例如Memcheck和massif),下面的选项可以使用。

       --alignment=<number> [default: 8]
              默认Valgrind的malloc(),realloc(), 等等,是8字节对齐地址的。这
              是大部分处理器的标准。然而,一些程序可能假定malloc()等总是返回
              16字节或更多对齐的内存。提供的数值必须在8和4096区间之内,并且
              必须是2的幂数。

非通用选项:
       这些选项可以用于所有的工具,它们影响Valgrind core的几个特性。大部分人不
       会用到这些选项。

       --run-libc-freeres=<yes|no> [default: yes]
       GNU C库(libc.so),所有程序共用的,可能会分配一部分内存自已用。通
              常在程序退出时释放内存并不麻烦 -- 这里没什么问题,因为Linux内核在
              一个进程退出时会回收进程全部的资源,所以这只是会造成速度慢。
             
              glibc的作者认识到这样会导致内存检查器,像Valgrind,在退出时检查
              内存错误的报告glibc的内存泄漏问题,为了避免这个问题,他们提供了
              一个__libc_freeres()例程特别用来让glibc释放分配的所有内存。
              因此Memcheck在退出时尝试着去运行__libc_freeres()。

              不幸的是,在glibc的一些版本中,__libc_freeres是有bug会导致段错误的。
              这在Red Hat 7.1上有特别声明。所以,提供这个选项来决定是否运行
              __libc_freeres。如果你的程序看起来在Valgrind上运行得很好,但是在
              退出时发生段错误,你可能需要指定--run-libc-freeres=no来修正,这将
              可能错误的报告libc.so的内存泄漏。

       --sim-hints=hint1,hint2,...
              传递杂凑的提示给Valgrind,轻微的修改模拟行为的非标准或危险方式,
              可能有助于模拟奇怪的特性。默认没有提示打开。小心使用!目前已知
              的提示有:
              o lax-ioctls: 对ioctl的处理非常不严格,唯一的假定是大小是正确的。
              不需要在写时缓冲区完全的初始化。没有这个,用大量的奇怪的ioctl
              命令来使用一些设备驱动将会非常烦人。
              o enable-inner:打开某些特殊的效果,当运行的程序是Valgrind自身时。

       --kernel-variant=variant1,variant2,...
              处理系统调用和ioctls在这个平台的默认核心上产生不同的变量。这有助
              于运行在改进过的内核或者支持非标准的ioctls上。小心使用。如果你不
              理解这个选项做的是什么那你几乎不需要它。已经知道的变量有:
              o bproc: 支持X86平台上的sys_broc系统调用。这是为了运行在BProc,
              它是标准Linux的一个变种,有时用来构建集群。

       --show-emwarns=<yes|no> [default: no]
              当这个选项打开时,Valgrind在一些特定的情况下将对CPU仿真产生警告。
              通常这些都是不引人注意的。

       --smc-check=<none|stack|all> [default: stack]
              这个选项控制Valgrind对自我修改的代码的检测。Valgrind可以不做检测,
              可以检测栈中自我修改的代码,或者任意地方检测自我修改的代码。注意
              默认选项是捕捉绝大多数情况,到目前我们了解的情况为止。使用all选项
              时会极大的降低速度。(但是用none选项运行极少影响速度,因为对大多数
              程序,非常少的代码被添加到栈中)


调试VALGRIND选项:
       还有一些选项是用来调试Valgrind自身的。在运行一般的东西时不应该需要的。
       如果你希望看到选项列表,使用--help-debug选项。

内存检查选项:
       --leak-check=<no|summary|yes|full> [default: summary]
              当这个选项打开时,当客户程序结束时查找内存泄漏。内存泄漏意味着
              有用malloc分配内存块,但是没有用free释放,而且没有指针指向这块
              内存。这样的内存块永远不能被程序释放,因为没有指针指向它们。如
              果设置为summary,Valgrind会报告有多少内存泄漏发生了。如果设置为
              full或yes,Valgrind给出每一个独立的泄漏的详细信息。

       --show-reachable=<yes|no> [default: no]
              当这个选项关闭时,内存泄漏检测器只显示没有指针指向的内存块,或
              者只能找到指向块中间的指针。当这个选项打开时,内存泄漏检测器还
              报告有指针指向的内存块。这些块是最有可能出现内存泄漏的地方。你
              的程序可能,至少在原则上,应该在退出前释放这些内存块。这些有指
              针指向的内存块和没有指针指向的内存块,或者只有内部指针指向的块,
              都可能产生内存泄漏,因为实际上没有一个指向块起始的指针可以拿来释
              放,即使你想去释放它。

       --leak-resolution=<low|med|high> [default: low]
              在做内存泄漏检查时,确定memcheck将怎么样考虑不同的栈是相同的情况。
              当设置为low时,只需要前两层栈匹配就认为是相同的情况;当设置为med,
              必须要四层栈匹配,当设置为high时,所有层次的栈都必须匹配。
             
              对于hardcore内存泄漏检查,你很可能需要使用--leak-resolution=high和
              --num-callers=40或者更大的数字。注意这将产生巨量的信息,这就是为什
              么默认选项是四个调用者匹配和低分辨率的匹配。
              注意--leak-resolution= 设置并不影响memcheck查找内存泄漏的能力。它
              只是改变了结果如何输出。

       --freelist-vol=<number> [default: 5000000]
              当客户程序使用free(C中)或者delete(C++)释放内存时,这些内存并不是
              马上就可以用来再分配的。这些内存将被标记为不可访问的,并被放到一
              个已释放内存的队列中。这样做的目的是,使释放的内存再次被利用的点
              尽可能的晚。这有利于memcheck在内存块释放后这段重要的时间检查对块
              不合法的访问。

              这个选项指定了队列所能容纳的内存总容量,以字节为单位。默认的值是
              5000000字节。增大这个数目会增加memcheck使用的内存,但同时也增加了
              对已释放内存的非法使用的检测概率。

       --workaround-gcc296-bugs=<yes|no> [default: no]
              当这个选项打开时,假定读写栈指针以下的一小段距离是gcc 2.96的bug,
              并且不报告为错误。距离默认为256字节。注意gcc 2.96是一些比较老的
              Linux发行版(RedHat 7.X)的默认编译器,所以你可能需要使用这个选项。
              如果不是必要请不要使用这个选项,它可能会使一些真正的错误溜掉。
              一个更好的解决办法是使用较新的,修正了这个bug的gcc/g++版本。

       --partial-loads-ok=<yes|no> [default: no]
              控制memcheck如何处理从地址读取时字长度,字对齐,因此哪些字节是可
              以寻址的,哪些是不可以寻址的。当设置为yes是,这样的读取并不抛出
              一个寻址错误。而是从非法地址读取的V字节显示为未定义,访问
              合法地址仍然是像平常一样映射到内存。

              设置为no时,从部分错误的地址读取与从完全错误的地址读取同样处理:
              抛出一个非法地址错误,结果的V字节显示为合法数据。

              注意这种代码行为是违背ISO C/C++标准,应该被认为是有问题的。如果可
              能,这种代码应该修正。这个选项应该只是做为一个最后考虑的方法。

       --undef-value-errors=<yes|no> [default: yes]
              控制memcheck是否检查未定义值的危险使用。当设为yes时,Memcheck的行
              为像Addrcheck, 一个轻量级的内存检查工具,是Valgrind的一个部分,它
              并不检查未定义值的错误。使用这个选项,如果你不希望看到未定义值错误。


CACHEGRIND选项:
       手动指定I1/D1/L2缓冲配置,大小是用字节表示的。这三个必须用逗号隔开,中间
       没有空格,例如:
           valgrind --tool=cachegrind --I1=65535,2,64

       你可以指定一个,两个或三个I1/D1/L2缓冲。如果没有手动指定,每个级别使用
       普通方式(通过CPUID指令得到缓冲配置,如果失败,使用默认值)得到的配置。

       --I1=<size>,<associativity>,<line size>
              指定第一级指令缓冲的大小,关联度和行大小。

       --D1=<size>,<associativity>,<line size>
              指定第一级数据缓冲的大小,关联度和行大小。

       --L2=<size>,<associativity>,<line size>
              指定第二级缓冲的大小,关联度和行大小。

CALLGRIND选项:
       --heap=<yes|no> [default: yes]
              当这个选项打开时,详细的追踪堆的使用情况。关闭这个选项时,
              massif.pid.txt或massif.pid.html将会非常的简短。

       --heap-admin=<number> [default: 8]
              每个块使用的管理字节数。这只能使用一个平均的估计值,因为它可能变化。
              glibc使用的分配器每块需要4~15字节,依赖于各方面的因素。管理已经释放
              的块也需要空间,尽管massif不计算这些。             

       --stacks=<yes|no> [default: yes]
              当打开时,在剖析信息中包含栈信息。多线程的程序可能有多个栈。

       --depth=<number> [default: 3]
              详细的堆信息中调用过程的深度。增加这个值可以给出更多的信息,但是
              massif会更使这个程序运行得慢,使用更多的内存,并且产生一个大的
              massif.pid.txt或者massif.pid.hp文件。

       --alloc-fn=<name>
              指定一个分配内存的函数。这对于使用malloc()的包装函数是有用的,可以
              用它来填充原来无效的上下文信息。(这些函数会给出无用的上下文信息,
              并在图中给出无意义的区域)。指定的函数在上下文中被忽略,例如,像对
              malloc()一样处理。这个选项可以在命令行中重复多次,指定多个函数。

       --format=<text|html> [default: text]
              产生text或者HTML格式的详细堆信息,文件的后缀名使用.txt或者.html。

HELGRIND选项:
       --private-stacks=<yes|no> [default: no]
              假定线程栈是私有的。

       --show-last-access=<yes|some|no> [default: no]
              显示最后一次字访问出错的位置。

LACKEY选项:
       --fnname=<name> [default: _dl_runtime_resolve()]
              对<name>函数计数。

       --detailed-counts=<no|yes> [default: no]
              对读取,存储和alu操作计数。

参考:
        /usr/share/doc/valgrind/html/index.html, 和/或者
       http://www.valgrind.org/docs/manual/index.html.

作者信息:
       Julian Seward <jseward@acm.org>是Valgrind的初始作者,在
       /usr/share/doc/valgrind/AUTHORS还有其他的贡献者的信息。
       这份手册由Andres Roldan <aroldan@debian.org>为Debian工程编写,但是可以在
       任何其它发行版上使用。
      
       2.4.0版本的更新,重排,和扩展由Robert Walsh <rjwalsh@durables.org>,
       后来由其它的Valgrind开发者完成。

       本手册的翻译工作由邓杰和庄礼深同学共同完成。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 济宁社保卡丢了怎么办 农村医疗本丢了怎么办 常熟医保卡丢了怎么办 农民社保卡丢了怎么办 常熟社保卡坏了怎么办 社保卡丢失补办期看病怎么办 社保卡补办期间看病怎么办 医保卡冻结了出院结算怎么办 住院医保卡钱不够怎么办 住院押金条丢了怎么办 急用新社保卡要怎么办 看病没带社保卡怎么办 医保卡掉了住院怎么办 厦门医保卡丢了怎么办 成都医保卡丢了怎么办 长春医保卡丢了怎么办 县城医保卡丢了怎么办 医保卡丢了怎么办南宁 西安职工医保丢了怎么办 重庆医保卡丢了怎么办 外地医保卡丢了怎么办 换单位后医保卡怎么办 单位没交失业金怎么办 沈阳医保卡密码忘了怎么办 西安网约车资格证怎么办 红跑车卡丢了怎么办 苏州住房公积金密码忘了怎么办 公积金查询密码忘记了怎么办 公积金账户密码忘记了怎么办 公积金网上查询密码忘记了怎么办 苏州改公积金密码忘了怎么办 与单位解除劳动合同公积金怎么办 在泰国钱包丢了怎么办 中山车牌网上选号后怎么办 买楼房70年以后怎么办 暂住证过期2个月怎么办 换领驾驶证超期了怎么办 车牌租出去要不回来怎么办 汽车放久了没电怎么办 上海网约车资格证怎么办 手机掉在滴滴上怎么办