用 Visual Studio 调试 Linux 程序¶
用 Visual Studio 调试 Linux 程序?你真的没看错,这个是真的,不是标题党。当然如果你说 VS2015 及以上版本自带的 Linux 调试插件,那就算了。这些自带的插件调试一个有简单的 main 函数程序还凑合,稍微复杂点的程序,根本无法编译调试。
而本文介绍的主角是 VS 的另外一款插件 Visual GDB,让我们欢迎主角登场,下面是正文。
使用 Visual Studio+VisualGDB 调试远程 Linux 程序¶
需要工具:
- Visual Studio 2013 或以上版本(以下简称 VS)
- VisualGDB(一款 VS 插件,官网为:http://visualgdb.com/)
- 含有调试符号的 Linux 程序文件(该程序文件为调试目标)
- Visual Assistant(番茄助手,另外一款 VS 插件)
在 VS 上安装完 VisualGDB 插件以后,有如下几种方式来对远程 Linux 机器上的程序进行调试:
- 方法一、如果该程序已经启动,则可以使用 VS 菜单【Debug】->【Attach to Process...】。
这种方法有个缺点是,不能从开始启动的 main 函数处添加断点,自始至终地调试程序,查看完整程序运行脉络,所以下面推荐方法二。
- 方法二、利用 VS 启动远程 Linux 机器上一个 Linux 程序文件进行调试。选择 VS 菜单【Debug】 ->【Quick Debugwith GDB】。
需要注意的地方,已经在上图中标红框。这里简单地解释一下:
如果你安装了交叉编译环境 Target 可以选择 MinGW/Cygwin,否则就选择远程 Linux 系统。这里如果不存在一个 ssh 连接,则需要创建一个。
Debugged program 是需要设置的被调试程序的路径,位于远程 Linux 机器上。
Arguments 是该调试程序需要设置的命令行参数,如果被调试程序不需要命令行参数可以不设置。
Working directory 是被调试程序运行的工作目录。
另外建议勾选上 Initial breakpoint in main,这样启动调试时,程序就会停在程序入口处。
这样,我们就可以利用 VS 强大的功能去查看程序的各种状态了,常用的面板,如【内存】【线程】【观察】【堆栈】【GDB Session】【断点】等窗口位于 VS 菜单【Debug】->【Windows】菜单下,注意,有些窗口只有在调试状态下才可见。这里有两个值得强调一下的功能是:
- GDB Session窗口,在这个窗口里面可以像原来直接使用 gdb 调试一样输入 gdb 指令来进行调试。
- SSH console窗口,这个窗口类似一个远程操作 Linux 系统的应用程序如 xshell、SecureCRT。
现在还剩下一个问题,就是我们虽然在调试时可视化地远程查看一个 Linux 进程的状态信息,但很多类型的定义和什么却无法看到。解决这个问题的方法就是你可以先在 VS 里面建立一个工程,导入你要调试的程序的源代码目录。然后利用方法一或者方法二去启动调试程序。这个时候你想查看某个类型的定义或什么只要利用 Visual Assit 的查看源码功能即可,快捷键是 Alt + G。
需要注意的时:同时安装了 Visual Assist 和 VisualGDB 后,后者也会提供一个 go 按钮去查找源码定义,但这个功能远不如 Visual Assist 按钮好用,我们可以禁用掉它来使用 Visual Assist 的 Go 功能。禁用方法,打开菜单:【Tools】->【Option...】:
然后重启 VS 即可。
到这里,既可以查看源码,也可以调试程序了。
VisualGDB 下载地址:
链接:https://share.weiyun.com/57aGHLM 密码:kj9ahs