how to use gdb in ros2 - githeim/windheim_archive GitHub Wiki

How to use gdb in ROS2

Prerequisite

sudo apt-get install gdb-multiarch

x86뿐만이 μ•„λ‹ˆλΌ μ›κ²©μœΌλ‘œ aarch64(XAVIER)λ₯Ό λ””λ²„κΉ…ν•˜λ €λ©΄ λ©€ν‹° μ•„ν‚€ν…μ²˜ μ§€μ›μš© gdbλ₯Ό μ„€μΉ˜ν•˜μž.

Applying the compiler option

CMakeLists.txt의 컴파일 μ˜΅μ…˜μ— -g μ˜΅μ…˜ 및 μ΅œμ ν™” 레벨 0λ₯Ό μ μš©ν•˜λŠ” -O0 μ˜΅μ…˜μ„ μ μš©ν•œλ‹€

add_compile_options(-g -O0)

modification in launch file

버깅 ν•˜λ €λŠ” 런치 νŒŒμΌμ„ μˆ˜μ •ν•œλ‹€, μ•„λž˜μ²˜λŸΌ prefix ν•­λͺ©μ— gdbserverκ΄€λ ¨ μ˜΅μ…˜μ„ μΆ”κ°€ν•˜μž.

return LaunchDescription([
        Node(
            package='mypkg',
            executable='mypkg_node',
            prefix=['gdbserver 127.0.0.1:8844 '],
            parameters=[
                {"config_path": os.path.join(get_package_share_directory("mypkg"), "cfg/default.cfg")},
            ]
        )
])

μ™œ prefix ν•­λͺ©μ— μ§μ ‘μ μœΌλ‘œ

prefix=['gdb -ex=r --args'],

λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”κ°€ μ˜μ•„ν•  수 μžˆλŠ”λ°, 이 경우 ν‚€λ³΄λ“œ μž…λ ₯이 μ μš©λ˜μ§€ μ•Šμ•„ μ“Έ μˆ˜κ°€ μ—†λ‹€.

λ”°λΌμ„œ κ°„μ ‘μ μœΌλ‘œ gdb serverλ₯Ό λ„μ›Œμ„œ 디버깅에 μ΄μš©ν•œλ‹€.

ν•΄κ²° 방법 : μ•„λž˜μ™€ 같이 ν•˜λ©΄, μ‚¬μš© ν•  수 μžˆλ‹€. λ””μŠ€ν”Œλ ˆμ΄κ°€ 되고 κΌ­ 원격 접속이 ν•„μš” μ—†λ‹€λ©΄, μ•„λž˜μ™€ 같이 μ‹€ν–‰μ‹œν‚¨λ‹€.

prefix=['gnome-terminal -e gdb -ex run --args ' ]
or
prefix=['xterm -e gdb -ex run --args ' ]

μ€‘μš”

gnome-terminal -e μ˜΅μ…˜μ€ 사라짐 이것은 '--' 둜 μ‹€ν–‰λ˜μ–΄μ•Ό 함
prefix=['gnome-terminal -- gdb -ex run --args ' ]

execution

$ ros2 launch mypkg mypkg.launch.py
...
...
[....] Listening on port 8844

μ‹€ν–‰ν•˜λ©΄ μœ„ λ‚΄μš©μ²˜λŸΌ gdb 접속을 κΈ°λ‹€λ¦°λ‹€.

GDB connection

gdb λ₯Ό μ‹€ν–‰ν•˜κ³  λ‹€μŒκ³Ό 같이 IP/portλ₯Ό μž…λ ₯ν•œλ‹€, μ΄λŠ” μ›κ²©μœΌλ‘œ 접속도 κ°€λŠ₯함을 μ•Œ 수 μžˆλ‹€.

(gdb)target remote 127.0.0.1:8844

μ›Œν¬μŠ€ν…Œμ΄μ…˜-x86μ—μ„œ μ›κ²©μœΌλ‘œ xavierλ³΄λ“œ-aarch64λ₯Ό λ””λ²„κΉ…ν•˜λ €λ©΄ μ•žμ„œ μ„€μΉ˜ν•œ gdb-multiarchλ₯Ό μ‹€ν–‰μ‹œμΌœμ•Ό ν•œλ‹€

$ gdb-multiarch
(gdb) target remote 127.0.0.1:8844

(gdb) c

λ₯Ό μž…λ ₯ν•˜λ©΄, hold λ˜μ–΄ 있던 ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λœλ‹€.