当前位置: 首页 > news >正文

打鱼在线游戏网站建设seo第三方点击软件

打鱼在线游戏网站建设,seo第三方点击软件,做网站排名优化有用吗,成都网站成都网站制作公司目录 1.gdb介绍 2.设置断点 2.1.测试代码 2.2.设置函数断点 2.3.设置文件行号断点 2.4.设置条件断点 2.5.多线程调试 3.删除断点 3.1.删除指定断点 3.2.删除全部断点 4.查看变量信息 4.1.p命令 4.2.display命令 4.3.watch命令 5.coredump日志 6.总结 1.gdb介绍…

目录

1.gdb介绍

2.设置断点

2.1.测试代码

2.2.设置函数断点

2.3.设置文件行号断点

2.4.设置条件断点

2.5.多线程调试

3.删除断点

3.1.删除指定断点

3.2.删除全部断点

4.查看变量信息

4.1.p命令

4.2.display命令

4.3.watch命令

5.coredump日志

6.总结


1.gdb介绍

        gdb是一个强大的调试工具,广泛用于调试 C、C++ 以及其他编程语言的程序。它帮助程序员在开发过程中识别并修复错误,提高程序的可靠性和性能。

        掌握gdb的基本使用方法非常重要,它能够帮助我们快速定位一些段错误问题或者解决一些程序异常问题。

        如果提示没有gdb命令需要手动安装一下gdb插件:

        在 Ubuntu/Debian 上安装 gdb:sudo apt install gdb

        在 CentOS/RHEL 上安装 gdb:sudo yum install gdb

        日常工作中可以选择gdb启动程序或者gdb -p 程序进程号,来调试程序,章节2,设置断点将会详细讲解。

2.设置断点

2.1.测试代码

        先上一段测试代码,方便讲解设置断点的方法:

main.c文件

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>#define THREAD_NUM 3
#define LOOP_NUM 10void *task(void *arg) {while (1) {int num = *(int *)arg;printf("my num:%d\n", num);sleep(1);}
}void first_print(int num) {printf("first hello: %d\n", num);return;
}void second_print(int num) {printf("second hello: %d\n", num);return;
}void test_copy(char *dest, char *src) {memcpy(dest, src, strlen(src));
}int main()
{char *s = NULL;char *p = "123";//test_copy(s, p);for (int i = 0; i < 10; i++) {first_print(i);second_print(i);}pthread_t threads[THREAD_NUM];int thread_arg[THREAD_NUM] = {0};for (int i = 0; i < THREAD_NUM; i++) {thread_arg[i] = i;pthread_create(&threads[i], NULL, task, &thread_arg[i]);}for (int i = 0; i < THREAD_NUM; i++) {pthread_join(threads[i], NULL);}return 0;
}

 makefile文件:

test:main.cgcc	-O0	-g	-o	test	main.c	-lpthread.PHONY:clean
clean:rm -rf test *.o

        代码功能非常简单,两个打印函数,以及创建3个线程,死循环打印。

2.2.设置函数断点

        函数断点,顾名思义,断点设置在函数上,操作命令: b 函数名

        经过makefile编译后会产生一个test可执行文件,通常来说我们直接gdb可执行文件即可,即gdb test,然后输入r运行程序。

        那么如何设置断点呢,通常可以在执行r命令之前设置断点或者运行过程中设置断点,但是运行过程中设置断点你需要保证程序还没有运行到你将要设置的断点的位置,否则不会命中断点。

        下面我们设置两个函数断点,first_print和second_print,执行b first_print回车然后再执行b second_print即可。

        通过 i b命令查看我们当前设置断点信息,可以看到设置了两个断点,编号分别为1 2 ,然后就可以执行 r 命令运行程序。

        当我们运行程序后,可以看到程序命中了第一个断点,执行c命令, 作用是跳转到下一个断点,执行 n 命令可以运行到一下行。

2.3.设置文件行号断点

        gdb还可以针对文件的某一行设置断点,操作命令:b 文件名:行号

        可以看到我们将断点设置在了main.c文件的第23行,运行程序,程序停止在了23行的位置。

2.4.设置条件断点

        设置条件断点,即再设置断点的基础之上再加上额外的条件,例如某一个变量等于固定的数值,操作命令:b 函数 if (变量 == 常数)

        可以看到我设置了一个断点在函数first_print,且仅当num值为2时命中该断点,运行程序和预期结果一致。

2.5.多线程调试

        在程序中,如果存在多线程的情况,调试起来稍微复杂一些,但是这种场景经常会出现在多核开发环境上,因此需要掌握其调试方法。

        那么如果设置一个断点到一个函数,这个函数会被多个线程调用,那么必定会发生线程切换,因此调试时需要加锁,命令:set scheduler-locking on

        可以看到,将断点设置到了12行,如果不加锁那么这三个线程都会触发这个断点,当第一次触发时我们可以加锁,使得只有当前线程能停在这个断点,若要解锁 ,执行命令:set scheduler-locking off。

        可以看到解锁之后发送了线程切换。

        还有一种方式就是查看当前运行的全部线程,然后进入需要调试的线程。查看全部线程的命令:info threads

        可以看到有三个子线程,然后可以通过thread 线程号 命令,进入具体的线程。

3.删除断点

3.1.删除指定断点

        删除指定断点,操作命令:d 断点编号

        如图,开始设置了两个断点,其编号分别为1 和 2 ,执行命令d 1 删除断点1,然后查看断点情况,只剩下断点2,同理如果要删除断点2,执行命令d 2即可。

3.2.删除全部断点

        删除全部断点,操作命令:d 

4.查看变量信息

        查看变量信息有多种命令,每种命令有不同的作用。

4.1.p命令

        主要用于查看变量的值,操作命令::p 变量名

        如图,执行p num可以查看到num的值。

4.2.display命令

        主要用于一直显示某个变量的值,好处就是不用每次手动执行p命令来查看某个变量的值,操作命令:display 变量名

         如果想取消一直显示,首先执行display,获取id,然后执行命令:undisplay id 即可

 

4.3.watch命令

        watch命令可以追踪某个变量变化前的值和变化后的值,操作命令:watch 变量名

        如果需要需要watch,首先查看所有监视点:info watchpoints,然后执行删除命令,删除指定watch:delete hw watchpoint 3

 

5.coredump日志

        将测试代码第36行,//test_copy(s, p);取消注释,然后重新编译,很明显程序会段错误,此时我们可以执行ulimit -c unlimited,使其可以生产coredump日志文件,然后可以使用gdb调试命令,定位问题,操作命令:gdb 可执行文件名 core文件名

        使用bt命令可以看到具体的调用堆栈信息,然后f id进入具体的函数,通过p命令查看变量的值,很明显dest为空指针。

        

6.总结

        gdb是程序员调试程序不可获取的工具,需要大家多多使用,熟能生巧 。

        注:makefile如果加了-o3编译优化或者其他优化手段,可能在运行时行号会发生跳跃,和预期不一致。

http://www.mnyf.cn/news/391.html

相关文章:

  • 个人做什么网站营销推广活动策划
  • 广州专业的网站建设seo公司重庆
  • 坊子营销型网站建设网站建设怎么弄
  • wordpress修改文章字体大小上海站群优化
  • 网站调用flash2023新闻热点摘抄
  • 万网网站备案流程如何获取永久免费域名
  • 湖北建设厅考试网站seo小白入门教学
  • 网站建设哈尔滨网站设计3seo中国
  • 高端网站建设行业seo问答
  • 商业网站域名后缀手机搭建网站
  • 中小型企业查询网站企业网站模板设计
  • 深圳做网站网络营销公司排名办公软件速成培训班
  • 做网站用的腾讯云服务器免费b站推广网站不
  • 国外做黄漫的网站网站运营工作内容
  • 网站建立的可以免费发广告的网站
  • 程序员自己做项目的网站google搜索引擎优化
  • 南京 推广 网站建设万网域名管理平台
  • 网站开发公司兴田德润在那里北京网站seo优化推广
  • 武汉手机网站建设如何拼多多代运营一般多少钱
  • 吉林手机版建站系统信息优化网站哪个好
  • jsp网站怎么运行seo新人怎么发外链
  • 大众点评如何做团购网站五行seo博客
  • 玉环建设局网站山西太原网络推广
  • cms网站群湖南竞价优化哪家好
  • 网页制作与网站建设广州运营培训班有用吗
  • 开远市住房和城乡建设局网站优化关键词的公司
  • 做网站教程 第一课b2b和b2c是什么意思
  • 陕西省人民政府官网长沙seo排名优化公司
  • 广州网站建设公司太原百度快速排名提升
  • 在山东省建设监理协会网站seo中国官网