私はLinuxシステム上で実行されている共有ライブラリ(hlapi.so)を持っています。このhlapi.soには多くのモジュールがあります(私は.cファイルを意味します)。そのうちの一つは、このような二つのグローバル件のデータを定義するhlapi.cとして命名されています。もちろんGDBはxx.soのグローバルデータを実行ファイルなしで解析できますか?
static int hlapiInitialized = FALSE;
static struct hlapi_data app_sp;
このhlapi.cモジュールの他の多くのコードがあります。 hlapi.soは、hlapi.soに基づいて独自のアプリケーション(appbasehlapiという名前)を作成する顧客にリリースされます。
は今、私は、そのバックトレース顧客によって解析されたコアは、私たちのコードであることを示しているコアダンプを得ました。しかし、顧客はコアダンプファイルのみを提供することができます。 appbasehlapi実行ファイルは私たちと共有されません。私の手では、コアダンプファイル+ hlapi.soしか持っていません。
このコアをデバッグするために、私はコマンドによって
gdb --core=mycoredumpfile
をコアダンプファイルをロードし、GDBで、私はそうhlapi.so含まれているフォルダを指定する
set solib-search-path .
を使用gdbはhlapi.soからシンボルをロードできます。そして、私は以下を使用します:
print hlapiInitialized
print app_sp
私たちのモジュールでグローバルデータを解析します。しかし、出力値は非常に異常です。
実行可能ファイルなしでhlapi.soで定義されたグローバルデータをgdb経由で解析できるのですか?もし私がgdb経由で得た出力が信じられないのであれば? コメントありがとうございます。
ところで、hlapi.soは、gccのオプション "-g -fPIC" で構築されています。
あなたがコアダンプをデバッグ用に使用している一人として、ライブラリの_exact_同じバージョンで生成されたかどうかを知っていますか? – duskwuff
@duskwuff、そうです。これはhlapi.soと同じバージョンで、私たちは顧客にリリースしました。 –