디버깅에 대해서 #1 : http://forum.falinux.com/zbxe/index.php?document_srl=865340
디버깅에 대해서 #2 : http://forum.falinux.com/zbxe/index.php?document_srl=866245
디버깅에 대해서 #3 : http://forum.falinux.com/zbxe/index.php?document_srl=867105


지난 글에서 gdb를 사용해서 버그 발생 위치를 찾는 법에 대해서 알아보았습니다.

제약이 있는 환경일 경우 원격으로 디버깅을 하기 위한 방법에 대해서 알아보겠습니다.

gdb에 포함되어있는 gdbserver라는 응용 프로그램을 활용하면 네트워크 혹은 시리얼을 통해서 원격 디버깅이 가능합니다.

우선 디버깅할 환경(타겟 보드등)에서 다음과 같이 gdbserver를 띄웁니다.

$ gdbserver 0.0.0.0:3333 seg
Process seg created; pid = 9509
Listening on port 3333


첫번째 인자는 bind할 주소 및 포트를 지정하는 것입니다. 네트워크 프로그램 경험이 있으신 분들은 다 아시겠지만 0.0.0.0은 모든 접속지에서 접근을 허용하겠다는 의미로 사용합니다.


두번째 인자는 실행할 바이너리 이름입니다.



작업을 할 환경(노트북, PC등)에서 다음과 같이 gdb를 실행합니다.


$ gdb seg
GNU gdb (Ubuntu 7.9-1ubuntu1) 7.9
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from seg...done.
(gdb) target remote 192.168.4.80:3333
Remote debugging using 192.168.4.80:3333
Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/ld-2.21.so...done.
done.
0x00007ffff7dd9cd0 in _start () from /lib64/ld-linux-x86-64.so.2
(gdb) b main
Breakpoint 1 at 0x400634: file seg.c, line 18.
(gdb) c
Continuing.

Breakpoint 1, main () at seg.c:18
18		init("tests");


원격 디버깅을 할 때는 run 명령이 불가능하므로 c(ontinue) 명령을 사용하여 진행을 해야합니다.



이렇게 구성을 하면 임베디드 환경에서는 쉽지 않은 디버깅을 원격으로 가능하게 됩니다.