VisualStudio下的C++调试方法

2024-08-21 10:38
文章标签 c++ 方法 调试 visualstudio

本文主要是介绍VisualStudio下的C++调试方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

VisualStudio下的C++调试方法

概述: 介绍如何利用VisualStudio的调试属性,各类断点设置,利用pdb与dump文件来定位崩溃问题。

 

•       调试属性设置
      工程的的调试属性中,我们可以对调试的程序目录及路径进行设置。


•      工作目录:                                                                                                                                                                  

通常为调试程序的运行目录,当我们的程序需要使用相对路径的外部资源时就需要使用此参数了,指定一个运行目录给它。

•     生成后事件

1)当我们调试DLL工程的时候我们的调试命令通         常是exe程序,每次完成编译后我们需要手动将动态库拷贝到exe所在目录中。

3)通过生成后事件我们可以自动完成拷贝动态库等操作来提高我们的调试效率。

3)拷贝命令示例

a)命名使用的是windows的cmd命令

b) Copy “a.dll”“c:\demo\”

c) Copy “C:\*.dll”“c:\demo\”

 

启动调试

•      启动提示,通过点击VS工具栏上的调试按钮来对运行我们程序进入调试模式(F5)

•      停止调试,启动调试后通过点击终止按钮来停止调试 Shift+F5

•      暂停调试,如果程序中没有命中断点的情况下程序会顺序的执行代码,在执行过程中我们可以通过暂停按钮来暂时停止代码的执行,程序会停止在当前的执行代码行中。点击运行后又会继续执行.

输出窗口的使用

•      当我们启动调试程序之后我们可以使用调试窗口来获取程序的运行信息。

•      通过菜单-》视图-》输出,我们则可以打开输出窗口

•      快捷键为alt+2

•      启动调试后系统会利用输出窗口反馈程序中所有资源的加载顺序和信息。


 

输出窗口的使用

•      对于有符号DLL,在输出窗口内将会显示,“已加载”,表示挂在DLL对应的符号文件已经完成加载,并观察加载DLL路径是否正确。

•      此外输出窗口还可以显示程序调试运行过程中的输出信息。

•      我们可以在代码中利用如OutputDebugString这样的API将文本内容输出到输出窗口中显示以便于我们进行调试。

断点窗口

•      断点窗口显示程序中加载的所有断点的位置及类型。

•      通过菜单-》调试-》窗口-》断点或者快捷键Alt+F9,可以打开断点窗口

•      我们可以通过断点窗口的工具栏按钮完成以下的操作:

      A、删除所有的断点或选定断点

B、禁用启用所有的断点或选中断点,禁用后此断点不会命中

C、导出断点或导入断点

位置断点的设置

   默认情况下我们通过F9设置的断点产生的断点类型为位置类型,即只要运行到这个位置, 就会产生命中。


断点常用的还有 :  

                                     

命中次数:

命中次数断点则可以设置当经过此处固定次数后才进行命中,可供选择的命中次数条件是:总命中,等于某一次数,大于等于某一次数或者几倍于某一次数。

 

筛选器断点的设置:

对特定的线程、计算机、进程进行断点命中。

 

命中条件断点的设置:

命中调试断点可以在命中此断点时输出信息到输出窗口,并且可以直接打印输出变量的数据

 

新建断点:

 

 在函数处中断: 在函数运行到某一函数位置处产生中断;


            

数据断点:当指定地址的数据发生改变的时候产生中断。

    

 

断点的调试:

•      运行一句代码,遇到函数不进入函数体内部( F10)

•      跳出当前的函数( Shift+F11 )

•      逐句调试运行,遇到函数调用后进入函数内部继续调试。(F11)

•      在一个堆栈中我们可以通过拖动运行指针来回退代码运行位置。

堆栈窗口的使用:

•       通过断点我们可以将程序“冻结”在某一个运行时刻,而通过堆栈窗口我们则可以看到程序当前状态的函数调用顺序。

•      通过VS的菜单,“调试”-》“窗口”-》“调用堆栈”或者通过Alt+7来打开堆栈窗口

•      通过在窗口中双击函数名称我们可以切换到对应的调用函数位置中。

•      灰色的代表无代码和符号不可能已经定位显示。

  

自动变量窗口的使用

•      自动变量窗口中显示当前堆栈所执行所在代码行所使用的数据内容,当我们切换到下一行代码后自动变量窗口中的内容会发生对应的变化。


局部变量窗口的使用

•      局部变量窗口显示当前堆栈函数中所使用变量内容。


线程窗口的使用

•      线程窗口显示当前程序线程的运行状态,在多线程程序开发中我们可以通过这个窗口了解线程的启动和释放情况。

•      每个线程都有自己独立的调用堆栈和变量堆栈,切换不同的线程我们会发现堆栈会发生对应的变化,在线程之前堆数据可以进行共享。

•      黄色箭头表示的是当前代码运行指针所在的线程位置,此外我们还可以看到每个线程所执行的函数体。

 

监视窗口与快速监视窗口的使用

•      在监视窗口中我们可以定义我们所关注的变量,输入变量的内容我们即可获取此变量的内容。

•      变量内容超出当前堆栈显示范围后自动失效,变为灰色。

•      此外我们可以在变量名上点击右键,选择“添加到监视”则可以快速将变量设置到监视窗口内。


 VisualStudio附加到进程调试方法

•      对已经运行的程序进行调试

•      此外F5调试启动速度较慢,对于频繁的调试不太方便,所以我们可以让程序先运行起来,通过附加进行的方式继续调试。

           

 

 

    关于vs的基本的调试就先介绍到这里,下篇我将继续介绍vs的一些高级的调试技巧。pdb和dump和一些调试工具。

欢迎和我交流,共同进步!QQ群:119891802

 

这篇关于VisualStudio下的C++调试方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092922

相关文章

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依