glibc/libstdc++ 소스를 구하고 gdb가 찾도록 설정하려면 어떻게 해야 합니까?

glibc/libstdc++ 소스를 구하고 gdb가 찾도록 설정하려면 어떻게 해야 합니까?

예외가 발생하는 이 프로그램을 디버깅하고 있습니다. 예를 들어 이로 인해 디버거가 일부 소스 코드를 찾게 되지만 ../sysdeps/unix/sysv/linux/raise.c찾지 못합니다.

이제 나는 이러한 자원을 가질 필요가 없다는 것을 깨닫지만 여전히 그러한 자원이 거기에 있었으면 좋겠습니다.

저는 Devuan Chimaera GNU/Linux 시스템을 개발 중입니다.

gdb에서 이러한 소스를 사용하고 타겟팅할 수 있도록 하는 가장 쉬운 방법은 무엇입니까?

답변1

가장 쉬운 방법은 패키지 소스 코드를 어딘가에 추출하는 것입니다. 적절한 디렉터리로 이동하여 다음을 실행합니다.

apt source glibc

에서는 명령을 gdb사용하여 directory소스 경로에 적절한 디렉터리를 추가합니다.

분리된 디버깅 기호를 원할 수도 있습니다. Devuan이 일반 디버깅 기호 패키지를 제공하는지 모르겠지만 동일한 목적으로 dbgsym릴리스된 것을 보았습니다 .libc6-dbg

sudo apt install libc6-dbg

다음은 샘플 gdb세션입니다.

$ gdb ls
...
(gdb) directory ~/Debian/glibc
Source directories searched: /home/steve/Debian/glibc:$cdir:$cwd
(gdb) break malloc
Breakpoint 1 at 0x46c8
(gdb) run
Starting program: /bin/ls 

Breakpoint 1, malloc (n=1441) at dl-minimal.c:50
50    if (alloc_end == 0)

답변2

Stephen이 말한 것 외에도 Ubuntu 22.04의 몇 가지 추가 징후가 있습니다.

디버깅 기호와 소스 코드를 얻으려면 아래와 같이 일부 설정이 필요합니다.

# Get debug symbols.
printf "deb http://ddebs.ubuntu.com %s main restricted universe multiverse\n" $(lsb_release -cs){,-updates,-security,-proposed} | \
 sudo tee -a /etc/apt/sources.list.d/ddebs.list
sudo apt install ubuntu-dbgsym-keyring
sudo apt update
sudo apt install coreutils-dbgsym

# Get source as per: https://askubuntu.com/questions/496549/error-you-must-put-some-source-uris-in-your-sources-list
# Produces directory "coreutils-8.32"
sudo cp /etc/apt/sources.list /etc/apt/sources.list~
sudo sed -Ei 's/^# deb-src /deb-src /'
/etc/apt/sources.list sudo apt-get update
apt source coreutils

그런 다음 GDB가 실제로 소스 코드를 찾으려면 cd다운로드한 소스 코드로 이동하거나 다음을 사용해야 할 수도 있습니다.

set substitute-path . glibc-2.35

명시된 바와 같이:https://askubuntu.com/questions/487222/how-to-install-debug-symbols-for-installed-packages/1434174#1434174

관련 정보