대상 장치에 라이브러리와 바이너리만 제거된 설정이 있습니다. 대상에 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)
메시지가 표시되지만 경로에 추가 /가 표시되는 것을 볼 수 있습니다. // 사이에 다른 것을 기대하고 있는지는 알 수 없습니다.