根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成。主要是作为个人学习记录。有错误的地方,Robin欢迎大家指正。

本文介绍如何快速调试GCC构建的Linux程序,而不用再创建一个单独的VS项目。

本文中,首先在Linux机器上构建GNU binutils程序,然后使用VS调试cxxfilt程序(GNU C++ name demangler)来发现该程序中的哪些函数真正进行了demangling。然后,我们可以使用本文介绍的技术来调试GCC构建的其他工具。

以下是快速调试步骤。

1 下载并解压binutils源码

在Linux电脑上下载并解压binutils源码。如果你使用的是基于Debian的Linux系统,使用如下命令来完成:

apt-get source binutils

2 配置并构建binutils

在Linux机器上运行如下命令来配置和构建binutils:

cd ~

mkdir binutils-build

cd binutils-build

../binutils-2.22/configure

make

3 使用构建的cxxfilt工具进行demangle

上一节构建结束后,在目录~/binutils-build/binutils下会包含cxxfilt二进制程序。运行该程序并键入二进制文件中的一个C++-mangled名字(比如_Z4testi),程序将会demangle该名字(对于名字_Z4testi,结果是test(int)):

4 从VS中快速远程调试二进制程序

从VS中远程调试cxxfilt二进制程序的最快方式是,使用VisualGDB的快速调试特性(需要VisualGDB3.0或更新版本)。

下面各步骤将介绍如何进行快速调试(Quick Debug)。

5 启动VS并快速调试

启动VS,并选择”Debug”->”Quick Debug with GDB”:

6 选择调试Linux程序及远程机器

选择”Debug a Linux app”,然后再选择远程机器。根据需要建立一个新的SSH连接。

7 选择被调试程序并配置GDB

设定要调试的程序的路径(比如cxxfilt),使用右侧的按钮来浏览Linux机器上的文件。在”GDB binary”中设定”gdb”,从而在Linux机器上使用默认的GDB。

推荐使用有意义的名字来保存preset,这样下次在调试同一个可执行程序时就可以避免再次手动配置了。

8 断点调试

点击”Debug”开始调试,然后会进入main()中的断点:

9 自动下载相应的源码

值得注意的是,VisualGDB会自动从Linux机器上将源码cxxfilt.c下载到%LOCALAPPDATA%\VisualGDB\AutoDownloadedSources中。如果你step into或者在Call Stack中切换选择,VisualGDB会继续下载需要的文件。当然,下载的过程是单向的:你不能在Windows上修改这些文件。如果想在Windows上修改你的Linux源码,请参考文档《使用VS来开发Linux程序》。

10 恢复运行并断点

按F5恢复程序运行,然后点击”Break All”断点进入:

11 在demangle函数中设置断点并用户输入

在Call Stack中可以发现,程序正等待用户输入。在函数调用demangle_it()上设置断点,并按F5恢复程序执行。

在Remote Console pane中,键入_Z4testi并按Enter键,将会进入刚设置的断点中:

12 单步进入demangle函数

单步进入demangle_it()函数中,观察该函数究竟干了啥:

可以看到,该函数内部实际上调用cplus_demangle_v3()进行demangle。cplus_demangle_v3()函数来自于libiberty库中的cplus-dem.c文件。

13 查看源码

由于没有创建VisualGDB项目,VS中的Solution Explorer并不显示任何文件。为了浏览symbol files中列出的所有源文件,在GDB Session窗口中点击按钮”Source File List”:

VisualGDB源文件浏览器页将会展示GDB报告的所有文件、对应的在Windows上的位置(如果已经建立路径映射的话),并允许在VS中打开这些文件。缺失的文件将会被自动下载。进入Hierarchical View,选择任意文件并点击”Open”,该文件将被下载并在VS中打开:

之后可以按Shift-F5结束调试。

转载于:https://www.cnblogs.com/robinex/p/7881976.html

VisualGDB系列10:快速调试Linux应用程序相关推荐

  1. 不懂技术系列--如何快速调试html5页面/手机页面

    很多前端开发,在做手机端的页面/html5页面的时候,PC端开发完成后,想在手机端测试开发的页面效果,特效等,还需要去找后台技术帮忙,很是麻烦,网上也有很多教程使用很多工具来实现,如Chrome.UC ...

  2. Visual Studio 2017 + VisualGDB 调试Linux C++程序

    Visual Stuido版本: VisualGDB版本: 经过测试,VisualGBD 5.1暂不支持VS 2017,5.3及以上版本在VisualGDB Project Properties - ...

  3. cdgb调试linux崩溃程序

    直接上原图: 使用命令:cgdb test test.core.2235 安装cgdb程序步骤: 1:wget http://cgdb.me/files/cgdb-0.7.1.tar.gz(网络会受到 ...

  4. VisualGDB 系列

    VisualGDB系列11:Linux C++项目中使用外部Linux库 VisualGDB系列10:快速调试Linux应用程序 VisualGDB系列9:配置VS直接通过SSH方式访问Linux项目 ...

  5. ida调试linux程序,MAC使用IDA PRO远程调试LINUX程序

    1 背景 在学习Linux系统上的一些漏洞知识的时候,往往需要进行"实地测试",但是在Linux系统上进行调试并不太方便,因为LINUX自带的GDB调试工具真的不太人性化,即使有G ...

  6. visual studio asmx 调试_通过Windows Visual Studio远程调试WSL2中的.NET Core Linux应用程序...

    最近两天在Linux中调试.NET Core应用程序,同时我发现在Linux中调试.NET Core应用程序并不容易.一直习惯在Visual Studio中进行编码和调试.现在我想的是可以简单快速的测 ...

  7. 通过Windows Visual Studio远程调试WSL2中的.NET Core Linux应用程序

    最近两天在Linux中调试.NET Core应用程序,同时我发现在Linux中调试.NET Core应用程序并不容易.一直习惯在Visual Studio中进行编码和调试.现在我想的是可以简单快速的测 ...

  8. Ubuntu20.04+gdb/vscode调试ROS(VINS-Mono)程序

    平台Ubuntu20.04 + ROS noetic 程序算法:VINS-mono 在阅读本文之前,建议先行了解基本的vscode调试工具与流程,以及如何安装vscode的ROS扩展,详情请参考博文: ...

  9. linux c程序设计基础秦攀科版答案,2016年linux c程序员和初学者不得错过的精品图书18册...

    [1]图书名称:零点起飞学Linux C编程 图书信息:陈冠军/清华大学出版社 / 2013-09-01 [2]图书名称:Linux C从入门到精通 图书信息:明日科/清华大学出版社 / 2012-1 ...

最新文章

  1. 我要放弃RedHat Linux了
  2. 开源任务调度平台elastic-job-lite源码解析
  3. usb端点轮询_使用Spring Integration轮询http端点
  4. backlog配置_TCP/IP协议中backlog参数
  5. MFC_recvfrom
  6. 图片清晰度识别之改进ssim算法
  7. eova使用之-集成jersey开发REST服务
  8. Dubbo源码解析-Dubbo协议解析
  9. 世界上主要BIOS厂家介绍(Phoenix,AMI,Insyde,Byosoft)
  10. 【硬十宝典】——7.1【动态RAM】DDR硬件设计要点
  11. Dapr+Net6 服务调用09:集群指标收集-普罗米修斯
  12. 【AutoSAR】【MCAL】CAN
  13. 滑铁卢计算机竞赛CCC 解惑问答
  14. ai如何做倒角和圆角_在ai中怎么用小白工具把矩形的直角改成圆角?,你值得一看的技巧...
  15. 通过rvm 安装 ruby
  16. coreldraw x8里线段显示尺寸_CorelDRAW X8如何修改标尺单位
  17. 数字化开采|AIRIOT智慧矿山自动化生产解决方案
  18. python四叶玫瑰数判断_四叶玫瑰数
  19. 计算机网络与电竞的论文,谈谈电子竞技毕业论文.doc
  20. 构建复杂网络的几种方法(邻接矩阵,邻接表,十字链表,邻接多重表)

热门文章

  1. 监听返回app_基于 Redis 消息队列实现 Laravel 事件监听及底层源码探究
  2. C++动态绑定和静态绑定
  3. 测试上路2年,你处于什么阶段了?不醒着拼,你连应届生都比不过...
  4. 内购订单进行二次处理_「物流图表」复杂业务场景下的订单管理系统搭建
  5. 机器学习实战——岭回归、缩减法
  6. 二级Access数据库大纲知识要点
  7. 俄罗斯方块控制台程序C++
  8. relu函数_ECCV 2020,在视觉任务上大幅超越ReLU的新型激活函数
  9. 计算机控制pud,控制系统状态空间实施方案计算机控制技术课程实施方案
  10. 计算机专业的英语文献,计算机专业英语论文参考文献集 计算机专业英语英语参考文献哪里找...