コンパイルされたファイルとデバッグシンボルを分割する方法については、次の投稿(How to generate gcc debug symbol outside the build target?)が見つかりました。デバッグシンボルからコンパイルされた変数/関数アドレスを見つける方法
しかし、私はデバッグファイルで有用な情報を見つけることができません。私が試した何が私に上の任意の情報を与えることはありません、GDBでgcc -g -o hello hello.c
objcopy --only-keep-debug hello hello.debug
gdb -s main.debug -e main
を走った
#include<stdio.h>
int main(void) {
int a;
a = 5;
printf("The memory address of a is: %p\n", (void*) &a);
return 0;
}
、私は:
例えば、
私のHelloWorldコードがありますそのアドレスを見つけることができません、私は主な機能アドレスを見つけることができません
F例:
(gdb) info variables
All defined variables:
Non-debugging symbols:
0x0000000000400618 _IO_stdin_used
0x0000000000400710 __FRAME_END__
0x0000000000600e3c __init_array_end
0x0000000000600e3c __init_array_start
0x0000000000600e40 __CTOR_LIST__
0x0000000000600e48 __CTOR_END__
0x0000000000600e50 __DTOR_LIST__
0x0000000000600e58 __DTOR_END__
0x0000000000600e60 __JCR_END__
0x0000000000600e60 __JCR_LIST__
0x0000000000600e68 _DYNAMIC
0x0000000000601000 _GLOBAL_OFFSET_TABLE_
0x0000000000601028 __data_start
0x0000000000601028 data_start
0x0000000000601030 __dso_handle
0x0000000000601038 __bss_start
0x0000000000601038 _edata
0x0000000000601038 completed.6603
0x0000000000601040 dtor_idx.6605
0x0000000000601048 _end
何か問題がありますか?デバッグファイルを間違って理解していますか?保存されたデバッグ情報からコンパイルされた変数/関数のアドレスを見つける方法さえありますか?
「main」を削除するのを忘れました。他のすべてのことを正しい方法で削除しました。 'objcopy'の前と後のgdbの結果を比較しますか? – fghj
私はそうではありません、それはどういう意味ですか? – Quantico
私は、 'gdb'で動作しないファイルを別のファイルに抽出した後、デバッグ情報を分離する操作の前にgdbで動作しない' something'を試してみることをお勧めします。 – fghj