2017-11-07 1 views
2

動的にリンクされた共有ライブラリを使用して実行されているCアプリケーションをデバッグしています。このプログラムは、Ubuntu 14.04 64ビットで正常に動作します。しかし、Linuxがアプリケーションを終了するときに共有オブジェクトを終了すると、Ubuntu 16.04でセグメント化エラーが発生します。ソースファイルがgdbの情報ソースに基づいて見つかりません

gdbの中で、セグメント化エラーが発生する直前にブレークポイントを設定しました。それから私は、ソースファイルの情報を確認することinfo sourceを使用します。

Thread 1 "test" hit Breakpoint 3, _dl_fini() at dl-fini.c:201 
(gdb) info source 
Current source file is dl-fini.c 
Compilation directory is /build/glibc-bfm8X4/glibc-2.23/elf 
Located in /build/glibc-bfm8X4/glibc-2.23/elf/dl-fini.c 
Source language is c. 
Producer is GNU C11 5.4.0 20160609 -mno-mmx -mtune=generic -march=x86-64 -g -O2 -O3 -std=gnu11 -fgnu89-inline -fno-stack-protector -fmerge-all-constants -frounding-math -fPIC -ftls-model=initial-exec. 
Compiled with DWARF 2 debugging format. 
Does not include preprocessor macro info. 

私が示されたコンパイルディレクトリとソースファイルの場所を見つけることができないのです。

ディレクトリ/build/glibc-bfm8X4/glibc-2.23/elfは存在しません。誰もがこのような状況を知っていますか?

ありがとうございます。

答えて

3

これはglibcがコンパイルされたマシン上のディレクトリです。私たちのマシンには存在しません。

sudo apt-get installを使用して)関連するパッケージの-dbgバージョンをインストールして、デバッグシンボルをインストールします。現在のディレクトリにダウンロードされた実際のソースファイルを取得するために、ライブラリのソースコードを取得します(apt-get sourceを使用)。

glibcのために、それはsudo apt-get install libc6-dbgapt-get source libc6

便利なコマンドです:

  • リストすべてのパッケージ:パッケージ内dpkg -l(特定のパッケージ名のリストにあることができ、その後grep
  • リストファイル: dpkg -L <package name>
  • ファイルが所属するパッケージを検索:dpkg -S <file path>

~/.gdbinitdirectory <path to source dir>宣言を使用して、gdbをソースコードの正しいディレクトリに指定します。

また、valgrindrrユーティリティを試してください。

関連する問題