1

リモート デバッグに 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でコンパイルされたことを追加する必要があると思います

4

1 に答える 1