2014-09-24 3 views
0

나는 Linux에 ("-fprofile-arcs -ftest-coverage"를 추가) 내 프로그램을 테스트 할 gcov를 사용하고 있지만, 프로그램 시작 후 충돌합니다 : __gcov_init에서gcov가 프로그램 충돌을 일으키는 이유는 무엇입니까?

(gdb) bt 
#0 0x00000034e433386f in __strlen_sse42() from /lib64/libc.so.6 
#1 0x000000000053c57a in __gcov_init() 
#2 0x000000000053c4b9 in _GLOBAL__I_65535_0_g_st_rerun_cmd_param() 
    at source/rerun/aicent_ara_rerun.c:963 
#3 0x000000000053dc26 in __do_global_ctors_aux() 
#4 0x0000000000403743 in _init() 
#5 0x00007fff6d6b3ce8 in ??() 
#6 0x000000000053db55 in __libc_csu_init() 
#7 0x00000034e421ecb0 in __libc_start_main() from /lib64/libc.so.6 
#8 0x0000000000404449 in _start() 

() 소스 (http://www.coreboot.org/~stepan/coreboot-coverage/lib/libgcov.c.gcov.html)

...... 
size_t filename_length = strlen(info->filename); 
...... 

근본 원인이 "info->filename"이 유효하지 않음을 알 수 있습니다 (코드를 분해 한 후 주소는 0x57c4ac00000000이며 실제로 유효하지 않습니다).

이 버그를 분석하는 방법을 모르겠지만 아무도 단서를 제공 할 수 있습니까? 대단히 감사드립니다!

P. 내 Linux 환경 :

[[email protected] rel_1_3_3_20140902]# uname -a 
Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64 x86_64 x86_64 GNU/Linux 

gcc 버전 :

[[email protected] rel_1_3_3_20140902]# gcc -v 
Using built-in specs. 
Target: x86_64-redhat-linux 
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux 
Thread model: posix 
gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 

답변