首页 > 编程语言 >C++爬虫如何进行多线程调试

C++爬虫如何进行多线程调试

时间:2022-12-12 11:04:04浏览次数:42  
标签:index thread 程序 爬虫 C++ 多线程 断点 调试

我们知道在爬虫钱进行多线程调试是非常重要的,之前我们也有讨论过程序调试,今天我们还将继续在这里深入的讲解下软件调试的一些内容。比如说常见的条件断点,数据断点,多线程断点等等。

#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;
}

一、数据断点

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

以全局数据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发生改变的时候停住。

二、条件断点

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

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

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

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

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

三、多线程调试

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

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

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

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

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

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

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

总结:

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

2、编程越早调试,越好。

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

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

标签:index,thread,程序,爬虫,C++,多线程,断点,调试
From: https://blog.51cto.com/u_13488918/5929218

相关文章

  • 多线程爬虫如何实现线程安全?
    做大数据抓取的应当都知道,多线程爬取数据能够有效的提供工作效率、降低运营成本。那么在编程爬虫代码的时候如果保证线程安全呢?下面我们就来聊一聊。1、什么是线程安全问题......
  • c++ 如何做出实现一组数据的实际索引
    ​ 是一种计算机高级程序设计语言, 由​​C语言​​​扩展升级而产生, 最早于1979年由​​本贾尼·斯特劳斯特卢普​​在AT&T贝尔工作室研发。C++既可以进行C语言的......
  • 《“透视”个人大数据》项目开发小记 --(三)Android APP 开发(3)使用jni调用c++/c 应用实
       目前应用AndroidStudio可以很方便的构建完成通过JNI调用c++/c的基本架构(CMakeLists,JNI调用C部分,java连接JNI部分)。希望通过APP开发中应用实例的简要介绍,可......
  • python高性能异步爬虫
    目的:在爬虫中使用异步实现高性能的数据爬取操作。异步爬虫的方式:1、多线程,多进程(不建议):好处:可以为相关阻塞的操作单独开启线程,阻塞操作就可以异步执行。弊端:无法无限制的开......
  • paozhu c++ web framework 框架原理
    paozhuc++webframework框架原理paozhuc++webframework使用asio网络库,如果用动态库方式还要boost库。paozhu框架使用两个线程池,一个是框架使用的解析协议,连接......
  • C++代码到可执行二进制文件的过程
    C++工程从代码到可运行文件要经历四个过程,分别是预编译、编译、汇编、链接。1、预编译(1)将所有的#define删除,并展开宏定义。意味着代码替换。(2)处理所有的条件预编译指令,......
  • C++
    通讯录管理系统1、系统需求通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++来实现一个通讯录管理系统系统中需要实现的功能如下:添加联系人:向通讯录中......
  • 使用网络爬虫自动抓取图书信息
    网络爬虫是一种从互联网上进行开放数据采集的重要手段。本案例通过使用Python的相关模块,开发一个简单的爬虫。实现从某图书网站自动下载感兴趣的图书信息的功能。主要实现的......
  • 网络爬虫之re模块
    1.re.match尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。importreline="thishdr-biz123modelserver456"pattern=r"123"mat......
  • c++构建工具之shell,configure,make,cmake,scons,xmake简析总结
    前言说到编译工具,在windows下必言vs,在linux下必言make。0.shell如果编译一个库的命令太复杂或者为了方便,我们更愿意将编译命令写成一个shell脚本来执行,比如build.sh编译ffmp......