使用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):
1.jpg

  下一步当然是把你要编译调试的源代码加入系统了:
2.jpg

  本以为到这里就差不多可以直接编译了,但是VS还是给我报了一大堆错。主要原因还是 VS 找不到配套的 Linux 系统头文件,所以我还得把 Linux 的 /usr/include 下的文件拷贝一份到 Windows 中,并添加到 VS 的 Include Path 中。
3.jpg

  再次强调,上一步的作用不是为了让 VS 去编译,这一步骤的主要作用还是让 VS 去高亮你写的代码,以及实现代码自动提示功能,因此编译后运行所需要的动态链接库不需要同步到 Windows 系统中,但是仍然要在 VS 工程中指定使用的库,以便在 Linux 平台上编译的时候加上 -l 参数。
4.jpg

  大功告成,打完收工。
5.jpg

评论卡

已有 21 条评论

  1. zhujg
    zhujg
    2021年12月31日

    你好 能发下具体步骤吗。直接编译,貌似不通过

    回复

  2. uxqcoutfjs
    uxqcoutfjs
    2024年11月29日

    《欲望游戏》泰国剧高清在线免费观看:https://www.jgz518.com/xingkong/137736.html

    回复

  3. xshnyyutlr
    xshnyyutlr
    2024年11月29日

    《濒危的爱斯基摩犬》记录片高清在线免费观看:https://www.jgz518.com/xingkong/162854.html

    回复

  4. faccponnmm
    faccponnmm
    2024年11月30日

    你的文章让我感受到了不一样的风景,谢谢分享。 https://www.yonboz.com/video/90623.html

    回复

  5. byhvnrvdof
    byhvnrvdof
    2024年12月01日

    《我的反派夫君》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/67922.html

    回复

  6. rabazyqbam
    rabazyqbam
    2024年12月03日

    你的文章让我感受到了不一样的风景,谢谢分享。 http://www.55baobei.com/GpqcGwDXsb.html

    回复

  7. ukkdwvhtrr
    ukkdwvhtrr
    2024年12月06日

    《欲望游戏》泰国剧高清在线免费观看:https://www.jgz518.com/xingkong/137736.html

    回复

  8. kouidmujbg
    kouidmujbg
    2024年12月26日

    《2024-11-01 CBA常规赛第9轮 天津先行者VS新疆伊力特》短片剧高清在线免费观看:https://www.jgz518.com/xingkong/161430.html

    回复

  9. huorwedlky
    huorwedlky
    1月3日

    《战神令》短片剧高清在线免费观看:https://www.jgz518.com/xingkong/22620.html

    回复

  10. gystrqpuxj
    gystrqpuxj
    1月3日

    《江湖追凶录》短片剧高清在线免费观看:https://www.jgz518.com/xingkong/24242.html

    回复

  11. lymsdzmzqx
    lymsdzmzqx
    1月6日

    哈哈哈,写的太好了https://www.lawjida.com/

    回复

  12. fqwhnpxrjo
    fqwhnpxrjo
    1月6日

    哈哈哈,写的太好了https://www.lawjida.com/

    回复

  13. chkxmkzamk
    chkxmkzamk
    2月28日

    首尾呼应,主题鲜明,收束有力。

    回复

  14. onbsmymnou
    onbsmymnou
    3月1日

    文章中的实用建议和操作指南,让读者受益匪浅,值得珍藏。

    回复

  15. wzbsflkaym
    wzbsflkaym
    3月1日

    跳出常规思维,角度独特,令人耳目一新。

    回复

  16. vctkftuved
    vctkftuved
    3月2日

    技术前瞻性分析体现行业敏感度。

    回复

  17. ecncymxnuf
    ecncymxnuf
    3月2日

    人物刻画立体,细节描写入木三分。

    回复

  18. tuwjgvppgv
    tuwjgvppgv
    3月2日

    平淡中见真章,质朴处显功力。

    回复

  19. ztauoxvsfe
    ztauoxvsfe
    3月2日

    情感浓度过高可适当留白,以达平衡。

    回复

  20. nvdkfbskvc
    nvdkfbskvc
    3月2日

    作者对主题的挖掘深入骨髓,展现了非凡的洞察力和理解力。

    回复

  21. lpamyqwnom
    lpamyqwnom
    3月6日

    这篇文章不错!

    回复