Valgrind - 无法理解错误输出 [英] Valgrind - Can't understand error output

查看:238
本文介绍了Valgrind - 无法理解错误输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很抱歉,如果我最终做错了事情。
确定我的问题是如下:



我只是编写了一些非常简单的东西,但是当你看看Valgrind错误输出时,它只会让我感到困惑。 / p>

代码:

  #include< stdio.h> 
#include< stdlib.h>

int main(int argc,char * argv [])
{
int num1 = 100;
double num2 = 1.2;

printf(Number 1 one is:%d.\\\
第二个是:%f.\\\
,num1,num2);

return 0;
}

Valgrind错误报告:

  $ valgrind --leak-check = full ./yaq 
== 50642 == Memcheck,内存错误检测器
== 50642 ==版权( C)2002-2013和GNU GPL'd,由Julian Seward等人
== 50642 ==使用Valgrind-3.11.0.SVN和LibVEX;重新运行-h的版权信息
== 50642 ==命令:./yaq
== 50642 ==
--50642-- ./yaq:
--50642 - dSYM目录有错UUID;考虑使用--dsymutil = yes
== 50642 ==条件跳转或移动取决于未初始化的值
== 50642 ==在0x1003FCC3F:_platform_memchr $ VARIANT $ Haswell(在/ usr / lib /system/libsystem_platform.dylib)
== 50642 == by 0x1001F0B96:__sfvwrite(in /usr/lib/system/libsystem_c.dylib)
== 50642 == by 0x1001FAFE5:__vfprintf(in / usr /lib/system/libsystem_c.dylib)
== 50642 == by 0x1002209AE:__v2printf(in /usr/lib/system/libsystem_c.dylib)
== 50642 == by 0x100220C80:__xvprintf(in /usr/lib/system/libsystem_c.dylib)
== 50642 == by 0x1001F6B71:vfprintf_l(in /usr/lib/system/libsystem_c.dylib)
== 50642 == by 0x1001F49D7:printf (在/usr/lib/system/libsystem_c.dylib中)
== 50642 == 0x100000F32:main(in ./yaq)
== 50642 ==
第一个是: 100.
第二个是:1.200000。
== 50642 ==
== 50642 == HEAP SUMMARY:
== 50642 ==在退出时使用:427块中的38,673字节
== 50642 ==总堆用法:510个分配,83个自由,44,945个字节。
== 50642 ==要查看它们,请重新运行:--leak-check = full --show-leak- types = all
== 50642 ==
== 50642 ==对于检测到和抑制错误的计数,重新运行:-v
== 50642 ==使用--track-origins = yes查看未初始化值来自
== 50642 ==错误摘要:3 1个上下文中的错误(被禁止:17从17)

为什么会说3个错误? >

提前感谢。
最好的问候

解决方案

如果您运行,您可能可以看到他们 - show-leak-types = all

  == 96034 == Memcheck,内存错误检测器
== 96034 ==版权所有(C)2002-2013和GNU GPL'd,由Julian Seward等人
== 96034 ==使用Valgrind-3.11.0.SVN和LibVEX;重新运行-h for copyright info
== 96034 ==命令:./yaq
== 96034 ==
--96034-- ./yaq:
--96034 - 缺少dSYM目录;考虑使用--dsymutil = yes
== 96034 ==条件跳转或移动取决于未初始化的值
== 96034 ==由0x10021FCA0:__xvprintf(在/ usr / lib / system / libsystem_c .dylib)
== 96034 == by 0x1001F5B91:vfprintf_l(in /usr/lib/system/libsystem_c.dylib)
== 96034 == by 0x1001F39F7:printf(in / usr / lib / system /libsystem_c.dylib)
== 96034 == 0x100000F32:main(in ./yaq)
== 96034 ==
== 96034 == 1个块中的80个字节仍然可达损失记录48 of 85
== 96034 == at 0x10000859B:malloc(in /usr/local/Cellar/valgrind/HEAD/lib/valgrind/vgpreload_memcheck-amd64-darwin.so)
== 96034 == by 0x1001D1756:__Balloc_D2A(在/usr/lib/system/libsystem_c.dylib中)
== 96034 == 0x1001D2075:__d2b_D2A(在/usr/lib/system/libsystem_c.dylib中)
== 96034 == by 0x1001CE88B:__dtoa(in /usr/lib/system/libsystem_c.dylib)
== 96034 == by 0x1001F6D72:__vfprintf(in /usr/lib/system/libsystem_c.dylib)
== 96034 == by 0x10021F9CE:__v2printf (在/usr/lib/system/libsystem_c.dylib)
== 96034 ==由0x10021FCA0:__xvprintf(在/usr/lib/system/libsystem_c.dylib中)
== 96034 ==由0x1001F5B91 :vfprintf_l(in /usr/lib/system/libsystem_c.dylib)
== 96034 == by 0x1001F39F7:printf(in /usr/lib/system/libsystem_c.dylib)
== 96034 ==通过0x100000F32:main(in ./yaq)
== 96034 ==
== 96034 == 1块中的4,096字节仍然可以在损失记录中达到85 85
== 96034 = = 0x10000859B:malloc(在/usr/local/Cellar/valgrind/HEAD/lib/valgrind/vgpreload_memcheck-amd64-darwin.so)
== 96034 == by 0x1001F0856:__smakebuf(在/ usr / lib /系统/ libsystem_c.dylib)
== 96034 == by 0x1002053A7:__swsetup(in /usr/lib/system/libsystem_c.dylib)
== 96034 == by 0x10021F77D:__v2printf(in / usr / lib / system / libsystem_c.dylib)
== 96034 == by 0x10021FCA0:__xvprintf(in /usr/lib/system/libsystem_c.dylib)
== 96034 ==由0x1001F5B91:vfprintf_l(in / usr / lib / system / libsystem_c.dylib)
== 96034 == b y 0x1001F39F7:printf(in /usr/lib/system/libsystem_c.dylib)
== 96034 == 0x100000F32:main(in ./yaq)
== 96034 ==
= = 96034 == LEAK SUMMARY:
== 96034 ==绝对丢失:0个字节0块
== 96034 ==间接丢失:0个字节0块
== 96034 ==可能丢失:0个块中的0个字节
== 96034 ==仍然可达:4个块中的4,244个字节
== 96034 == suppress:425个块中的34,783个字节
== 96034 ==
== 96034 ==对于检测到和抑制错误的计数,重新运行:-v
== 96034 ==使用--track-originins = yes来查看未初始化值来自
的位置== 96034 ==错误摘要:1个上下文中的3个错误(被禁止:18从18)

是OS X系统库中的问题。我通过生成这个压制文件 valgrind --leak-check来压制他们= yes --show-leak-types = all --gen-suppressions = yes ./yaq 。输出有点清洁,然后:

  $ valgrind --leak-check = yes --show-leak-types = all --suppressions = yaq.supp ./yaq [7:47:49] 
== 96285 == Memcheck,内存错误检测器
== 96285 ==版权所有(C)2002-2013和GNU GPL'd,由Julian Seward等人
== 96285 ==使用Valgrind-3.11.0.SVN和LibVEX;重新运行-h的版权信息
== 96285 ==命令:./yaq
== 96285 ==
--96285-- ./yaq:
--96285 - 缺少dSYM目录;考虑使用--dsymutil = yes
第一个是:100.
第二个是:1.200000。
== 96285 ==
== 96285 == HEAP SUMMARY:
== 96285 ==在退出时使用:429个块中的39,027个字节
== 96285 == total堆用法:510个分配,81个自由,45,171个字节分配
== 96285 ==
== 96285 == LEAK SUMMARY:
== 96285 ==绝对丢失:0个字节在0个块
== 96285 ==间接丢失:0块0块
== 96285 ==可能丢失:0块0块
== 96285 ==仍然可达:0字节在0块
== 96285 == suppress:39927字节在429块
== 96285 ==
== 96285 ==对于检测到和抑制错误的计数,重新运行:-v
== 96285 ==错误摘要:0个上下文中的0个错误(被禁止:从19开始)


I'm sorry if i eventually do something wrong. Ok my problem is the following:

I just coded something very easy, but when you take a look at the Valgrind error output it just confuses me.

Code:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int num1 = 100;
double num2 = 1.2;

printf("Number 1 one is: %d.\n Number two is: %f.\n", num1, num2);

return 0;
}

Valgrind error report:

$ valgrind --leak-check=full ./yaq
==50642== Memcheck, a memory error detector
==50642== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et       al.
==50642== Using Valgrind-3.11.0.SVN and LibVEX; rerun with -h for     copyright info
==50642== Command: ./yaq
==50642== 
--50642-- ./yaq:
--50642-- dSYM directory has wrong UUID; consider using --dsymutil=yes
==50642== Conditional jump or move depends on uninitialised value(s)
==50642==    at 0x1003FCC3F: _platform_memchr$VARIANT$Haswell (in     /usr/lib/system/libsystem_platform.dylib)
==50642==    by 0x1001F0B96: __sfvwrite (in    /usr/lib/system/libsystem_c.dylib)
==50642==    by 0x1001FAFE5: __vfprintf (in /usr/lib/system/libsystem_c.dylib)
==50642==    by 0x1002209AE: __v2printf (in /usr/lib/system/libsystem_c.dylib)
==50642==    by 0x100220C80: __xvprintf (in /usr/lib/system/libsystem_c.dylib)
==50642==    by 0x1001F6B71: vfprintf_l (in /usr/lib/system/libsystem_c.dylib)
==50642==    by 0x1001F49D7: printf (in /usr/lib/system/libsystem_c.dylib)
==50642==    by 0x100000F32: main (in ./yaq)
==50642== 
Number 1 one is: 100.
 Number two is: 1.200000.
==50642== 
==50642== HEAP SUMMARY:
==50642==     in use at exit: 38,673 bytes in 427 blocks
==50642==   total heap usage: 510 allocs, 83 frees, 44,945 bytes.
==50642== To see them, rerun with: --leak-check=full --show-leak- kinds=all
==50642== 
==50642== For counts of detected and suppressed errors, rerun with: -v
==50642== Use --track-origins=yes to see where uninitialised values come from
==50642== ERROR SUMMARY: 3 errors from 1 contexts (suppressed: 17 from 17)

Why does it say 3 errors ?

Thanks in advance. Best regards

解决方案

You may be able to see them if you run with --show-leak-kinds=all:

==96034== Memcheck, a memory error detector
==96034== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==96034== Using Valgrind-3.11.0.SVN and LibVEX; rerun with -h for copyright info
==96034== Command: ./yaq
==96034==
--96034-- ./yaq:
--96034-- dSYM directory is missing; consider using --dsymutil=yes
==96034== Conditional jump or move depends on uninitialised value(s)
==96034==    by 0x10021FCA0: __xvprintf (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x1001F5B91: vfprintf_l (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x1001F39F7: printf (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x100000F32: main (in ./yaq)
==96034==
==96034== 80 bytes in 1 blocks are still reachable in loss record 48 of 85
==96034==    at 0x10000859B: malloc (in /usr/local/Cellar/valgrind/HEAD/lib/valgrind/vgpreload_memcheck-amd64-darwin.so)
==96034==    by 0x1001D1756: __Balloc_D2A (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x1001D2075: __d2b_D2A (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x1001CE88B: __dtoa (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x1001F6D72: __vfprintf (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x10021F9CE: __v2printf (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x10021FCA0: __xvprintf (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x1001F5B91: vfprintf_l (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x1001F39F7: printf (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x100000F32: main (in ./yaq)
==96034==
==96034== 4,096 bytes in 1 blocks are still reachable in loss record 85 of 85
==96034==    at 0x10000859B: malloc (in /usr/local/Cellar/valgrind/HEAD/lib/valgrind/vgpreload_memcheck-amd64-darwin.so)
==96034==    by 0x1001F0856: __smakebuf (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x1002053A7: __swsetup (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x10021F77D: __v2printf (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x10021FCA0: __xvprintf (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x1001F5B91: vfprintf_l (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x1001F39F7: printf (in /usr/lib/system/libsystem_c.dylib)
==96034==    by 0x100000F32: main (in ./yaq)
==96034==
==96034== LEAK SUMMARY:
==96034==    definitely lost: 0 bytes in 0 blocks
==96034==    indirectly lost: 0 bytes in 0 blocks
==96034==      possibly lost: 0 bytes in 0 blocks
==96034==    still reachable: 4,244 bytes in 4 blocks
==96034==         suppressed: 34,783 bytes in 425 blocks
==96034==
==96034== For counts of detected and suppressed errors, rerun with: -v
==96034== Use --track-origins=yes to see where uninitialised values come from
==96034== ERROR SUMMARY: 3 errors from 1 contexts (suppressed: 18 from 18)

Those are issues in the OS X system libraries. I suppressed them by generating this suppressions file with valgrind --leak-check=yes --show-leak-kinds=all --gen-suppressions=yes ./yaq. The output is a bit cleaner then:

$ valgrind --leak-check=yes --show-leak-kinds=all --suppressions=yaq.supp ./yaq                            [7:47:49]
==96285== Memcheck, a memory error detector
==96285== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==96285== Using Valgrind-3.11.0.SVN and LibVEX; rerun with -h for copyright info
==96285== Command: ./yaq
==96285==
--96285-- ./yaq:
--96285-- dSYM directory is missing; consider using --dsymutil=yes
Number 1 one is: 100.
 Number two is: 1.200000.
==96285==
==96285== HEAP SUMMARY:
==96285==     in use at exit: 39,027 bytes in 429 blocks
==96285==   total heap usage: 510 allocs, 81 frees, 45,171 bytes allocated
==96285==
==96285== LEAK SUMMARY:
==96285==    definitely lost: 0 bytes in 0 blocks
==96285==    indirectly lost: 0 bytes in 0 blocks
==96285==      possibly lost: 0 bytes in 0 blocks
==96285==    still reachable: 0 bytes in 0 blocks
==96285==         suppressed: 39,027 bytes in 429 blocks
==96285==
==96285== For counts of detected and suppressed errors, rerun with: -v
==96285== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 21 from 19)

这篇关于Valgrind - 无法理解错误输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆