代码之家  ›  专栏  ›  技术社区  ›  David Ranieri

使用guile抑制内存泄漏

  •  0
  • David Ranieri  · 技术社区  · 5 年前

    我有一个非常简单的问题 C scheme 手稿 guile :

    /* main.c */
    #include <libguile.h>
    
    int main(void)
    {
        scm_init_guile();
        scm_c_primitive_load("script.scm");
    
        SCM func = scm_variable_ref(scm_c_lookup("func"));
    
        scm_call_0(func);
        return 0;
    }
    

    计划 脚本:

    ; script.scm
    (define (func)
        (display "Hello from scheme\n")
    )
    

    编译和运行时使用:

    export ASAN_OPTIONS=detect_leaks=1 LSAN_OPTIONS=suppressions=asan.supp
    gcc -std=c11 -Wpedantic -Wall `pkg-config --cflags guile-3.0` \
        -fsanitize=address -fno-omit-frame-pointer \
        -o demo main.c `pkg-config --libs guile-3.0`
    ./demo
    

    我能够抑制一些由 诡计 asan.supp ):

    leak:iconv_open
    leak:libguile
    

    但其中一个泄漏没有提供足够的信息,消毒剂输出为:

    =================================================================
    ==33333==ERROR: LeakSanitizer: detected memory leaks
    
    Indirect leak of 208 byte(s) in 1 object(s) allocated from:
        #0 0x7ff8a9b8d517 in malloc (/lib/x86_64-linux-gnu/libasan.so.6+0xb0517)
        #1 0x7ff8a97e94f6  (/lib/x86_64-linux-gnu/libc.so.6+0x344f6)
    
    -----------------------------------------------------
    Suppressions used:
      count      bytes template
          2      32752 iconv_open
          1         32 libguile
    -----------------------------------------------------
    
    SUMMARY: AddressSanitizer: 208 byte(s) leaked in 1 allocation(s).
    

    如你所见,关于泄漏的信息是非常通用的( malloc libc ),我当然不能放 在抑制文件中,因为我不会得到关于我真正泄漏的信息。

    0 回复  |  直到 5 年前