对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配合调试的截图,看起来是不是很舒服?
(免费版给打了3个水印,太过份了,这个hypersnap真是不地道啊)
关于gdb、gdbserver的编译使用网上有一大堆的例子。需要注意的是如果出现找不到头文件的问题不能采用
手动指定系统包含目录的方式,因为开发板系统跟主机系统的头文件不能互用,要修改生成的config.h文件。
注释掉不使用的特性。建议最好使用开发板自带的gdb源码来编译,否则出现的问题仅仅修改config.h文件可能解决不了。
(PS: 今天闲来无事,打了个man cgdb,结果发现使用-d 参数就可以设置目标GDB[而且还是在这个日子发现的2016-04-01])