使用Visual Studio 利用WinGDB编译和远程调试嵌入式Linux的程序

写这篇文章的目的在于帮助那些既要使用Visual Studio编写程序又要开发和调试嵌入式Linux 程序的苦命程序员们!

第一步, 安装 WinGDB ,下载位置  http://www.wingdb.com/  ,连接是http://www.wingdb.com/WinGDB-latest_trial.msi 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; make
Project clean command: make clean
Project deploy command:
Build working directory: /root/ct/src/
Build environment variables: BUILD_CONFIGURATION="Debug"
Build before start debugging: Build project
Deploy before start debugging: yes
Deploy action: Transfer file to target
Deploy only if file changed: yes
Files to deploy: /root/ct/src//EMRCV4
Deploy target directory: /mnt/EMRCV4/BIN
Core file path:
Working directory: /mnt/EMRCV4/BIN
Arguments:
Environment variables:
Stop in main(): no
Target specification:
Server mode: Launch executable
Executable on target: /mnt/EMRCV4/BIN/EMRCV4
Launch GDB server automatically: yes
Launch server from sysroot: no
Path to gdbserver: /usr/bin/gdbserver
Server port: 2345
Server port is forwarded: no
Forwarded server port: 0
Executable path: /root/ct/src//EMRCV4
Byte order: Little endian
Initialization script:
Additional source directories:
Debug info directory:
Sysroot on host:
Sysroot on target:
Shared library directories:
Visualizer profile:
Load sources from build host: no
Disable hang reporter: no
Debugger path: /usr/bin/arm-unknown-linux-gnueabi-gdb
Build toolchain paths:
Intercept standard IDE commands: yes
Target type: Linux indirect debugging (SSH+remote target)
Debug host login: [email protected]:22
Build host login: [email protected]:22
Debug target login: [email protected]:22

至此完成项目的调试和编译配置

第三部、代码映射配置

此时输出窗口中会输出如下内容:

--------------------------------------------------------------------------------                         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.2
Copyright (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的版本信息

注意, 一定要注意  This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-unknown-linux-gnueabi".

如果不一致, 同样会编译失败的。

至此完全配置完毕,在稍后的几天里, 我会根据情况来补充和完善这篇文章, 如有兴趣, 请继续关注吧!

Visual Studio 的详细介绍请点这里
Visual Studio 的下载地址请点这里

猜你喜欢

转载自www.linuxidc.com/Linux/2015-12/126399.htm