종료 시 충돌이 발생하는 C++로 작성된 응용 프로그램이 있습니다. 충돌의 원인은 동일한 라이브러리의 다른 버전에 대한 참조가 실행 파일에 혼합되어 있는 것으로 파악되었습니다. 이것이 우리가 추적하려는 오류이므로 이를 돕기 위해 실행 파일이 충돌할 때 생성된 메모리 맵 덤프를 활용할 수 있기를 원합니다.
다음은 메모리 맵의 관련 부분입니다.
7ffff5bc7000-7ffff5ccc000 r-xp 00000000 00:38 2348051668 /devel/utility/release/lib64/libUtils.so
7ffff5ccc000-7ffff5ecc000 ---p 00105000 00:38 2348051668 /devel/utility/release/lib64/libUtils.so
7ffff5ecc000-7ffff5ece000 r--p 00105000 00:38 2348051668 /devel/utility/release/lib64/libUtils.so
7ffff5ece000-7ffff5ed2000 rw-p 00107000 00:38 2348051668 /devel/utility/release/lib64/libUtils.so
7fbbf73c3000-7fbbf73ee000 r--p 00000000 00:31 2235616792 /devel/utility/v6.6/lib64/libUtils.so
7fbbf73ee000-7fbbf7462000 r-xp 0002b000 00:31 2235616792 /devel/utility/v6.6/lib64/libUtils.so
7fbbf7462000-7fbbf747e000 r--p 0009f000 00:31 2235616792 /devel/utility/v6.6/lib64/libUtils.so
7fbbf747e000-7fbbf747f000 ---p 000bb000 00:31 2235616792 /devel/utility/v6.6/lib64/libUtils.so
7fbbf747f000-7fbbf7481000 r--p 000bb000 00:31 2235616792 /devel/utility/v6.6/lib64/libUtils.so
7fbbf7481000-7fbbf7483000 rw-p 000bd000 00:31 2235616792 /devel/utility/v6.6/lib64/libUtils.so
이 섹션에서는 동일한 실행 파일의 다른 부분이 파일 시스템에 있는 라이브러리의 다른 버전에 연결된다는 것을 보여줍니다. 일치하는 코어 덤프 파일도 있습니다. 내 질문은 다음과 같습니다.
런타임 시 실행 코드의 어떤 기호가 이 메모리 맵에서 라이브러리의 각 버전으로 연결되는지 확인할 수 있습니까? 아니면 실행 파일 자체에서 이를 수행할 수 있는 방법이 있을까요?
실행 파일은 libUtils.so의 코드를 직접 사용하지만 자체적으로 libUtils.so를 사용할 수 있는 다른 라이브러리와도 연결됩니다. 그 중 하나가 릴리스 인스턴스가 아닌 v6.6 인스턴스에 연결되어 있는 것으로 추측하고 추적 중입니다.
실행 파일의 ldd -rv는 두 목록을 모두 표시하지만 해당 목록의 출처를 확인하기에는 충분하지 않습니다. 우리는 릴리스 빌드가 실행 파일의 직접 컴파일 및 링크에서 나온다는 것을 알고 있지만 v6.6 인스턴스가 도입된 위치를 추적하려고 합니다.
ldd -rv의 출력을 줄입니다.
**/devel/utililty/release/lib64/libUtils.so (0x00007f0576b29000)**
liblog4cplus-1.1.so.9 => /lib64/liblog4cplus-1.1.so.9 (0x00007f0575fcb000)
libsigc-2.0.so.0 => /lib64/libsigc-2.0.so.0 (0x00007f0575b8e000)
libGL.so.1 => /lib64/libGL.so.1 (0x00007f057479a000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f057457e000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f0574276000)
libm.so.6 => /lib64/libm.so.6 (0x00007f0573f73000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f0573d5d000)
libc.so.6 => /lib64/libc.so.6 (0x00007f057399a000)
libboost_thread-mt.so.1.53.0 => /lib64/libboost_thread-mt.so.1.53.0 (0x00007f0573782000)
libboost_system-mt.so.1.53.0 => /lib64/libboost_system-mt.so.1.53.0 (0x00007f057357e000)
**libUtils.so => /devel/utility/v6.6/lib64/libUtils.so (0x00007f05730a1000)**