arm-linux gdb远程调试

一般交叉编译已经自带了 gdb 和 gdbserver
路径:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

 如果交叉编译器自带了 gdb 和 gdbserver 的话只需要将 gdbserver 拷贝到开发板根文件系统
的/bin 目录下

编写一个测试应用
 

#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
unsigned int times = 0;
while(1) {
printf("runing times:%d\r\n", times);
times++;
sleep(1);
}
}
arm-linux-gnueabihf-gcc gdbtest.c -o gdbtest -g //编译测试程序,注意-g 选项

一切准备就绪以后就可以使用GDB进行调试了,确保ubuntu和开发板可以进行网络通信。
在开发板中输入如下命令:
gdbserver 192.168.1.253:2001 gdbtest //启动开发板上的 gdbserver
 

接着在 ubuntu 中输入如下命令启动 gdb 调试工具:
arm-linux-gdb gdbtest
 

最下面的(gdb)行用于输入命令,输入如下命令连接到开发板上:
target remote 192.168.1.251:2001 //连接到开发板上
 

l 命令
l 命令(list)用于列出所有程序源码,


b 命令
b 命令(break)用于设置断点,也可以用缩写“b”,后面可以跟具体的函数或者行号,比如
“break main”表示在 main 函数处设置断点,“break 11”在第 11 行设置断点。

c 命令
c 命令用于运行到断点处,输入 c 命令程序就会运行,直到下一个断点处,
 

s 命令
s 命令(step)是单步运行执行,此函数会进入到函数里面。
 

n 命令
n 命令(next)也是单步运行,但是 n 命令不会进入到函数里面。
 

p 命令
p 命令(print)用于打印某个变量值。
 

q 命令
q 命令(quit)用于退出调试,开发板上的 gdbserver 也会停止。
 

常用命令:

          start:开始执行程序,在main函数的第一条语句停下来,简写:s。

          list:显示多行源代码,简写:l。

          break 行号:设置断点,程序到断点的位置会停下来 ,简写:b。

          continue:继续程序运行,直到遇到下一个断点              ,简写:c。

          print:打印内部变量值

          kill:终止正在调试的程序

         watch:在程序中设置一个监测点,监视变量的变化

        display:跟踪查看某一个变量,每次停下来都显示它的值

       delete 行号:删除一个断点或监测点

       step:执行下一条语句,如果该语句为函数调用,则进入函数执行其中第一条语句

       finish:如果已经进入了某函数,而想退出该函数返回到它的调用函数,可使用该命令

      next:单步执行,不可跟踪到函数内部

      jump:设定了多个断点,会跳到另一个断点继续执行,在源程序中的另一点开始运行

     whatis 变量或函数:显示某个函数或变量的类型

       set variable 设置变量的值

      backtrace bt :查看函数调用的信息对栈

      backtrace n = bt n : n 是一个正整数,表示只打印栈顶上n层的栈信息 ;

                                       n 是一个负整数,表示只打印栈底下n层的栈信息 

    frame n :查看栈帧 ,n是一个从0开始的整数,是栈中的层编号。

   up  n:表示向栈的上面移动n层,可不打n,表示上移动一层

   down n:表示向栈的下面移动n层,可不打n,表示下移动一层
 

猜你喜欢

转载自blog.csdn.net/L1153413073/article/details/125622344