我正在尝试使用gdbserver进行GDB远程调试,但无法让调试器中断并列出正确的源代码。我不确定我可能做错了什么,所以我写的是我所做的一切。我两周前刚开始使用linux和所有这些东西。
目标代码是使用CodeSoucery编译器 arm-none-linux-gnueabi-gcc 编译的,相应地我使用的GDB是 arm-none-linux-gnueabi -gdb
首先,我使用 ssh 登录目标,然后输入终端启动gdbserver:
root@zynq:/path/on/target# gdbserver localhost:3278 my_app.elf
Process my_app.elf created; pid = 2083
Listening on port 3278
接下来我通过输入主机终端来启动GDB:
b51957@B51957debian:~$ arm-none-linux-gnueabi-gdb /path/on/host/my_app.elf
GDB正常启动时没有任何警告,并且还显示以下行:
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi".
接下来,我通过在主机终端上键入来设置sysroot:
(gdb)设置sysroot remote:/
接下来,我通过键入主机终端连接到远程目标:
target remote *target IP address*:3278
在主机终端,我收到以下回复:
Remote debugging using *target IP address*:3278
Reading symbols from remote:/lib/ld-linux.so.3...(no debugging symbols found)...done.
Loaded symbols for remote:/lib/ld-linux.so.3
在目标终端中,我收到以下回复:
Remote debugging from host *host IP address*
现在我要求它通过输入主机终端在main.cpp的第23行设置一个断点:
(gdb) break main.cpp:23
然后让它继续,然后在断点处停止,然后我尝试列出源代码。但是,不是进入我的main.cpp文件,它总是进入一些标准的C ++库头(也许是iostream)。这就是终端的样子:
(gdb) c
Continuing.
Breakpoint 1, 0x00009bdc in main ()
(gdb) l
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
依旧......
请注意,我使用-g
和-o0
选项进行编译,并使用-g
选项进行编译。我还尝试使用'directory'命令将包含源文件的文件夹添加到GDB源路径。源路径已包含$cwd
和$cdir
。我无法弄清楚为什么我仍然无法看到我的源代码。