使用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: 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".
如果不一致, 同样会编译失败的。
至此完全配置完毕,在稍后的几天里, 我会根据情况来补充和完善这篇文章, 如有兴趣, 请继续关注吧!
使用Visual Studio 利用WinGDB编译和远程调试嵌入式Linux的程序的更多相关文章
- gdbserver远程调试嵌入式linux应用程序方法
此处所讲的是基于gdb和gdbsever的远程调试方法.环境为:PC机:win7.虚拟机:10.04.下位机:飞嵌TE2440开发板. 嵌入式linux应用程序的开发一般都是在linux里面编写好代码 ...
- CLion远程调试嵌入式开发板程序
CLion远程调试嵌入式开发板程序 目录 CLion远程调试嵌入式开发板程序 1. 目的 2. 前提条件 3. CLion设置 3.1 设置一个Deployment 3.2 上传需要的目录到目标板子 ...
- Visual Studio 2015中使用gdb远程调试linux程序
VS的debug功能非常强大,相比而言linux上的图形化调试一直不是很好用. 如果可以使用VS来调试linux程序,应该是一件比较愉快的事情. 这在2015中变得可能,因为从2015开始VS支持An ...
- visual studio 2015使用python tools远程调试maya 2016
步骤: 1. 去https://apps.exchange.autodesk.com/MAYA/en/Home/Index搜索Developer Kit并下载,maya 2016可以直接点击这里下载. ...
- ubuntu下使用visual studio code来编译和调试C++
最近想在linux上编译c++代码,自己却一直习惯window上的IDE.以前公司要我写Linux代码的时候,我一般都是用eclipse + CDT,而eclipse这东西吧,我个人感觉因为加载组件太 ...
- 在Visual Studio中直接编译Fluent的UDF
VS版本:Visual Studio 2013 Fluent版本:Fluent18.2 首先我们启动VS Studio中直接编译Fluent的UDF" title="在Visual ...
- 如何:使用 Visual Studio 中的一键式发布来部署 Web 应用程序项目
原文: 如何:使用 Visual Studio 中的一键式发布来部署 Web 应用程序项目 本主题介绍如何在以下产品中使用 一键式发布 发布(部署)Web 应用程序项目: Visual Studio ...
- Visual Studio 原生开发的10个调试技巧(二)
原文:Visual Studio 原生开发的10个调试技巧(二) 我以前关于 Visual Studio 调试技巧的文章引起了大家很大的兴趣,以至于我决定分享更多调试的知识.以下的列表中你可以看到写原 ...
- 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序
前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...
随机推荐
- 【二分+交互】codeforces B. Glad to see you!
codeforces.com/contest/809/problem/B 只需要找到2个被选中的,首先,注意到将区间二等分时左侧区间为[l,mid],右侧区间为[mid+1,r],dui(mid,mi ...
- msp430项目编程13
msp430中项目---温湿度检测系统 1.dht11工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习
- 洛谷—— P1098 字符串的展开
https://www.luogu.org/problem/show?pid=1098 题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类 ...
- P3371 单源最短路径【模板】 洛谷
https://www.luogu.org/problem/show?pid=3371 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含 ...
- 洛谷——P3353 在你窗外闪耀的星星
P3353 在你窗外闪耀的星星 题目描述 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向 ...
- codevs——3064 求和
3064 求和 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 青铜 Bronze 题解 查看运行结果 题目描述 Description 输入一个数x(x <= ...
- 2017CodeM初赛A场
A.最长树链(loj6159) 分析: 对于每个质因数,取出所有是它倍数的点组成一个树,然后找最长路径 每个数操作次数是其质因数的个数 所以总的复杂度不超过O(nlogA) B.二分图染色(loj61 ...
- Spring Boot使用Feign客户端调用远程服务时出现:timed-out and no fallback available,failed and no fallback available的问题解决
timed-out and no fallback available: 这个错误基本是出现在Hystrix熔断器,熔断器的作用是判断该服务能不能通,如果通了就不管了,调用在指定时间内超时时,就会通过 ...
- 通过k8s(Kubernetes)搭建jmeter的压测环境master-slave架构,实现弹性伸缩
在k8s上部署jmeter的mater和slave,根据压测需求动态增减master和slave节点数量,即可以完成压测任务,又可以是资源利用最大化 https://blog.kubernauts.i ...
- 搜索引擎keyword智能提示的一种实现
问题背景 搜索关键字智能提示是一个搜索应用的标配.主要作用是避免用户输入错误的搜索词,并将用户引导到相应的关键词上,以提升用户搜索体验. 美团CRM系统中存在数以百万计的商家,为了让用户高速查找到目标 ...