VisualGDB系列10:快速调试Linux应用程序

  根据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)):

VisualGDB系列10:快速调试Linux应用程序_第1张图片                       

 

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

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

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

 

5 启动VS并快速调试

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

 VisualGDB系列10:快速调试Linux应用程序_第2张图片

 

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

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

 

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

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

 VisualGDB系列10:快速调试Linux应用程序_第3张图片

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

 

8 断点调试

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

 VisualGDB系列10:快速调试Linux应用程序_第4张图片

 

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键,将会进入刚设置的断点中:

 VisualGDB系列10:快速调试Linux应用程序_第5张图片

 

12 单步进入demangle函数

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

 VisualGDB系列10:快速调试Linux应用程序_第6张图片

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

 

13 查看源码

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

 VisualGDB系列10:快速调试Linux应用程序_第7张图片

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

 VisualGDB系列10:快速调试Linux应用程序_第8张图片

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

 

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

你可能感兴趣的:(VisualGDB系列10:快速调试Linux应用程序)