openembedded提供了一個良好的gdb環境,設定步驟如下。
brook@vista:/home/brook/apps_proc/poky/build$ tar zxvf tmp-glibc/deploy/images/mdm9607/machine-image-mdm9607-dbg.tar.gz ./ ./var/ ./var/lib/ ./var/lib/opkg/ ./var/lib/opkg/info/ ... brook@vista:/home/brook/apps_proc/poky/build$ mv usr/lib/.debug/* usr/lib/ brook@vista:/home/brook/apps_proc/poky/build$ mv lib/.debug/* lib brook@vista:/home/brook/apps_proc/poky/build$ ln -s libconfig.so.9.2.0 usr/lib/libconfig.so.9 ... brook@vista:/home/brook/apps_proc/poky/build$ ln -s libpthread-2.22.so lib/libpthread.so.0 brook@vista:/home/brook/apps_proc/poky/build$ ln -s librt-2.22.so lib/librt.so.1 brook@vista:/home/brook/apps_proc/poky/build$ ln -s libm-2.22.so lib/libm.so.6 brook@vista:/home/brook/apps_proc/poky/build$ ln -s libc-2.22.so lib/libc.so.6 brook@vista:/home/brook/apps_proc/poky/build$ ln -s ld-2.22.so lib/ld-linux.so.3 brook@vista:/home/brook/apps_proc/poky/build$ ln -s libdl-2.22.so lib/libdl.so.2 ... brook@vista:/home/brook/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oe-linux-gnueabi/myprog/git-r0/build/src$ adb push myprog /usr/bin/myprog brook@vista:/home/brook/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oe-linux-gnueabi/myprog/git-r0/build/src$ adb shell sh-3.2# gdbserver :2345 /usr/bin/myprog Process /usr/bin/myprog created; pid = 9035 Listening on port 2345
接著host端就可以開啟GDB來debug了
brook@vista:/home/brook/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oe-linux-gnueabi/myprog/git-r0/build/src$ arm-oe-linux-gnueabi-gdb myprog GNU gdb (GDB) 7.10.1 Copyright (C) 2015 Free Software Foundation, Inc. ... Reading symbols from myprog...done. (gdb) set sysroot /home/brook/apps_proc/poky/build/ (gdb) target remote 10.0.0.1:2345 Remote debugging using 10.0.0.1:2345 Reading symbols from /home/brook/apps_proc/poky/build//lib/ld-linux.so.3...done. 0xb6fceac0 in ?? () (gdb) b main Breakpoint 1 at 0x7f5595ac: file /home/brook/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oe-linux-gnueabi/myprog/git-r0/src/main.c, line 207. (gdb) c Continuing. Breakpoint 1, main (argc=1, argv=0xbefffdf4) at /home/brook/apps_proc/poky/build/tmp-glibc/work/armv7a-vfp-neon-oe-linux-gnueabi/myprog/git-r0/src/main.c:207 207 { (gdb) set sysroot /home/brook/apps_proc/poky/build warning: .dynamic section for "/home/brook/apps_proc/poky/build/lib/libpthread.so.0" is not at the expected address (wrong library or version mismatch?) warning: .dynamic section for "/home/brook/apps_proc/poky/build/lib/libm.so.6" is not at the expected address (wrong library or version mismatch?) warning: .dynamic section for "/home/brook/apps_proc/poky/build/lib/libc.so.6" is not at the expected address (wrong library or version mismatch?) Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"? Reading symbols from /home/brook/apps_proc/poky/build/usr/lib/libconfig.so.9...done. Reading symbols from /home/brook/apps_proc/poky/build/lib/libpthread.so.0...done. Reading symbols from /home/brook/apps_proc/poky/build/lib/librt.so.1...done. Reading symbols from /home/brook/apps_proc/poky/build/lib/libm.so.6...done. Reading symbols from /home/brook/apps_proc/poky/build/lib/libc.so.6...done. Reading symbols from /home/brook/apps_proc/poky/build/lib/libdl.so.2...done. (gdb) info share From To Syms Read Shared Object Library 0x7473e7c0 0x7475a328 Yes /home/brook/apps_proc/poky/build/lib/ld-linux.so.3 0xb6fc42d0 0xb6fca6e0 Yes /home/brook/apps_proc/poky/build/usr/lib/libconfig.so.9 0xb6ebc210 0xb6ecb4e8 Yes /home/brook/apps_proc/poky/build/lib/libpthread.so.0 0xb6ea2720 0xb6ea6034 Yes /home/brook/apps_proc/poky/build/lib/librt.so.1 0xb6e28bf0 0xb6e5ac20 Yes /home/brook/apps_proc/poky/build/lib/libm.so.6 0xb6ced280 0xb6dee638 Yes /home/brook/apps_proc/poky/build/lib/libc.so.6 0xb6cc3928 0xb6cc4870 Yes /home/brook/apps_proc/poky/build/lib/libdl.so.2確認所有symbol都有找到之後, 就可以開始debug之旅了.