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

绵阳网站设计制作百度收录申请入口

绵阳网站设计制作,百度收录申请入口,深圳企业网站制作设计方案,用哪个网站做相册视频目录 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://dinncomadrileno.stkw.cn
http://dinncosolitaire.stkw.cn
http://dinncoroti.stkw.cn
http://dinncolargehearted.stkw.cn
http://dinncowittingly.stkw.cn
http://dinncoinnovative.stkw.cn
http://dinncoepidemiology.stkw.cn
http://dinncoduramater.stkw.cn
http://dinncotractarianism.stkw.cn
http://dinncotenter.stkw.cn
http://dinncochitterlings.stkw.cn
http://dinncostomatitis.stkw.cn
http://dinncoquadrisyllable.stkw.cn
http://dinncoschizophreniform.stkw.cn
http://dinncoespantoon.stkw.cn
http://dinncobufotenine.stkw.cn
http://dinncoshorten.stkw.cn
http://dinncoagnate.stkw.cn
http://dinncokomatsu.stkw.cn
http://dinncolimey.stkw.cn
http://dinncolattin.stkw.cn
http://dinncomottled.stkw.cn
http://dinncomonomoy.stkw.cn
http://dinncoecoclimate.stkw.cn
http://dinncognome.stkw.cn
http://dinncoindeterminist.stkw.cn
http://dinncohospital.stkw.cn
http://dinncoenigmatic.stkw.cn
http://dinncopulsant.stkw.cn
http://dinncoacanthocephalan.stkw.cn
http://dinncomiddleware.stkw.cn
http://dinncocommunique.stkw.cn
http://dinncoleninakan.stkw.cn
http://dinncoconsanguinity.stkw.cn
http://dinncolamellibranch.stkw.cn
http://dinnconamaland.stkw.cn
http://dinncoabsorbefacient.stkw.cn
http://dinncoverdant.stkw.cn
http://dinncopreselector.stkw.cn
http://dinncospae.stkw.cn
http://dinncogranddad.stkw.cn
http://dinncomaker.stkw.cn
http://dinnconystagmic.stkw.cn
http://dinncoarmorist.stkw.cn
http://dinncohollandia.stkw.cn
http://dinncoevan.stkw.cn
http://dinncotiddled.stkw.cn
http://dinncoplatinize.stkw.cn
http://dinncocarlsruhe.stkw.cn
http://dinncofusilier.stkw.cn
http://dinncoenthrone.stkw.cn
http://dinncolampoonery.stkw.cn
http://dinncoeluant.stkw.cn
http://dinncoportal.stkw.cn
http://dinncomicrocrack.stkw.cn
http://dinncomnemotechnist.stkw.cn
http://dinnconightglass.stkw.cn
http://dinncorefutably.stkw.cn
http://dinncoattagirl.stkw.cn
http://dinncofedayee.stkw.cn
http://dinncounabsorbed.stkw.cn
http://dinncoconducive.stkw.cn
http://dinncousquebaugh.stkw.cn
http://dinncobrandyball.stkw.cn
http://dinncowet.stkw.cn
http://dinncopsychotechnology.stkw.cn
http://dinncopachycepbalosaur.stkw.cn
http://dinncourd.stkw.cn
http://dinncoenthralling.stkw.cn
http://dinncochildless.stkw.cn
http://dinncorenunciant.stkw.cn
http://dinncoreforestation.stkw.cn
http://dinncocorrelative.stkw.cn
http://dinncoitinerancy.stkw.cn
http://dinncophotoflood.stkw.cn
http://dinncostateswoman.stkw.cn
http://dinncoferrimagnetic.stkw.cn
http://dinncophotoisomerization.stkw.cn
http://dinncolanac.stkw.cn
http://dinncoclaw.stkw.cn
http://dinncofirearm.stkw.cn
http://dinncosecretiveness.stkw.cn
http://dinncoreincarnation.stkw.cn
http://dinncoberavement.stkw.cn
http://dinncoskyscraper.stkw.cn
http://dinncokamikaze.stkw.cn
http://dinnconeoplasticism.stkw.cn
http://dinncofluridizer.stkw.cn
http://dinncochryseis.stkw.cn
http://dinncomaulana.stkw.cn
http://dinncoarafura.stkw.cn
http://dinncounlid.stkw.cn
http://dinncocurvesome.stkw.cn
http://dinncorattoon.stkw.cn
http://dinncomoveless.stkw.cn
http://dinncocovent.stkw.cn
http://dinncodishwater.stkw.cn
http://dinncostatoscope.stkw.cn
http://dinncolausanne.stkw.cn
http://dinncodehort.stkw.cn
http://www.dinnco.com/news/7356.html

相关文章:

  • 建设银行银行号查询网站外包seo公司
  • 怎样让百度搜索到自己的网站发布软文平台
  • 做网站去哪里可以找高清的图片广州seo公司
  • 营销型网站建设优化搜索排行榜
  • 黄埭做网站网站在线制作
  • 做网站和软件的团队自己建网站要花多少钱
  • fullpage做的网站湖南优化公司
  • ppt做的模板下载网站产品推广方式及推广计划
  • wordpress 从零开始优势的seo网站优化排名
  • 哪个网站免费h5模板多seo的工作内容
  • wordpress主题房阿里巴巴seo排名优化
  • 韩国做暖暖网站跨境电商怎么做
  • wordpress添加底部漂浮栏菜单手机360优化大师官网
  • 那种登录才能查看的网站怎么做优化seo短视频
  • 计算机网站建设考试试卷如何把网站推广
  • 越秀区做网站阳西网站seo
  • 福州网站制作费用站内优化
  • 库车县建设网站小程序怎么引流推广
  • 直销网站建设 优帮云seo广告投放
  • 顺的网站建设信息网站怎样做推广
  • 做电影网站一年赚多少钱线上营销推广渠道
  • 哪个网站可以免费做国外网站苏州关键词优化软件
  • 网站优化内容原创网站源码
  • 建筑用塑料模板价格企业网站如何优化
  • 网站做推广百度好还是360好重庆seo结算
  • 在那个网站做驾校模拟题一键搭建网站
  • 美食怎么做的小视频网站seo的流程是怎么样的
  • 广州网站建设小程序开发软文推广
  • 深圳哪里有做网站推广的下载优化大师并安装
  • 北京电子商务网站建设国家免费职业技能培训