当前位置: 首页 > 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://www.dinnco.com/news/22526.html

相关文章:

  • 速成网站怎么做西安seo技术培训班
  • 如何做简单网站网站建设公司哪家好?
  • app网站开发协议如何做一个自己的电商平台
  • 第三方商城网站建设新站如何快速收录
  • 朔州做网站公司淄博seo网站推广
  • 通过网站做国际贸易的成本什么网站可以发布广告
  • wordpress form 高度网店关键词怎么优化
  • .网站建设的基本步骤网络营销的特征和功能
  • 网站制作替我们购买域名谷歌推广怎么做最有效
  • 有做财经 直播的网站吗本地服务推广平台哪个好
  • 2021年天津教师招聘信息seo团队管理系统
  • 网站建设北京哈尔滨seo整站优化
  • 吉安市网站制作做一个自己的网站
  • 网站建设推广关键词西安做网站的网络公司
  • 推广公司游戏惠州seo代理商
  • 花钱让别人做的网站版权是谁的友情链接图片
  • 商业空间设计方案杭州优化外包
  • 网站开发包优帮云查询数据云查询
  • 免费做手机网站谷歌搜索入口
  • 营销型网站的分类宁波seo外包
  • 网站建设制作设计珠海小蝌蚪幸福宝入口导航
  • 做百度网站排名软件河南郑州最近的热搜事件
  • 顺德网站制作案例咨询广告联盟推广
  • 汕头网站建设技术托管快速优化seo软件
  • 旅游网站开发的意义搜索引擎优化的根本目的
  • 广州协会网站建设沈阳seo网站关键词优化
  • asp.net 4.0网站开发与项目实战(全程实录) pdf网站收录有什么用
  • 动态网站开发概述网络优化这个行业怎么样
  • 企业标识设计公司北京seo运营推广
  • 网站链接后面style.css v搜狗搜索网页版