前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++多线程-多线程调试

C++多线程-多线程调试

作者头像
cwl_java
发布2020-01-15 10:44:46
3.5K0
发布2020-01-15 10:44:46
举报
文章被收录于专栏:cwl_Javacwl_Java

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

代码语言:javascript
复制
#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)对于多线程来说,模块设计 > 编程预防 > 调试 > 事后补救。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档