リモート デバッグに gdbserver の使用を開始したかったので、以下に示す segfault を生成する簡単なテスト プログラムを使用して、ローカル マシンでその機能をテストしました。
segfault.c -- 「test」という名前の elf にコンパイルします
#define NULL ((void*)0)
int main()
{
int value = *((int*)NULL);
return value;
}
今私が実行すると:
#gdb test
(gdb)run
私は得る:
Starting program: /home/awaibel/digiworkspace/test/Debug/test
Program received signal SIGSEGV, Segmentation fault.
0x080483bf in main () at ../segfault.c:4
4 int value = *((int*)NULL);
ただし、次のようにgdbサーバーでデバッグすると:
#gdbserver :65535 test
#gdb test
(gdb)target remote 127.0.0.1:65535
(gdb)continue
それは私にデバッグ情報を与えます:
Program received signal SIGSEGV, Segmentation fault.
0x080483bf in ?? ()
segfault に対して同じ関数アドレスを指定しているように見えますが、リモート デバッガーでデバッグする場合、名前と行番号が省略されます。リモート デバッガーにこの情報を表示させることは可能ですか。
「-g」デバッグフラグを使用してプログラムがGCCでコンパイルされたことを追加する必要があると思います