建德市住房和城乡建设局网站制作公司官网的步骤
news/
2025/9/26 8:07:24/
文章来源:
建德市住房和城乡建设局网站,制作公司官网的步骤,济南软件开发培训机构,一个营销型网站模板目录
1 搭建嵌入式gdb调试环境
1.1 交叉编译工具链自带的gdb和gdbserver
1.2 使用gdb进行嵌入式程序调试
1.2.1编写简单测试程序
1.2.2 gdb调试程序
1.3 源码编译gdb和gdbserver
1.3.1 下载gdb和gdbserver源码 1.3.2 编译gdb
1.3.3 移植gdbserver
2 VSCodegdbserver 图…目录
1 搭建嵌入式gdb调试环境
1.1 交叉编译工具链自带的gdb和gdbserver
1.2 使用gdb进行嵌入式程序调试
1.2.1编写简单测试程序
1.2.2 gdb调试程序
1.3 源码编译gdb和gdbserver
1.3.1 下载gdb和gdbserver源码 1.3.2 编译gdb
1.3.3 移植gdbserver
2 VSCodegdbserver 图形化调试 1 搭建嵌入式gdb调试环境
一般的桌面 Linux 系统比如 ubuntu、centos 等我们可以直接运行 gdb 来调试程序。但是嵌入式中芯片性能一般比较弱所以直接在嵌入式系统中运行 gdb 不太现实(性能强大的嵌入式芯片可以这么做)。嵌入式系统中一般在 PC 端运行 gdb 工具源码也是在 PC 端源码对应的可执行文件放到开发板中运行。为此我们需要在开发板中运行 gdbserver通过网络与 PC 端的 gdb 进行通信。因此要想在 PC 上通过 gdb 调试嵌入式程序那么需要两个东西gdb 和gdbserver其中gdb 是运行在 PC 上的gdbserver 需要我们移植到开发板上。
1.1 交叉编译工具链自带的gdb和gdbserver
一般来说交叉编译工具链都自带了gdb和gdbserver因此可以不用移植我去试了下发现gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf里面自带的gdbserver不能用 我把他放到开发板上执行提示
[rootimx6ull:/mnt]# ./gdbserver
-bash: ./gdbserver: No such file or directory然后我又试了下gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf的gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/bin这个目录下的gdbserver放到开发板上是可以用的 那么gdb我也用7.5.0里面的gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gdb。
1.2 使用gdb进行嵌入式程序调试
1.2.1编写简单测试程序
首先编写一个简单的测试程序用于调试
#include stdio.h
#include unistd.hint 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 test.c -o test -g //要使用-g选项才会有调试信息
然后我把他放到了开发板的/mnt目录下
1.2.2 gdb调试程序
首先在开发板上执行如下命令
./gdbserver :1234 test
在开发版上执行命令的时候是不需要指定IP地址的只需要指定端口号即可然后他就会一直监听 然后在电脑上用下面的命令开始调试
./arm-linux-gnueabihf-gdb test #我这里加了./是因为我没把这个交叉编译工具链加到环境变量中 然后再用下面的命令去连接开发板
target remote 172.31.8.195:1234 这时候开发板上也会发现被连接了 接下来就可以在电脑上调试程序了
比如看一下源码 比如我在main函数的第一行设置断点 1.3 源码编译gdb和gdbserver
如果交叉编译工具链里面没有gdb和gdbserver那么就要自己源码编译gdb和gdbserver方法如下。
1.3.1 下载gdb和gdbserver源码
去网址 http://www.gnu.org/software/gdb/download/ 然后解压
tar xzvf gdb-13.2.tar.gz 1.3.2 编译gdb 在交叉编译configure时通常会需要设置--build、--host和--target选项。各个选项的含义如下 --build编译所用的机器的平台。 --host编译出的代码运行的平台。 --target编译出来的工具链生成的代码的运行平台。这个选项不常用一般只在编译gcc、ld等工具链的过程中用到编译gdb,gdbserver时也会用到。 在不涉及到交叉编译的时候--build、--host、--target是一样的不需要特别设置。交叉编译的时候比如需要在x86平台编译arm程序就需要设置--build和--host选项。 通常本机上的gcc、ld等工具是没有前缀的这个时候--build可以设置为空。交叉编译工具链通常都有一个前缀比如arm-unknown-linux-gnueabi-gcc这个时候--host就要设置为arm-unknown-linux-gnueabi。 Example: ./configure --build --hostarm-unknown-gnueabi 然后用如下命令开始编译、安装
cd gdb-13.2/
mkdir /data/chw/imx6ull_20230512/nfs_rootfs/gdb_install
./configure --targetarm-linux-gnueabihf --prefix/data/chw/imx6ull_20230512/nfs_rootfs/gdb_install
make -j8
make install
上面编译的过程中如果报错
gdb-13.2/missing: makeinfo: not found
WARNING: makeinfo is missing on your system.You should only need it if you modified a .texi file, orany other file indirectly affecting the aspect of the manual.You might want to install the Texinfo package:http://www.gnu.org/software/texinfo/The spurious makeinfo call might also be the consequence ofusing a buggy make (AIX, DU, IRIX), in which case you mightwant to install GNU make:http://www.gnu.org/software/make/
Makefile:1794: recipe for target doc/bfd.info failed那就
sudo apt-get install texinfo
如果报错
configure: error: GMP is missing or unusable
Makefile:11803: recipe for target configure-gdb failed
make[1]: *** [configure-gdb] Error 1
make[1]: *** Waiting for unfinished jobs....
那就用下面的方法
apt-get install libgmp-dev
编译安装完之后得到 这里就不修改PATH环境变量了测试的时候直接加路径。
1.3.3 移植gdbserver
gdbserver是在开发板上运行的需要交叉编译gdbserver源码在./gdb-13.2/gdbserver里面
cd ./gdb-13.2/gdbserver
./configure --targetarm-linux-gnueabihf --hostarm-linux-gnueabihf CCarm-linux-gnueabihf-gcc CXXarm-linux-gnueabihf-g ARarm-linux-gnueabihf-ar LDarm-linux-gnueabihf-ld --prefix/data/chw/imx6ull_20230512/nfs_rootfs/gdbserver_install //配置
make
报错
../gdbsupport/libgdbsupport.a: error adding symbols: File format not recognized
collect2: error: ld returned 1 exit status
Makefile:361: recipe for target gdbreplay failed
make: *** [gdbreplay] Error 1
make: *** Waiting for unfinished jobs....
这个问题我是这么想的这个libgdnsupport.a库是在前面编译gdb的时候产生的但由于gdb是在X86电脑上运行的所以这个libgdnsupport.a库是x86格式的 所以我要在重新配置编译一遍gdb只不过这次配置要用下面的命令要编译交叉编译的版本但是不要make install要是install那么前面编译的X86版本的gdb就被覆盖了这一次其实不是为了编译gdb只是为了使用编译gdb过程中产生的库
tar xzvf gdb-13.2.tar.gz
cd ./gdb-13.2
./configure --targetarm-linux-gnueabihf --hostarm-linux-gnueabihf CCarm-linux-gnueabihf-gcc CXXarm-linux-gnueabihf-g ARarm-linux-gnueabihf-ar LDarm-linux-gnueabihf-ld
make -j8 //这次gdb就不要安装了要不然吧前面编译的覆盖了然后再编译gdbserver
cd ./gdb-13.2/gdbserver
./configure --targetarm-linux-gnueabihf --hostarm-linux-gnueabihf CCarm-linux-gnueabihf-gcc CXXarm-linux-gnueabihf-g ARarm-linux-gnueabihf-ar LDarm-linux-gnueabihf-ld --prefix/data/chw/imx6ull_20230512/nfs_rootfs/gdbserver_install //配置
make -j8
这时候就会在当前目录下生成一个gdbserver把它拷贝到开发板上即可
然后在开发板上执行 然后电脑上执行 这说明自己编译出来的gdb和gdbserver也是可以用的。
2 VSCodegdbserver 图形化调试
前面介绍的是用gdb命令进行调试的接下来看一下直接用vscode调试这样要比gdb命令方便。
先按照下面的博客安装必要的插件ubuntu上安装vscode并远程开发与远程调试服务器代码_vscode ssh远程连接ubuntu后,怎么打开项目代码-CSDN博客
我现在调试是这样的我的vscode是安装在windows上的然后我要调试的代码test.c是在ubuntu服务器上的所以我要先vscode远程打开ubuntu服务器上的test.c代码就根据上面链接的博客操作就可以然后run--Add Configuration---
会生成一个launch.json
把vscode里面的launch.json改成下面的内容 { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid830387 version: 0.2.0, configurations: [ { name: (gdb) Launch, type: cppdbg, request: launch, program: ${workspaceFolder}/test, args: [], stopAtEntry: false, cwd: ${fileDirname}, environment: [], externalConsole: false, MIMode: gdb, miDebuggerPath: /data/chw/imx6ull_20230512/nfs_rootfs/gdb_install/bin/arm-linux-gnueabihf-gdb, miDebuggerServerAddress: 172.31.8.195:1234 } ] } 其中
miDebuggerPath此项需要手动添加用于指定所使用的交叉编译器 gdb 路径。 miDebuggerServerAddress此项需要手动添加远程 gdbserver 服务器地址。
然后开发板上还是老样子运行gdbserver 然后vscode上直接按F5然后开发板上打印出了被连接的log。 然后就可以在vscode上进行调试了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917962.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!