我们的开发板预装了gdbserver,可以直接

gdbserver --multi :5000

来在开发板启动gdbserver。此时gdb运行在网络连接的模式,也可以运行在串口模式,请查阅相关的教程。

在网络模式,需要开发板和上位机处于同一个网络,互相可以ping通。另外也需要检查上位机的防火墙配置。

接下来需要运行SDK中的gdb,注意这个gdb不是主机中的,而是开发板SDK中的。怎样用yocto生成SDK,以及SDK使用方法 / yocto how to build SDK and how to use them

然后初始化sdk环境变量。

source sdkpath/environment-setup-cortexa9hf-neon-phytec-linux-gnueabi

以下以编译一个helloworld为例子。

#include <stdio.h>

int
main (void)
{
        int i;

        printf ("Enter Programme\n");
        for(i=0;i<=10;i++) {
                        printf ("count:%d\n",i);
        }
        printf ("exit\n");

        return 0;
}

保存为gdbtest.c,注意我们的开发板中有一个例子叫hello,请不要以这个为程序名。

$CC -g gdbtest.c -o gdbtest

然后,在上位机启动gdb。

$GDB -q gdbtest

连接开发板

target extended-remote ip地址:5000

复制要调试的文件到开发板,注意如果要调试的文件没有更新则不用复制,你也可以用其他方式将要执行的文件复制到开发板,如用sd卡,scp等。

remote put hostfile targetfile

设置调试的文件名

set remote exec-file 程序名

接下来就可以用gdb调试了。

退出时,可以在上位机输入

monitor exit

来让开发板退出gdbserver。

使用gdbserver也可以使用core dump,可以参考:

  • No labels