1. GDB
GDB安装在虚拟机Linux端,安装方法:
用系统自带的
sudo apt-get install gdb
系统自带的安装在默认路径下,用which gdb查看安装路径:
查到是:/usr/local/bin/gdb
gdb-v查看版本是7.12.0.20161007
自己下载
网址:https://sourceware.org/gdb/download/
我下载的是gdb-7.12.tar.gz,与系统安装的版本一致。
解压:
sky@debian:~/Downloads$ tar -xvfgdb-7.12.tar.gz
编译:
./configure --host=arm-linux-gnueabihf 生成makefile。此处要生成的是arm-linux交叉编译gdb
make 按照makefile运行。
Note:开发板是ARM v7,编译统一是gnueabihf。
Note:此处报错,ld有问题。解决方案:指定ld。
(make CC=arm-linux-gnueabihf-gcc
LD=arm-linux-gnueabihf-ld)
覆盖:
如果修改了文件,重新编译出gdb后,覆盖掉系统之前安装的gdb:
sky@debian:~/gdb/gdb-7.12/gdb$ sudo mvgdb /usr/local/bin/gdb
make install和这一步功能一样, 要看一下makefile文件里面的路径是不是我们改过源代码的gdb。
查看详细信息:
查看gdb是否是最新的
sky@debian:~/gdb/gdb-7.12/gdb$ l/usr/local/bin/gdb
显示:-rwxr-xr-x 1 sky sky 36567392 Aug 713:07 /usr/local/bin/gdb
2. GDBServer
GDBServer安装在目标板,但是目标板无法编译,需要在虚拟机上编译完成后将可执行文件下载到目标板。
下载gdbServer到目标板:
进入sky@debian:~/gdb/gdb-7.12/gdb/gdbserver$路径下有一个文件叫gdbserver的可执行文件,copy到MOXA里面
sky@debian:~/gdb/gdb-7.12/gdb/gdbserver$scp gdbserver [email protected]:/home/
运行:
在moxa运行gdbserver,出现详细信息证明前面的编译成功啦
3. GDB+GDBServer
开发板端监听
./gdbserver 192.168.3.127:2345 ./hello
虚拟机端Debug:
gdb ./hello
target remote 192.168.3.127:2345
端口号要一致
成功啦!
Note:连接时出现问题,虚拟机端显示:Remote ‘g’ packet reply is too long
S:需要修改gdb/remote.c ,并重新安装gdb
wget http://ftp.gnu.org/gnu/gdb/gdb-7.12.tar.xztar -xf gdb-7.12.tar.xz
cd gdb-7.12/
============================解决上述错误的附加步骤=========================
vi gdb/remote.c
// 把status 1处的代码替换为status 2//
status 1
if(buf_len>2*rsa->sizeof_g_packet)
error (_("Remote 'g' packet replyis too long: %s"),rs->buf);
//status 2
if(buf_len >2*rsa->sizeof_g_packet)
{rsa->sizeof_g_packet=buf_len ;
for(i =0;i {if(rsa->regs->pnum==-1) continue; if(rsa->regs->offset>=rsa->sizeof_g_packet)rsa->regs->in_g_packet=0; else rsa->regs->in_g_packet=1;}} ========================================================================= ./configure make sudo make install sudo cp gdb/gdb /usr/bin From Note:vi查找:/+查找内容,n(next)向下查找,Shift n(N)向上查找 更改源代码后,需要重新编译覆盖gdb。