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

関連情報