zoukankan      html  css  js  c++  java
  • 多线程的那点儿事(之多线程调试)

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

    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://blog.csdn.net/feixiaoxing/article/details/7043631

  • 相关阅读:
    Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
    DHCP "No subnet declaration for xxx (no IPv4 addresses)" 报错
    Centos安装前端开发常用软件
    kubernetes学习笔记之十:RBAC(二)
    k8s学习笔记之StorageClass+NFS
    k8s学习笔记之ConfigMap和Secret
    k8s笔记之chartmuseum搭建
    K8S集群集成harbor(1.9.3)服务并配置HTTPS
    Docker镜像仓库Harbor1.7.0搭建及配置
    Nginx自建SSL证书部署HTTPS网站
  • 原文地址:https://www.cnblogs.com/lidabo/p/3370248.html
Copyright © 2011-2022 走看看