使用Visual Studio远程编译Nginx on Linux并远程Debug
为什么要使用VS开发
和普通科班出身的人不同,我的 C++ 开发入门时候用的 IDE 应该就是Visual Studio 2012,而且自己写的一些小软件也基本上是在 windows 上跑跑而已,所以基本没有怎么用过 gdb 。等到了我接到 linux 开发需求的任务时已经为时已晚。虽然说此类 debugger 无非就是干三件事情:代码断点、变量监视、查看堆栈,但是用惯了VS系列 IDE 的我发现我已经不能接受gdb这种命令行下的 debugger 软件了。
万幸的是,在今年的 Microsoft Build 2017 Developer Conference 上,VS 开始原生支持远程编译、远程 debug ,这意味着我可以用 Linux 里的 gcc/g++ 去编译、用 gdb 去调试,再在最外面用 VS 这个“壳子”来让这个过程图形化,可以说是非常酷炫了。
这次的挑战
这次我遇到的一个任务是给某公司的 Load Balance 服务器上的 nginx 开发一个定制插件。这个插件包括了以下功能:
- 能通过 HTTP 请求的 Header 中的 UID 信息来区分不同的用户
- 动态查询 UID 对应的不同用户的限速值并给予限速(上行、下行)
- 实现一定的负载均衡功能
仅仅就限速这个功能来说,还是非常好实现的,现成的插件也是一大堆,再不济用 openresty 也是没问题的,但是动态限速和 UID 获取就得再对现成的限速代码做一定修改了。
由于 nginx 的插件需要连同 nginx 一块编译,所以在 linux 平台上调试起来对于我这个 gdb 小苦手也是非常难受的,所以这一次我决定用一下 VS2017 提供的远程 Debug 新功能。
相关介绍
对于这个新功能的详细介绍请参看这里,讲解得非常清晰,我就说说自己的一些理解吧。
这个 Remote Debugger 的底层实质还是 gdb-server ,所以它的写代码到编译到调试的过程实质上是这样的:
- 首先在 VS 的 IDE 中修改了代码之后,代码会保存到硬盘,在按下 Remote Debugger 按钮之后,VS 会通过你预先输入的 SSH 帐号密码使用 SCP 传输到远程 Linux 机器上。
- 然后 VS 将通过 SSH 远程使用 GCC 编译源代码,若出现错误,则将错误传输到 Windows 的 VS 界面上,如果没有错误,将生成二进制可执行文件。
- VS 再通过 gdb-server 打开一个端口供远程主机访问,然后 VS 接入端口,即可使用 gdb 对远程机器上跑的程序进行调试,VS 再把这个过程在界面中可视化,这样就做到了在 VS 中写、调试跑在 Linux 上的代码。
实践!
其实按照上文介绍的微软官方的教程做下来是非常容易的,但是我在实际应用的时候还是遇到了不少坑,在这里和大家分享一下。
首先创建一个跨平台项目->生成文件项目(Linux):
下一步当然是把你要编译调试的源代码加入系统了:
本以为到这里就差不多可以直接编译了,但是VS还是给我报了一大堆错。主要原因还是 VS 找不到配套的 Linux 系统头文件,所以我还得把 Linux 的 /usr/include 下的文件拷贝一份到 Windows 中,并添加到 VS 的 Include Path 中。
再次强调,上一步的作用不是为了让 VS 去编译,这一步骤的主要作用还是让 VS 去高亮你写的代码,以及实现代码自动提示功能,因此编译后运行所需要的动态链接库不需要同步到 Windows 系统中,但是仍然要在 VS 工程中指定使用的库,以便在 Linux 平台上编译的时候加上 -l
参数。
大功告成,打完收工。
标签: 无标签
已有 23 条评论
2021年12月31日
你好 能发下具体步骤吗。直接编译,貌似不通过
回复
2024年11月29日
《欲望游戏》泰国剧高清在线免费观看:https://www.jgz518.com/xingkong/137736.html
回复
2024年11月29日
《濒危的爱斯基摩犬》记录片高清在线免费观看:https://www.jgz518.com/xingkong/162854.html
回复
2024年11月30日
你的文章让我感受到了不一样的风景,谢谢分享。 https://www.yonboz.com/video/90623.html
回复
2024年12月01日
《我的反派夫君》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/67922.html
回复
2024年12月03日
你的文章让我感受到了不一样的风景,谢谢分享。 http://www.55baobei.com/GpqcGwDXsb.html
回复
2024年12月06日
《欲望游戏》泰国剧高清在线免费观看:https://www.jgz518.com/xingkong/137736.html
回复
2024年12月26日
《2024-11-01 CBA常规赛第9轮 天津先行者VS新疆伊力特》短片剧高清在线免费观看:https://www.jgz518.com/xingkong/161430.html
回复
1月3日
《战神令》短片剧高清在线免费观看:https://www.jgz518.com/xingkong/22620.html
回复
1月3日
《江湖追凶录》短片剧高清在线免费观看:https://www.jgz518.com/xingkong/24242.html
回复
1月6日
哈哈哈,写的太好了https://www.lawjida.com/
回复
1月6日
哈哈哈,写的太好了https://www.lawjida.com/
回复
2月28日
首尾呼应,主题鲜明,收束有力。
回复
3月1日
文章中的实用建议和操作指南,让读者受益匪浅,值得珍藏。
回复
3月1日
跳出常规思维,角度独特,令人耳目一新。
回复
3月2日
技术前瞻性分析体现行业敏感度。
回复
3月2日
人物刻画立体,细节描写入木三分。
回复
3月2日
平淡中见真章,质朴处显功力。
回复
3月2日
情感浓度过高可适当留白,以达平衡。
回复
3月2日
作者对主题的挖掘深入骨髓,展现了非凡的洞察力和理解力。
回复
3月6日
这篇文章不错!
回复
10月6日
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!
回复
10月7日
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
回复