写这篇文章的目的在于帮助那些既要使用Visual Studio编写程序又要开发和调试嵌入式Linux 程序的苦命程序员们! html
第一步, 安装 WinGDB ,下载位置 http://www.wingdb.com/ ,链接是http://www.wingdb.com/WinGDB-latest_trial.msi 30天试用版在30天后 卸载掉, 删除全部gdb相关的注册表, 而后从新安装, 就又可使用30天, 安装过程以下图示: linux
一、选择赞成许可协议 程序员
二、若是你机器上装了足够多的VS版本, 你均可以选择, 主要看你用那个版本的VS redis
三、若是你仅做远程Linux开发 , 则选第一项, 若是你要作嵌入式系统开发, 选择第二项, 若是你想所有要, 则选第三项 , 咱们这里固然是选择第三项了。 ubuntu
第二步、建立WinGDB项目 服务器
一、新建WinGDB项目,选择Multiplatform executable app
二、选择第一项, 咱们要进行远程开发,源码在构建在远程服务器上, 调试也一样在远程主机上, 经过TCP/IP链接并使用SSH协议来访问这些机器。 ssh
三、选择第二项, gdb 和交叉编译环境在一台服务器上, 远程调试在另一台机器上, 这台机器能够是arm linux 也能够是其余支持gdbserver 的机器。 函数
四、填写gdb和编译环境的ssh地址和用户名密码 以及 gdbserver 所在的用户名密码和IP地址。 ui
五、惦记Browse 选择咱们事先编译好的 gdb 调试器,这是运行在编译环境那台服务器上的gdb , 用来控制 gdbserver 的 , gdb和gdbserver必须是对应的。
六、选择本地源码和远程的源码的同步方式, 这个根据状况来选择, 若是你是共享的, 择选第一项, 若是须要同步, 则选第二项, 若是不须要同步, 则选第三项, 如图:
七、选择远程文件路径和本地文件路径:
八、设置编译 命令, 和编译目录, 这些目录在点击browse时都是列出的编译服务器上的目录
九、选择远程调试的目标目录 , 如图:
十、选择额外和附加的源码文件和库 ,这步直接跳过, 若是你有须要, 则能够再这里设置。
十一、设置调试启动参数 ,与此同时, 建议把Stop in main 去掉, 这样避免每次启动程序时, 都要在main 函数哪里停下来。 如图:
十二、配置完成, 如图:
个人配置内容以下:
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: root@192.168.50.178:22
Build host login: root@192.168.50.178:22
Debug target login: root@192.168.50.58: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的版本信息
root@ubuntu:/usr/bin# arm-unknown-linux-gnueabi-gdb
GNU gdb (GDB) 7.2
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
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:
<http://www.gnu.org/software/gdb/bugs/>.
注意, 必定要注意 This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-unknown-linux-gnueabi".
若是不一致, 一样会编译失败的。
至此彻底配置完毕,在稍后的几天里, 我会根据状况来补充和完善这篇文章, 若有兴趣, 请继续关注吧!