대상에 제거된 라이브러리와 바이너리가 있고 호스트에 ".debug" 디렉터리가 있는 해당 트리가 있는 경우 사용할 gdb 설정 명령은 무엇입니까?

대상에 제거된 라이브러리와 바이너리가 있고 호스트에 ".debug" 디렉터리가 있는 해당 트리가 있는 경우 사용할 gdb 설정 명령은 무엇입니까?

대상 장치에 라이브러리와 바이너리만 제거된 설정이 있습니다. 대상에 gdbserver가 있습니다. 호스트 시스템에서는 gdb-multiarch를 사용합니다. 호스트에는 각각의 ".debug" 디렉터리가 포함된 디렉터리가 있습니다. 호스트의 이 디렉터리에는 제거되지 않은 라이브러리/바이너리가 포함되어 있지 않으며 .debug 디렉터리만 포함됩니다.

   <host/dir/path>/bin/.debug
   <host/dir/path>/lib/.debug
   <host/dir/path>/usr/bin/.debug
   <host/dir/path>/usr/lib/.debug
   <host/dir/path>/usr/sbin/.debug
   <host/dir/path>/sbin/.debug

다음 옵션을 시도했지만 gdb-multiarch가 .debug가 포함된 로컬 트리를 가리킬 수 없습니다.

옵션 1

    set debug-file-directory <local-host-dir>

관찰된 문제는 gdb가 원격 대상에서 .debug를 찾을 것이라고 생각한다는 것입니다.

    Reading symbols from target:/usr/sbin/helloworld...Reading /usr/sbin/.debug/helloworld from remote target...
    (no debugging symbols found)...done.

옵션 2

    set sysroots <local-host-dir>

관찰된 문제는 바이너리가 없다는 것입니다.

localhost에서 기호 파일을 로드하고 대상에서 해당 라이브러리/바이너리를 사용하려면 어떤 gdb 명령을 사용해야 합니까?

답변1

이것은 나에게 유효한 대답은 아니지만 이 세 줄은 디버깅 경험에 중요한 영향을 미칩니다.

set solib-search-path /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib

따라서 나는 직장에서 ARM의 linaros 컴파일러를 사용하고 빌드 프로세스의 일부에는 표준 라이브러리의 sysroot-glibc-linaro 디렉토리를 참조하는 것이 포함됩니다.

set sysroot ../build/_arm-linux-gnueabihf/root

빌드 환경은 ARM 원격의 루트 디렉터리에 매우 가까운 디렉터리를 생성해야 합니다. 예를 들어, 위에 루트 디렉터리를 나열하면 usr/lib/bin/etc/...etc와 같은 일반적인 내용이 표시됩니다. 이렇게 하면 gdb가 로컬에서 1:1 일치를 찾을 때 디렉터리 구조가 이를 달성하도록 배열됩니다.

set debug-file-directory ../arm-linux-gnueabihf/debug-syms

따라서 바이너리에서도 디버깅 정보가 제거되어 다른 곳에 배치된 경우 위의 명령을 사용하는 것만큼 간단해야 합니다. 하지만 내가 사용한 명령 조합에 따라 나 역시 당신과 같은 문제를 겪었습니다.

(gdb) show sysroot
The current system root is "/home/user/ws3/code/mcdocker1604/build_IXM150_arm-linux-gnueabihf/root/".    
(gdb) show solib-search-path 
The search path for loading non-absolute shared library symbol files is /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib.
(gdb) show debug-file-directory 
The directory where separate debug symbols are searched for is "/home/user/ws3/code/mcdocker1604/build_IXM150_arm-linux-gnueabihf/debug-syms".
(gdb) target remote 10.235.221.21
10.235.221.21: No such file or directory.
(gdb) target remote 10.235.221.21:123
Remote debugging using 10.235.221.21:123
No executable file now.
warning: Could not load vsyscall page because no executable was specified
0xb43f7916 in ?? ()
(gdb) set sysroot ""
Error reading attached process's symbol file.
: No such file or directory.
warning: Could not load shared library symbols for 14 libraries, e.g. /lib/libpal.so.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
Reading symbols from /home/user/ws3/code/build_IXM150_arm-linux-gnueabihf/root/app/lib/libFW.so...
(No debugging symbols found in /home/user/ws3/code/build_IXM150_arm-linux-gnueabihf/root/app/lib/libFW.so)
Reading symbols from /home/user/ws3/code/build_IXM150_arm-linux-gnueabihf/root/app/lib/libMCSvcClient.so...
(No debugging symbols found in /home/user/ws3/code/build_IXM150_arm-linux-gnueabihf/root/app/lib/libMCSvcClient.so)
Reading symbols from /home/user/ws3/code/build_IXM150_arm-linux-gnueabihf/root/app/lib/libMCSvcServer.so...
(No debugging symbols found in /home/user/ws3/code/build_IXM150_arm-linux-gnueabihf/root/app/lib/libMCSvcServer.so)
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libcrypt.so.1...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libpthread.so.0...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/librt.so.1...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libstdc++.so.6...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libm.so.6...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libgcc_s.so.1...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libc.so.6...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libnsl.so.1...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libresolv.so.2...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/ld-linux-armhf.so.3...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libdl.so.2...
Reading symbols from /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/lib/libnss_files.so.2...
Error reading attached process's symbol file.
: No such file or directory.
(gdb) set solib-search-path /usr/local/sysroot-glibc-linaro-2.25-2017.08-arm-linux-gnueabihf/
Error reading attached process's symbol file.
: No such file or directory.
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
Error reading attached process's symbol file.
: No such file or directory.

나는 sysroot 또는 디버그 파일 디렉터리 중 하나를 설정했지만 둘 다 설정하지는 않았다는 인상을 받았습니다. sysroot는 모든 것이 로컬에 표시될 것으로 예상하는 것으로 보이며 디버깅 기호가 별도의 .debug 파일로 제거되지 않으면 가장 잘 작동한다고 생각합니다.

나는 모든 퍼즐을 풀었지만 작동하지 않는다는 것을 알고 있기 때문에 이것에 대해 소리 지르고 있습니다.

Reading /home/user/ws3/code/mcdocker1604/build_IXM150_arm-linux-gnueabihf/debug-syms/lib//libunwind-arm.so.8.0.1.debug from remote target...
Reading target:/home/user/ws3/code/mcdocker1604/build_IXM150_arm-linux-gnueabihf/debug-syms/lib//libunwind-arm.so.8.0.1.debug from remote target...
(No debugging symbols found in target:/lib/libunwind-arm.so.8)

메시지가 표시되지만 경로에 추가 /가 표시되는 것을 볼 수 있습니다. // 사이에 다른 것을 기대하고 있는지는 알 수 없습니다.

관련 정보