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

个人微信公众平台注册柳州360优化

个人微信公众平台注册,柳州360优化,微网站管理,wordpress屏蔽插件今天来整理 GDB 调试。 在windows 上我们使用vs2017开发#xff0c;可以手动的加断点#xff0c;debug。 那么在linux上怎么加断点#xff0c;debug呢#xff1f;这就是今天要整理的GDB调试工具了。 那么有些同学可能会想到#xff1a;我们在windows上开发#xff0c;…今天来整理 GDB 调试。 在windows 上我们使用vs2017开发可以手动的加断点debug。 那么在linux上怎么加断点debug呢这就是今天要整理的GDB调试工具了。 那么有些同学可能会想到我们在windows上开发只是在linux上跑不就行了吗这样不是更方便吗 实际上这样做有两个问题需要解决 1.在linux上写C可能我们会用到linux的c函数这些函数在windows上不支持的那么在windows上就会有build errorbuild都build 不过怎么跑起来debug呢 2.项目最终是要部署到linux系统上运行的假设这个bug在部署完成后有问题只有在项目运行环境下才有可能发生这样debug也只能在linux下完成 因此学习GDB是很有必要的。 0.GDB可以运行的前提,必须build的时候要加上-g选项 g -g main.c -o a.out g gdb.cpp -o a.out -g -Wall   1.GDB常用流程以及命令 1.开始调试 gdb a.out 2.list 1 后 回车 会调转到第一行看代码 list 1 可以简写成 l 1 3.) 设置断点 b 23 表示断点设置在第23行 b 23  和 break 23 的含义一样。 4. run 执行或者 r 注意这时候23行并没有执行 5按下 n 或者 s 往下走n是next s是step n 和s 的区别在于step是跳入如果是一个函数 s就会跳到函数内部 要注意的是如果是系统函数例如 rand()函数按下s会告知 “没有那个文件或目录”也就是说如果是系统函数则进不去只能在我们自己写的函数内部跳转因此要注意的是如果是系统函数只能用n如果用了s就有可能出不来了。 6跳转到下一个断点 continue 或者 c 7) 从这个断点直接跳到多少行  until 50 或者 u 50中间有断点则会调用到断点那一行。 8在某一行的时候查看某一个变量的值 p key 使用ptype key1 p arr p 是print 的意思也就是打印 arr 的值 ptype arr 查看arr 的类型 9q是退出调试 2.GDB其他有用指令 gdb 对于段错误在执行 gdb a.out的时候只要执行run就会直接跳转到出现段错误的行 start 命令会从main 函数的第一行开始执行 finish 命令可以结束当前函数调用例如我们按下s进入了一个系统函数则可以使用finish命令退出来。 设置main函数的参数 在正常case 是这样设置的: ./a.out aa bb cc 在gdb中怎么设置呢 在使用 gdb a.out 开始后先set args 然后run set args aa bb cc run  也可以直接 run aa bb cc 查看目前的断点有哪些 info b 删除断点  d num 注意的是删除断点 d 后面跟的是 num不是行数 (gdb) b 23 Breakpoint 1 at 0x4009b0: file gdb.cpp, line 23. (gdb) b 35 Note: breakpoint 1 also set at pc 0x4009b0. Breakpoint 2 at 0x4009b0: file gdb.cpp, line 35. (gdb) b 67 Breakpoint 3 at 0x400b47: file gdb.cpp, line 67. (gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x00000000004009b0 in select_sort(int*, int) at gdb.cpp:23 2 breakpoint keep y 0x00000000004009b0 in select_sort(int*, int) at gdb.cpp:35 3 breakpoint keep y 0x0000000000400b47 in main() at gdb.cpp:67 (gdb) d 2 (gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x00000000004009b0 in select_sort(int*, int) at gdb.cpp:23 3 breakpoint keep y 0x0000000000400b47 in main() at gdb.cpp:67设置断点时有 条件 b 50 if i9 意思是 设置断点在50行当i9的时候才会触发这个断点   display 和 undisplay 一直观察某一个值取消某一个值的观察 display a  一直显示a display arr[a]  一直显示 arr[a] display   将所有的观察的值列出 undisplay num 不再观察编号num的值 (gdb) display 6: a 1 7: b 7 8: arr[a] 2 9: arr[b] 13 (gdb) undisplay 63.栈帧的概念 引出的GDB 的backtrace 和  frame bracktrace 查看当前所有的栈帧 简写为bt 使用 frame num 切换栈帧 当函数调用的时候会在stack上开辟一片内存空间用于存放函数调用时产生的局部变量和临时值 当一个函数调用结束后系统就会从stack 中将这个栈帧 删除调用。 如下是main函数中有 select_sort() 函数的 栈帧图 那么在实际开发中就会有这样的case当我们debug到select_sort()这个栈帧的时候需要观察下 main 栈帧中p的值假设这个main 和select_sort()是两个线程 但是这时候我们处在 select_sort这个栈帧中是无法观察main栈帧的数据的。 因此要使用 backtrace  当我们执行到select_sort函数的时候使用 bt命令 (gdb) bt #0  select_sort (arr0x7fffffffe2c0, len10) at gdb.cpp:38 #1  0x0000000000400b47 in main () at gdb.cpp:66 (gdb)    可以看到这时候有两个栈帧的0是select_sort, 1是main 栈帧 由于我们要查看的变量char *p (char *)hellod; 是在main栈帧中的 因此要使用 frame 1 切换到main 栈帧查看 p的值的 (gdb) frame 1 #1  0x0000000000400b47 in main () at gdb.cpp:66 66        select_sort(arr, N); (gdb) p p $1 0x400c76 hellod 然后可以使用 frame 0 切换到当前的 栈帧 4. GDB 常见错误分析 当我们使用 gdb gdbtest.out的时候可能会遇见入下的错误这说明你的gdbtest可执行文件在编译的时候就有问题并没有加上 -g的选项
http://www.dnsts.com.cn/news/16824.html

相关文章:

  • 专门做毕业设计的网站如何让订阅号菜单做微网站
  • 网站微信认证费用多少钱wordpress主题图
  • 手机网站地址历下区网站建设公司
  • 九江建网站强大的wordpress主题
  • 广东省建设教育协会网站wordpress社区
  • wordpress 头像设置做网络优化哪家公司比较好
  • 如何学会建网站画册设计报价明细表
  • 网站页面由什么构成拍个宣传片大概要多少钱
  • 制作网站的固定成本网站开发提案
  • 网络营销比赛 营销型网站策划中文域名有价值吗
  • 北京互联网公司建网站坦桑尼亚网站域名后缀
  • 网站开发遇到的问题移动互联网站开发工程师
  • 河北省和城乡住房建设厅网站免费的网页设计成品详解
  • 航天桥网站建设专注成都网站建设及推广
  • google属于搜索引擎类网站.百度网盘app官网
  • 做动画 的 网站有哪些嘉兴网站建设低价推荐
  • 做标书的视频网站专门下软件的app
  • wordpress网站go.php跳转专门做视频的网站吗
  • 怎么用ip做网站网站系统改教程
  • 想要黑掉一个网站 要怎么做百度竞价推广收费
  • 黄页网站推广广告设计与制作专业能考二建吗
  • 网站后台程序网络营销外包好处
  • 营销型网站单页面如何查询网站点击量
  • 装修平台网站排名前十名无锡电商网站设计
  • 网站开发语言都有什么西双版纳傣族自治州属于哪个国家
  • 建设施工合同网站建手机网站的必要性
  • 阜蒙县建设学校官网网站软件开发app开发定制外包
  • 怎么做一个网站页面房价成交数据官网查询
  • 怎么利用网站做产品推广wordpress正文标题样式
  • 郑州市建设路第二小学网站wordpress怎么安装上服务器