VS下如何调试程序

 

https://blog.csdn.net/qq_35637562/article/details/79369034

程序崩溃的原因分类

  1. 函数栈溢出 
    一个变量未初化、未赋值,就读取它的值。 
    ( 这属于逻辑问题,往往是粗心大意的导致的 )
  2. 函数栈溢出 
    (1)定义了一个体积太大的局部变量 
    (2)函数嵌套调用,层次过深(如无穷递归)
  3. 数组越界访问 
    访问数组元素时,下标越界
  4. 指针的目标对象不可用 
    (1)空指针 
    (2)野指针 
    • 指针未赋值
    • free/delete释放了的对象
    • 不恰当的指针强制转换

 

 

 

1 导言

在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的)的时间远多于写代码的时间。通常,debug是指发现缺陷并改正的过程。修正缺陷紧随debug之后,或者说二者是相关的。如果代码中存在缺陷,我们首先要识别造成缺陷的根本原因(root cause),这个过程就称作调试(debugging)。找到根本原因后,就可以修正缺陷。

那么如何调试代码呢?Visual Studio提供了很多用于调试的工具。有时调试需要花费大量时间去识别root cause。VS提供了许多辅助调试的便捷的工具。调试器(Debugger)包含错误列表、添加断点、可视化的程序流程、控制执行流程、Data Tips、监视窗口(watch windows)、多线程调试、线程窗口、并行调试概览以及IntelliTrace调试概览。我希望本文能够对调试功能的使用者有所裨益。请注意,本文使用VS2010。某些功能在旧版本中也是一致的,但是VS2010新增了许多features(Labeling breakpoint, Pinned DataTip, Multithreaded Debugging, Parallel debugging and IntelliTrace)。

2 如何启动调试?

可以通过VS的调试(Debug)菜单启动调试。点击调试菜单下的“启动调试”或者按F5键启动。如果你已经在代码中加入了断点,那么执行会自动开始。


图 启动调试(Start Debugging)

“附加到进程(Attach to Process)”是另一种启动调试的方法。Attach Process会为应用程序启动一个调试会话。可能我们更熟悉ASP.NET Web应用的Attach Process调试。我发了另外两篇相关的帖子。如下:

 

 

通常我们通过在可能存在问题代码处加断点来启动调试。因此,我们从断点开始讲起。

3 断点(Breakpoints)

断点用于通知调试器何时何处暂停程序的执行。通过点击左边栏或者按F9键在当前行添加断点。在加断点之前,你需要知道你的代码将会出现什么错误,在什么地方停止执行。当调试器执行到断点处时,你可以使用其他的调试工具核对代码何处出现错误。


图 设置断点(Set Breakpoint)

3.1 使用断点进行调试

你已经在你想要暂停执行的地方设置了断点。现在按F5键启动调试,当程序执行到断点处时,自动暂停执行。此时你有多种方式来检查代码。命中断点(hit the breakpoint)后,加断点的行变为黄色,意指下一步将执行此行。

在中断模式下,你有多条可使用的命令,使用相应命令进行进一步的调试。


图 断点工具条(Breakpoint Toolbar)

3.1.1 逐过程(Step Over)

调试器执行到断点后,你可能需要一条一条的执行代码。 ”Step Over“[F10]命令用于一条一条的执行代码。这将执行当前高亮的行,然后暂停。如果在一条方法调用语句高亮时按F10,执行会停在调用语句的下一条语句上。Step Over会一次整个方法。

debug51

图: 逐过程(Step Over - F10)

3.1.2 逐语句(Step Into)

它与Step Over相似。唯一的不同是,如果当前高亮语句是方法调用,调试器会进入方法内部。快捷键是 ”F11“。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在VS调试程序时出现"Segmentation fault"错误时,这通常意味着程序访问了无效的内存地址,导致程序崩溃。这种错误通常发生在访问已释放的内存、数组越界或者指针错误等情况下。 要解决这个问题,可以尝试以下方法: 1. 检查代码:检查代码是否有对已释放内存、数组越界或指针错误的操作。确保所有的内存操作都是有效的。 2. 使用调试器:使用VS的调试器来逐步执行程序并观察变量的值和内存的状态。通过调试器,可以找出导致"Segmentation fault"错误的具体代码行,并进一步分析问题。 3. 检查输入数据:检查程序的输入数据是否有问题,例如数据是否为空或非法。无效的输入数据可能导致程序崩溃。 4. 打印调试信息:在关键的代码段插入打印语句,输出变量的值和程序执行的步骤,以便定位错误发生的位置。 5. 使用内存分析工具:使用内存分析工具,如Valgrind或Dr.Memory来检测内存错误,这些工具可以帮助找出程序可能导致"Segmentation fault"错误的潜在问题。 需要注意的是,"Segmentation fault"错误可能是由多个因素引起的,因此解决问题可能需要多个步骤和尝试。根据具体情况,可以选择适合的方法来定位和修复该错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Ubuntu c++ 程序查找 Segmentation fault (core dump)错误](https://blog.csdn.net/aaada123/article/details/128516287)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值