博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程的那点儿事(之多线程调试)
阅读量:6678 次
发布时间:2019-06-25

本文共 1422 字,大约阅读时间需要 4 分钟。

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

[cpp]
 
  1. #include <stdio.h>  
  2. int value = 0;  
  3.   
  4. void test()  
  5. {  
  6.     int total;  
  7.     int index;  
  8.   
  9.     total = 0;  
  10.     for(index = 0; index < 100; index ++)  
  11.         total += index * index;  
  12.   
  13.     value = total;  
  14.     return ;  
  15. }  
  16.   
  17. int main()  
  18. {  
  19.     test();  
  20.     return 1;  
  21. }  
(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)对于多线程来说,模块设计 > 编程预防 > 调试 > 事后补救。

   

 

from:

转载地址:http://iiyao.baihongyu.com/

你可能感兴趣的文章
Codeforces 715A. Plus and Square Root[数学构造]
查看>>
nodejs REPL(交互式解释器)
查看>>
颠覆你的认知,带你领略史上最为齐全的微软黑科技之旅
查看>>
【转】EL表达式 (详解)
查看>>
Android文件上传
查看>>
无人超市对社会是福还是祸?
查看>>
12306、上海地铁、广发银行的选择 起底蚂蚁金服移动开发平
查看>>
说阿里是日本的公司 你咋不说腾讯是非洲的呢
查看>>
春运的高铁上 有华为和满满的信号一起陪你回家
查看>>
以顶级项目之姿进入Apache基金会,Apache Kibble有点厉害!
查看>>
昆仑万维半年营收近18亿 旗下移动游戏平台启用独立品牌
查看>>
候车室里的年货:一件件都是家的故事
查看>>
广东侨乡台山人“小年夜”喜用传统沙琪玛祭灶
查看>>
电子品汽车服饰成春节热门“租物” 女性偏爱 “租锦还乡”
查看>>
世界经济论坛报告:地缘经济局势日趋紧张将阻碍今年经济增长
查看>>
外交部:不允许外企以任何形式参与台“潜艇国造”项目
查看>>
为什么老外不愿意用MyBatis
查看>>
购物车【JavaWeb小项目简单版】
查看>>
五分钟 Styled-components 高级实用技巧
查看>>
Node.js: 一个刚刚够用的 HTTPS 服务器
查看>>