CppGuide社区 CppGuide社区
首页
  • 最新谷歌C++风格指南(含C++17/20)
  • C++17详解
  • C++20完全指南
  • C++23快速入门
  • C++语言面试问题集锦
  • 🔥C/C++后端开发常见面试题解析 (opens new window)
  • 网络编程面试题 (opens new window)
  • 网络编程面试题 答案详解 (opens new window)
  • 聊聊WebServer作面试项目那些事儿 (opens new window)
  • 字节跳动面试官现身说 (opens new window)
  • 技术简历指南 (opens new window)
  • 🔥交易系统开发岗位求职与面试指南 (opens new window)
  • 第1章 高频C++11重难点知识解析
  • 第2章 Linux GDB高级调试指南
  • 第3章 C++多线程编程从入门到进阶
  • 第4章 C++网络编程重难点解析
  • 第5章 网络通信故障排查常用命令
  • 第6章 高性能网络通信协议设计精要
  • 第7章 高性能服务结构设计
  • 第8章 Redis网络通信模块源码分析
  • 第9章 后端服务重要模块设计探索
  • 🚀 全部章节.pdf 下载 (opens new window)
  • 源码分析系列

    • leveldb源码分析
    • libevent源码分析
    • Memcached源码分析
    • TeamTalk源码分析
    • 优质源码分享 (opens new window)
    • 🔥远程控制软件gh0st源码分析
  • 从零手写C++项目系列

    • C++游戏编程入门(零基础学C++)
    • 🔥使用C++17从零开发一个调试器 (opens new window)
    • 🔥使用C++20从零构建一个完整的低延迟交易系统 (opens new window)
    • 🔥使用C++从零写一个C语言编译器 (opens new window)
    • 从零用C语言写一个Redis
  • Windows 10系统编程
  • Go语言特性

    • Go开发实用指南
    • Go系统接口编程
    • 高效Go并发编程
    • Go性能调优
    • Go项目架构设计
  • Go项目实战

    • 使用Go从零开发一个数据库
    • 🔥使用Go从零开发一个编译器 (opens new window)
    • 🔥使用Go从零开发一个解释器 (opens new window)
    • 🔥用Go从零写一个编排器(类Kubernetes) (opens new window)
  • Rust编程

    • Rust编程指南
  • 数据库

    • SQL零基础指南
    • MySQL开发与调试指南
  • Linux内核

    • 心中的内核 —— 在阅读内核代码之前先理解内核
    • 🔥Linux 5.x内核开发与调试 完全指南 (opens new window)
    • TCP源码实现超详细注释版.pdf (opens new window)
GitHub (opens new window)
首页
  • 最新谷歌C++风格指南(含C++17/20)
  • C++17详解
  • C++20完全指南
  • C++23快速入门
  • C++语言面试问题集锦
  • 🔥C/C++后端开发常见面试题解析 (opens new window)
  • 网络编程面试题 (opens new window)
  • 网络编程面试题 答案详解 (opens new window)
  • 聊聊WebServer作面试项目那些事儿 (opens new window)
  • 字节跳动面试官现身说 (opens new window)
  • 技术简历指南 (opens new window)
  • 🔥交易系统开发岗位求职与面试指南 (opens new window)
  • 第1章 高频C++11重难点知识解析
  • 第2章 Linux GDB高级调试指南
  • 第3章 C++多线程编程从入门到进阶
  • 第4章 C++网络编程重难点解析
  • 第5章 网络通信故障排查常用命令
  • 第6章 高性能网络通信协议设计精要
  • 第7章 高性能服务结构设计
  • 第8章 Redis网络通信模块源码分析
  • 第9章 后端服务重要模块设计探索
  • 🚀 全部章节.pdf 下载 (opens new window)
  • 源码分析系列

    • leveldb源码分析
    • libevent源码分析
    • Memcached源码分析
    • TeamTalk源码分析
    • 优质源码分享 (opens new window)
    • 🔥远程控制软件gh0st源码分析
  • 从零手写C++项目系列

    • C++游戏编程入门(零基础学C++)
    • 🔥使用C++17从零开发一个调试器 (opens new window)
    • 🔥使用C++20从零构建一个完整的低延迟交易系统 (opens new window)
    • 🔥使用C++从零写一个C语言编译器 (opens new window)
    • 从零用C语言写一个Redis
  • Windows 10系统编程
  • Go语言特性

    • Go开发实用指南
    • Go系统接口编程
    • 高效Go并发编程
    • Go性能调优
    • Go项目架构设计
  • Go项目实战

    • 使用Go从零开发一个数据库
    • 🔥使用Go从零开发一个编译器 (opens new window)
    • 🔥使用Go从零开发一个解释器 (opens new window)
    • 🔥用Go从零写一个编排器(类Kubernetes) (opens new window)
  • Rust编程

    • Rust编程指南
  • 数据库

    • SQL零基础指南
    • MySQL开发与调试指南
  • Linux内核

    • 心中的内核 —— 在阅读内核代码之前先理解内核
    • 🔥Linux 5.x内核开发与调试 完全指南 (opens new window)
    • TCP源码实现超详细注释版.pdf (opens new window)
GitHub (opens new window)
  • 第1章高频C++11重难点知识解析

  • 第2章Linux GDB高级调试指南

    • 2.1 SSH 工具与 FTP 工具
    • 2.2 Makefile 与 cmake
    • 2.3 使用Visual Studio管理和阅读开源项目代码
    • 2.4 gdb 调试准备
    • 2.5 gdb常用命令详解——利用gdb调试redis
    • 2.6 使用gdb调试多线程程序
    • 2.7 使用gdb调试多进程程序——以调试nginx为例
    • 2.8 gdb实用调试技巧
    • 2.9 gdb tui——gdb图形化界面
    • 2.10 gdb 的升级版——cgdb
    • 2.11 使用VisualGDB调试
      • 2.12 本章总结与扩展阅读
    • 第3章C++多线程编程从入门到进阶

    • 第4章C++网络编程重难点解析

    • 第5章网络通信故障排查常用命令

    • 第6章高性能网络通信协议设计精要

    • 第7章高性能服务结构设计

    • 第8章Redis 网络通信模块源码分析

    • 第9章后端服务重要模块设计探索

    • C++后端开发进阶
    • 第2章Linux GDB高级调试指南
    zhangxf
    2023-04-05
    目录

    2.11 使用VisualGDB调试

    # 2.11.1 VisualGDB介绍

    VisualGDB是一款Visual Studio插件,安装以后可以在Windows系统上利用Visual Studio中调试远程的Linux程序,这样的好处就是可以利用Visual Studio强大代码阅读和调试功能阅读、调试Linux程序。可能有读者会说,从Visual Studio 2015开始,Visual Studio不是自带了调试Linux程序的功能嘛,为什么还要再装一款插件舍近而求远呢。很遗憾的是,经笔者测试Visual Studio 2015或者2017自带的调试Linux程序的功能很鸡肋,调试一些简单的Linux小程序还可以,调试复杂的或者多个源文件的Linux程序就力不从心了。VisualGDB是一款功能强大的商业软件,其官方网站是链接11。VisualGDB本质上是利用SSH协议连接到远程Linux机器上,然后利用Visual Studio产生相应的gdb命令通过远程机器上的gdbserver传递给远程的gdb调试器,而代码阅读功能是建立在samba文件服务器之上。

    VisualGDB 官网:

    https://visualgdb.com/ (opens new window)

    官网提供了 30 天试用版,网上流传了一个破解版:

    链接: https://pan.baidu.com/s/1UvhkbbqZ-W8uNUrLmA1zNw 提取码: 3cec

    如果需要,请购买正版。

    利用这个工具远程调试Linux程序的方法有两种:

    # 2.11.2 利用 VisualGDB 调试已经运行的程序

    如果一个Linux程序已经运行,可以使用VisualGDB的远程attach功能。为了演示方便,我们将Linux机器上的redis-server运行起来:

    [root@localhost src]# ./redis-server 
    
    1

    安装好VisualGDB插件以后,我们在Visual Studio的 【Tools】 菜单选择 【Linux Source Cache Manager 菜单项,弹出如下对话框:

    点击Add按钮,配置成我们需要调试的Linux程序所在的Linux机器地址、用户名和密码。

    然后,在**【Debug】菜单选择【Attach to Process...】,弹出Attach To Process对话框,Transport类型选VisualGDB**,Qualifier选择刚才我们配置的Linux主机信息。如果连接没有问题,会在下面的进程列表中弹出远程主机的进程列表,我们选择刚才启动的redis-server,然后点击Attach按钮。

    这样我们就可以在Visual Studio中调试这个Linux进程了。

    # 2.11.3 利用VisualGDB从头调试程序

    更多的时候,我们需要从一个程序启动处(main函数处)开始调试程序,如学习redis的源码。利用VisualGDB也是很方便的。在Visual Studio的**【DEBUG】菜单选择【Quick Debug With GDB】**菜单项。

    在弹出的对话框中配置好Linux程序所在的地址和目录:

    点击Debug按钮,就可以启动调试了。

    我们的程序会自动停在main函数处,这样我们就能利用强大的Visual Studio对redis-server进行调试了。当然读者也可以在VisualGDB 提供的GDB Session窗口直接输入gdb的原始命令进行调试。

    当然,工具都不是完美的。VisualGDB也存在一些缺点,用这款工具调试Linux程序时可能会存在卡顿、延迟等现象。

    上次更新: 2025/05/19, 16:52:22
    2.10 gdb 的升级版——cgdb
    2.12 本章总结与扩展阅读

    ← 2.10 gdb 的升级版——cgdb 2.12 本章总结与扩展阅读→

    最近更新
    01
    第二章 关键字static及其不同用法
    03-27
    02
    第一章 auto与类型推导
    03-27
    03
    第四章 Lambda函数
    03-27
    更多文章>
    Copyright © 2024-2025 沪ICP备2023015129号 张小方 版权所有
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式