嵌入式系统中使用CGDB进行调试

对cgdb不熟悉的可从cgdb的官方网站了解。

在gdb下调试看源码太不方便了,虽然有个-tui模式,也没法跟有语法加亮功能的cgdb相比。

原本打算修改配置来让cgdb启动不同的gdb,没找到资料,只好去看它的源码。

CGDB调用GDB的代码在路径:./various/util/src/fork_util.c中,由函数invoke_debugger实现


int invoke_debugger(
            const char *path, 
            int argc, char *argv[], 
            int *in, int *out, 
            int choice, char *filename) 
{
    pid_t pid;    
    //将GDB变量修改为系统中为目标系统编译好的GDB的名称,如arm-linux-gdb
    const char * const GDB               = "arm-linux-gdb";
    const char * const NW                = "--nw";
    const char * const X                 = "-x";
    const char * const ANNOTATE_TWO      = "--annotate=2";
    const char * const GDBMI             = "-i=mi2";
    char *F                              = filename;
    char **local_argv;
    int i, j = 0, extra = 6;
    int malloc_size = argc + extra;
    char slavename[64];
    int masterfd;

配置:

我的开发板对应的gdb编译后安装路径为/usr/local/arm-gdb,希望运行cgdb-arm-linux 以便于主机系统的cgdb命令区分

./configure --prefix=/usr/local/arm-gdb/ --program-suffix=-arm-linux 

make -k -j 4 //虚拟机配置了2个cpu,设置4线程编译

make install

下面就是使用cgdb与gdbserver配合调试的截图,看起来是不是很舒服?

嵌入式系统中使用CGDB进行调试_第1张图片

(免费版给打了3个水印,太过份了,这个hypersnap真是不地道啊)

关于gdb、gdbserver的编译使用网上有一大堆的例子。需要注意的是如果出现找不到头文件的问题不能采用

手动指定系统包含目录的方式,因为开发板系统跟主机系统的头文件不能互用,要修改生成的config.h文件。

注释掉不使用的特性。建议最好使用开发板自带的gdb源码来编译,否则出现的问题仅仅修改config.h文件可能解决不了。


你可能感兴趣的:(嵌入式系统中使用CGDB进行调试)