【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】

软件调试是我们软件开发过程中的重要一课。在前面,我们也讨论过程序调试,比如说这里。今天,我们还可以就软件调试多讲一些内容。比如说条件断点,数据断点,多线程断点等等。

#include <stdio.h>
int value = 0;void test()
{int total;int index;total = 0;for(index = 0; index < 100; index ++)total += index * index;value = total;return ;
}int main()
{test();return 1;
}

(1)数据断点

所谓数据断点,就是全局变量或者函数中的数计算的过程中,如果数据值本身发生了改变,就会触发断点。这里的数据有两种,一个是全局数据,一个函数内部的数据。

以全局数据value为例:

a)按F10,运行程序,获取value的地址;

b)Alt+F9,选择【DATA】->【Advanced】;

c)在【Expression】中输入DW(0x0043178),【ok】回车;

d)F5继续运行程序,则程序会在value发生改变的时候停住。

以局部数据total为例,

a)按F10,运行程序,获取value的地址;

b)Alt+F9,选择【DATA】->【Advanced】;

c)在【Expression】中输入total,在【Function】输入test,【ok】回车;

d)F5继续运行程序,则程序同样会在total发生改变的时候停住。

(2)条件断点

条件断点和数据断点差不多。只不过,数据断点在数据发生改变的时候就会断住,而条件断点只有在满足一定的条件下才会有断住。比如说,我们可以让test子程序在index==5的时候断住。

a)按F10,运行程序,获取value的地址;

b)Alt+F9,选择【DATA】->【Advanced】;

c)在【Expression】中输入index==5,在【Function】输入test,【ok】回车;

d)F5继续运行程序,则程序同样会在index==5的时候停住。

(3)多线程调试

在VC上面对多程序的调试比较简单。如果想要对程序进行调试的话,首先F10,开始运行程序。其次,我们需要等线程创建之后才能设置断点,不然我们看到的程序只有main函数一个thread。

a)单击【Debug】,选择【threads】,那么我们就可以开始多线程调试了;

b)如果需要对某一个thread挂起,单击对应的thread,选择【suspend】即可;

c)如果需要对某一个thread重新调度,单击对应的thread,选择【resume】即可;

d)如果需要查看特定thread的堆栈,那么选择那个thread,然后【Set Focus】,关闭threads对话框,在堆栈窗口中即可看到;

e)如果某个线程被挂住,那么此时所有的线程都挂住了,如果你step运行,所有的threads都会参与运行;

f)如果需要对某一个thread进行调试,那么需要对其他的thread进行suspend处理  。

总结:

1)看内存、看堆栈、条件断点、数据断点需要综合使用,

2)编程越早调试,越好,

3)先编写好单线程程序,再编写好多线程程序,

4)对于多线程来说,模块设计 > 编程预防 > 调试 > 事后补救。

多线程的那点儿事(之多线程调试)相关推荐

  1. 多线程的那点儿事(之大结局)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 多线程一直是我比较喜欢的话题,当然也是很多朋友比较害怕的话题.喜欢它,因为它确实可以提高pc的 ...

  2. VS中的多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)的区别(转载)

    转载链接https://blog.csdn.net/qq_33757398/article/details/82156956 一种语言的开发环境往往会附带有语言库,这些库就是对操作系统的API的包装, ...

  3. 综合应用题:多线程复制文件(知识点:多线程、随机读写流)

    要求:使用多线程复制一个文件(使用多线程复制一个文件可以加快文件的复制速度) 代码: package 多线程复制文件;import java.io.File; import java.io.FileN ...

  4. 多线程之继承Thread类及多线程内存分析

    *创建多线程的一种方式:继承Thread类 * java.lang.Thread是描述多线程的类,要实现多线程程序,一种方式就是继承Thread类 * 1.创建一个类Mythread让其extends ...

  5. Java多线程基础篇(02)-多线程的实现

    为什么80%的码农都做不了架构师?>>>    1.概要 JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Call ...

  6. java 多线程语法_Java基础语法之多线程学习笔记整理

    众所周知,利用好多线程机制,可以大大提高系统整体的并发能力以及性能,而且线程间的切换和调度的成本小.因此,多线程是Java学习者必须掌握的语法重点.本文为大家整理了进程和线程.实现多线程方式.设置和获 ...

  7. python的多线程适合计算密集操作_Python 多线程操作学习

    Python 多线程操作 什么是线程: 线程(Thread)也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位.线程自己不拥有系统资源,只拥有一点儿在运行 ...

  8. .NET异步和多线程系列(四)- 多线程异常处理、线程取消、多线程的临时变量问题、线程安全和锁lock

    本文是.NET异步和多线程系列第四章,主要介绍的是多线程异常处理.线程取消.多线程的临时变量问题.线程安全和锁lock等. 一.多线程异常处理 多线程里面抛出的异常,会终结当前线程,但是不会影响别的线 ...

  9. Java多线程开发(一)Java多线程编程简介

    文章目录 参考 Java线程简介 Thread类构造方法和属性 常用Thread类方法 线程的生命周期 多线程编程的优势和风险 安全性问题 活跃性问题 性能问题 参考 [Java并发系列01]Thre ...

最新文章

  1. php从session取数据乱码,如何解决php取不到session的值的问题
  2. 简便方法创建自签名证书
  3. AAAI 2022 | 北大 阿里达摩院:基于对比学习的预训练语言模型剪枝压缩
  4. 网络视频监控与人脸识别
  5. 10天智能锁项目实战第1天(了解单片机STM32F401RET6和C语言基础)
  6. 【报告分享】2021中国短视频和直播电商行业人才发展报告.pdf(附下载链接)...
  7. matlab保存超分辨率图
  8. 网校系统推荐eduline_语文哪个网校教得好
  9. 21天学通Java学习笔记-Day03
  10. RSA 算法图解+数学证明
  11. PCB封装尺寸-0402-0603-0805
  12. Excel表Ctrl+v和Ctrl shift+v有什么区别_朴素的办公神器——excel
  13. matlab GUI界面变量值传递到其他.m文件
  14. Cadence 17.2( Allegro PCB ) 使用 Shape Symbol 制作不规则焊盘
  15. Linux 工具 | 第1篇:高级流控-TC+HTB+IFB+内核模块
  16. linux pv修改大小,Linux下扩容系统容量和删除unknown PV
  17. 论文阅读:《A Wavenet For Speech Denoising》
  18. IC学习笔记3——异步FIFO
  19. Java中print()\println()\printf()的区别及用法
  20. js截取某个字符串前面的内容

热门文章

  1. Lync 小技巧-56-检查你用的公网证书是否正确
  2. 转载,handler
  3. hdu4747 线段树区间修改值,区间查询和及最大值即最大值位置
  4. intent-filter something
  5. 解决vim中文乱码问题
  6. C# WinForm WebBrowser (三) 编辑模式
  7. Iphone4信号,苹果象个被惯坏的孩子
  8. 微软银光 Sliverlight
  9. OpenXml开发-向Excel2007文档中添加数据
  10. 在Jenkins远程链接Linux系统,然后执行shell命令-亲测可用【转】