本文共 4573 字,大约阅读时间需要 15 分钟。
写这篇文章的目的在于帮助那些既要使用Visual Studio编写程序又要开发和调试嵌入式Linux 程序的苦命程序员们!
第一步, 安装 WinGDB ,下载位置 ,连接是 30天试用版在30天后 卸载掉, 删除所有gdb相关的注册表, 然后重新安装, 就又可以使用30天, 安装过程如下图示:
1、选择同意许可协议
2、如果你机器上装了足够多的VS版本, 你都可以选择, 主要看你用那个版本的VS
3、如果你仅作远程Linux开发 , 则选第一项, 如果你要做嵌入式系统开发, 选择第二项, 如果你想全部要, 则选第三项 , 我们这里当然是选择第三项了。
第二步、创建WinGDB项目
1、新建WinGDB项目,选择Multiplatform executable
2、选择第一项, 我们要进行远程开发,源码在构建在远程服务器上, 调试也同样在远程主机上, 通过TCP/IP连接并使用SSH协议来访问这些机器。
3、选择第二项, gdb 和交叉编译环境在一台服务器上, 远程调试在另外一台机器上, 这台机器可以是arm linux 也可以是其他支持gdbserver 的机器。
4、填写gdb和编译环境的ssh地址和用户名密码 以及 gdbserver 所在的用户名密码和IP地址。
5、惦记Browse 选择我们事先编译好的 gdb 调试器,这是运行在编译环境那台服务器上的gdb , 用来控制 gdbserver 的 , gdb和gdbserver必须是对应的。
6、选择本地源码和远程的源码的同步方式, 这个根据情况来选择, 如果你是共享的, 择选第一项, 如果需要同步, 则选第二项, 如果不需要同步, 则选第三项, 如图:
7、选择远程文件路径和本地文件路径:
8、设置编译 命令, 和编译目录, 这些目录在点击browse时都是列出的编译服务器上的目录
9、选择远程调试的目标目录 , 如图:
10、选择额外和附加的源码文件和库 ,这步直接跳过, 如果你有需要, 则可以再这里设置。
11、设置调试启动参数 ,与此同时, 建议把Stop in main 去掉, 这样避免每次启动程序时, 都要在main 函数哪里停下来。 如图:
12、配置完成, 如图:
我的配置内容如下:
Project build command: make
Project rebuild command: make clean; makeProject clean command: make cleanProject deploy command: Build working directory: /root/ct/src/Build environment variables: BUILD_CONFIGURATION="Debug"Build before start debugging: Build projectDeploy before start debugging: yesDeploy action: Transfer file to targetDeploy only if file changed: yesFiles to deploy: /root/ct/src//EMRCV4Deploy target directory: /mnt/EMRCV4/BINCore file path: Working directory: /mnt/EMRCV4/BINArguments: Environment variables: Stop in main(): noTarget specification: Server mode: Launch executableExecutable on target: /mnt/EMRCV4/BIN/EMRCV4Launch GDB server automatically: yesLaunch server from sysroot: noPath to gdbserver: /usr/bin/gdbserverServer port: 2345Server port is forwarded: noForwarded server port: 0Executable path: /root/ct/src//EMRCV4Byte order: Little endianInitialization script: Additional source directories: Debug info directory: Sysroot on host: Sysroot on target: Shared library directories: Visualizer profile: Load sources from build host: noDisable hang reporter: noDebugger path: /usr/bin/arm-unknown-linux-gnueabi-gdbBuild toolchain paths: Intercept standard IDE commands: yesTarget type: Linux indirect debugging (SSH+remote target)Debug host login: Build host login: Debug target login:至此完成项目的调试和编译配置
第三部、代码映射配置
此时输出窗口中会输出如下内容:
-------------------------------------------------------------------------------- Transfer to remote host(s) --------------------------------------------------------------------------------
Errors were encountered during preparation: No files could be copied.
Could not map the path: D:\Works\RHY\Toll\Trunk\src\FunctionAssembly\Lane\EMRCV4\EMRCV4.vcxproj to remote filesystem. Use 'Map source directories' option to setup a mapping.
如果出现, 则打开代码映射窗口
然后在下面添加一个Login , 再选择添加一个映射, 如图:
下面是编译时的效果, 由于编译器错误等级原因, 第一次编译会有很多错, 第二次编译则错误消失 ,
如图:
调试时 , 启动时会弹出下面的窗口, 点确定即可, 不用理会
下面是调试过程的情况, 可以查看运行时当前进程的局部变量和鼠标下面的变量值, 这个跟VS一样, 也可以单步执行。
第四步:头文件引用 , 上图中你可以看到很多常量和函数都有红线, 是因为VS找不到对应的头文件, 因此需要继续做些设置。
打开项目属性, 选中配置属性, 选中VC++目录,然后在包含目录中加入 交叉编译环境中的头文件,比如:
D:\Works\Linux\toolchain_R2_EABI\usr\arm-unknown-linux-gnueabi\sysroot\usr\include
然后, 你需要把你所有头文件的目录全部添加在这里, 如果头文件目录比较多, 就比较费劲。
设置完后你会看到VS正在解析头文件, 设置后效果如下:
最后, 如果向导设置有问题或者没有保存, 可能是由于不是管理员权限的原因, 因此你可能需要检查下你的配置,
方法如下图:
常规设置 debug host 和 build host 一样
环境中设置调试器路径
调试选项中, 要选择好生产的可执行文件 和 在 目标机器上的 应用程序工作目录
调试目标
gdbserver 设置
下面一步很关键, 是项目生成设置, 生成目录必须和路径映射中的路径一直, 否则报错的错误无法定位文件位置,
第七栏中设置 调试前生成项目, 第八项设置调试前需要部署, 第十项设置 部署操作为传送文件至目标,
第十一项选择是, 当文件改变则部署, 第十二项决定要部署的文件, 第五项是 要部署的文件位置。
结束语
另外编译arm 相关的gdbserver 和 gdb在以后的文章中也会介绍到!这篇文章就不做介绍了。 如果gdb和gdbserver 不一致, 则同样会无法调试
下面是我的gdbserver 的版本信息:
[192.168.50.58:/mnt/EMRCV4/BIN]# gdbserver --version
GNU gdbserver (GDB) 7.2Copyright (C) 2010 Free Software Foundation, Inc.gdbserver is free software, covered by the GNU General Public License.This gdbserver was configured as "arm-unknown-linux-gnueabi"[192.168.50.58:/mnt/EMRCV4/BIN]#下面是gdb的版本信息
# arm-unknown-linux-gnueabi-gdb
GNU gdb (GDB) 7.2Copyright (C) 2010 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later <>This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law. Type "show copying"and "show warranty" for details.This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-unknown-linux-gnueabi".For bug reporting instructions, please see:<>.注意, 一定要注意 This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-unknown-linux-gnueabi".
如果不一致, 同样会编译失败的。
至此完全配置完毕,在稍后的几天里, 我会根据情况来补充和完善这篇文章, 如有兴趣, 请继续关注吧!
转载地址:http://wbfyl.baihongyu.com/