我有一个非常简单的问题
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
),我当然不能放
在抑制文件中,因为我不会得到关于我真正泄漏的信息。