• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統計

            最新評論

            valgrind memcheck 錯誤分析收藏 -------- 轉

            1.默認使用工具memcheck

            2.輸出到XML文件:valgrind --leak-check=full --xml=yes --log-file="log.xml" myprog arg1 arg2

            3.錯誤解釋

            3.1Illegal read / Illegal write errors

            例如:

            Invalid read of size 4
            at 0x40F6BBCC: (within /usr/lib/libpng.so.2.1.0.9)
            by 0x40F6B804: (within /usr/lib/libpng.so.2.1.0.9)
            by 0x40B07FF4: read_png_image(QImageIO *) (kernel/qpngio.cpp:326)
            by 0x40AC751B: QImageIO::read() (kernel/qimage.cpp:3621)
            Address 0xBFFFF0E0 is not stack'd, malloc'd or free'd
            這個錯誤的發生是因為對一些memcheck猜想不應該訪問的內存進行了讀寫。
            3.2 Use of uninitialised values

            例如:

            Conditional jump or move depends on uninitialised value(s)
            at 0x402DFA94: _IO_vfprintf (_itoa.h:49)
            by 0x402E8476: _IO_printf (printf.c:36)
            by 0x8048472: main (tests/manuel1.c:8)
            這個錯誤的發生是因為使用了未初始化的數據。一般情況下有兩種情形容易出現這個錯誤:
            程序中的局部變量未初始化;
            C語言malloc的內存未初始化;C++中new的對象其成員未被初始化。
             
            3.3 Illegal frees
            例如:
            Invalid free()
            at 0x4004FFDF: free (vg_clientmalloc.c:577)
            by 0x80484C7: main (tests/doublefree.c:10)
            Address 0x3807F7B4 is 0 bytes inside a block of size 177 free'd
            at 0x4004FFDF: free (vg_clientmalloc.c:577)
            by 0x80484C7: main (tests/doublefree.c:10)
             
            3.4 When a block is freed with an inappropriate deallocation function
            例如:
            Mismatched free() / delete / delete []
            at 0x40043249: free (vg_clientfuncs.c:171)
            by 0x4102BB4E: QGArray::~QGArray(void) (tools/qgarray.cpp:149)
            by 0x4C261C41: PptDoc::~PptDoc(void) (include/qmemarray.h:60)
            by 0x4C261F0E: PptXml::~PptXml(void) (pptxml.cc:44)
            Address 0x4BB292A8 is 0 bytes inside a block of size 64 alloc'd
            at 0x4004318C: operator new[](unsigned int) (vg_clientfuncs.c:152)
            by 0x4C21BC15: KLaola::readSBStream(int) const (klaola.cc:314)
            by 0x4C21C155: KLaola::stream(KLaola::OLENode const *) (klaola.cc:416)
            by 0x4C21788F: OLEFilter::convert(QCString const &) (olefilter.cc:272)
          1. If allocated with malloc, calloc, realloc, valloc or memalign, you must deallocate with free.

          2. If allocated with new[], you must deallocate with delete[].

          3. If allocated with new, you must deallocate with delete.

            linux系統對上述錯誤可能不在意,但是移值到其他平臺時卻會有問題。

            3.5 Passing system call parameters with inadequate read/write permissions

          4. 例如:
            Syscall param write(buf) points to uninitialised byte(s)
            at 0x25A48723: __write_nocancel (in /lib/tls/libc-2.3.3.so)
            by 0x259AFAD3: __libc_start_main (in /lib/tls/libc-2.3.3.so)
            by 0x8048348: (within /auto/homes/njn25/grind/head4/a.out)
            Address 0x25AB8028 is 0 bytes inside a block of size 10 alloc'd
            at 0x259852B0: malloc (vg_replace_malloc.c:130)
            by 0x80483F1: main (a.c:5)
            Syscall param exit(error_code) contains uninitialised byte(s)
            at 0x25A21B44: __GI__exit (in /lib/tls/libc-2.3.3.so)
            by 0x8048426: main (a.c:8)
            Memcheck檢查所有的被系統調用的參數。
          5. It checks all the direct parameters themselves.

          6. Also, if a system call needs to read from a buffer provided by your program, Memcheck checks that the entire buffer is addressable and has valid data, ie, it is readable.

          7. Also, if the system call needs to write to a user-supplied buffer, Memcheck checks that the buffer is addressable.

            例如:

            #include <stdlib.h> #include <unistd.h> int main( void ) { char* arr = malloc(10); int* arr2 = malloc(sizeof(int)); write( 1 /* stdout */, arr, 10 ); exit(arr2[0]); }

            錯誤信息:

            Syscall param write(buf) points to uninitialised byte(s) at 0x25A48723: __write_nocancel (in /lib/tls/libc-2.3.3.so) by 0x259AFAD3: __libc_start_main (in /lib/tls/libc-2.3.3.so) by 0x8048348: (within /auto/homes/njn25/grind/head4/a.out) Address 0x25AB8028 is 0 bytes inside a block of size 10 alloc'd at 0x259852B0: malloc (vg_replace_malloc.c:130) by 0x80483F1: main (a.c:5) Syscall param exit(error_code) contains uninitialised byte(s) at 0x25A21B44: __GI__exit (in /lib/tls/libc-2.3.3.so) by 0x8048426: main (a.c:8)

            傳遞了無效參數到系統函數中。

            3.6 Overlapping source and destination blocks

            C的以下庫函數拷貝數據從一塊內存到另一塊內存時: memcpy(), strcpy(), strncpy(), strcat(), strncat(). 源和目的都不允許溢出。

            例如:

            ==27492== Source and destination overlap in memcpy(0xbffff294, 0xbffff280, 21) ==27492== at 0x40026CDC: memcpy (mc_replace_strmem.c:71) ==27492== by 0x804865A: main (overlap.c:40)

            3.7 Memory leak detection

            錯誤信息:

            Still reachable: A pointer to the start of the block is found. This usually indicates programming sloppiness. Since the block is still pointed at, the programmer could, at least in principle, free it before program exit. Because these are very common and arguably not a problem, Memcheck won't report such blocks unless --show-reachable=yes is specified.

            Possibly lost, or "dubious": A pointer to the interior of the block is found. The pointer might originally have pointed to the start and have been moved along, or it might be entirely unrelated. Memcheck deems such a block as "dubious", because it's unclear whether or not a pointer to it still exists.

            Definitely lost, or "leaked": The worst outcome is that no pointer to the block can be found. The block is classified as "leaked

          8. posted on 2009-02-27 11:38 大龍 閱讀(2391) 評論(0)  編輯 收藏 引用

            国产成人无码精品久久久久免费| 久久99国产精品一区二区| 欧美精品九九99久久在观看| 久久精品国产99国产精品导航| 久久久久亚洲Av无码专| 久久99精品国产麻豆不卡| 国产成人精品综合久久久久 | 亚洲国产一成久久精品国产成人综合| 久久嫩草影院免费看夜色| 久久精品人人槡人妻人人玩AV| 日韩精品久久久久久| 久久久久久久精品妇女99| 国产精品激情综合久久| 久久精品国产亚洲av麻豆色欲| 亚洲国产成人精品无码久久久久久综合| 日本欧美久久久久免费播放网| 日本加勒比久久精品| 国产精品18久久久久久vr | 无码人妻少妇久久中文字幕 | 欧美久久久久久精选9999| 久久久久亚洲av无码专区喷水| 青青热久久国产久精品 | 亚洲中文字幕久久精品无码APP | 久久伊人五月丁香狠狠色| 久久97久久97精品免视看秋霞| 国产精品一区二区久久| 午夜天堂av天堂久久久| 久久久久亚洲AV无码永不| 精品久久久无码21p发布| 亚洲精品乱码久久久久久蜜桃不卡| 久久久网中文字幕| 日韩美女18网站久久精品| 久久性精品| 婷婷久久综合| 精品一二三区久久aaa片| 久久婷婷五月综合国产尤物app| 一97日本道伊人久久综合影院| 亚洲欧美国产日韩综合久久 | 久久精品黄AA片一区二区三区| 熟妇人妻久久中文字幕| 97久久综合精品久久久综合|