예외가 발생하는 이 프로그램을 디버깅하고 있습니다. 예를 들어 이로 인해 디버거가 일부 소스 코드를 찾게 되지만 ../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