1

自家製のスクリプトで同じことを(うまくいけば)やろうとしているので、これを理解しようとしています:

Cコードの例:

typedef struct _B
{
    A aa;
    double b;
    char c[LEN];
    int d;
    char *a_ptr[10];
 } B;

 B this_b;

これを後でコンパイルするgcc -ggdb a.outgdb何がどこにあるかが正確にわかりa_ptrます。

(gdb) p &(this_b.a_ptr)
$1 = (char *(*)[10]) 0x804a084

どのようにそれをしますか?そして、他のユーティリティを介して同じことを(アドレスとタイプを知って)行うことはできますか?

4

2 に答える 2

1

フラグを使用してビルドすると-g、GCC(および他のほとんどのコンパイラ)は追加の「デバッグ情報」をバイナリ(a.out)に格納します。

その情報はGDB以外のツールで調べることができます。たとえば、readelf -w a.out(Linuxまたは別のプラットフォームを使用していると仮定しますELF)。

a.outを使用した場合と使用しない場合のサイズを比較することもできます-g。デバッグバイナリが5〜10倍大きくなることは珍しくありません。

于 2011-09-22T02:46:58.110 に答える
1

この情報はコンパイル時に知られています。Gccはそれを収集し、後でさまざまなツール(この場合はgdb)で使用できるように保存します。

于 2011-09-21T12:14:38.223 に答える