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

小企业网站欣赏网站节点加速

小企业网站欣赏,网站节点加速,网络工程师高级职称,聊城住房和城乡建设厅网站文章目录 一、样例代码二、预备三、常见使用1、cgdb调试操作2、gdb调试操作 四、常见技巧1、 **安装cgdb:**2、watch3、set var确定问题原因4、条件断点 一、样例代码 // mycmd.c #include <stdio.h>int Sum(int s, int e) {int result 0;for(int i s; i < e; i){r…

文章目录

  • 一、样例代码
  • 二、预备
  • 三、常见使用
    • 1、cgdb调试操作
    • 2、gdb调试操作
  • 四、常见技巧
    • 1、 **安装cgdb:**
    • 2、watch
    • 3、set var确定问题原因
    • 4、条件断点

一、样例代码

// mycmd.c
#include <stdio.h>int Sum(int s, int e)
{int result = 0;for(int i = s; i <= e; i++){result += i;} return result;
} 
int main()
{int start = 1;int end = 100;printf("I will begin\n");int n = Sum(start, end);printf("running done, result is: [%d-%d]=%d\n", start, end, n);return 0;
}

二、预备

• 程序的发布方式有两种, debug 模式和 release 模式, Linux gcc/g++ 出来的二进制程序,默认是 release 模式。
• 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,如果没有添加,程序无法被编译

$ gcc mycmd.c -o mycmd  # 默认模式,不支持调试
$ file mycmd	  
mycmd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically 
linked, interpreter /lib64/ld-linux-x86-64.so.2, 
BuildID[sha1]=82f5cbaada10a9987d9f325384861a88d278b160, for GNU/Linux 
3.2.0, not stripped$ gcc mycmd.c -o mycmd -g  # debug模式
$ file mycmd	
mycmd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically 
linked, interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=3d5a2317809ef86c7827e9199cfefa622e3c187f, for GNU/Linux 
3.2.0, with debug_info, not stripped

三、常见使用

  • 开始gdb binFile
  • 退出ctrl + dquit 调试命令

1、cgdb调试操作

按下ESC键进入代码窗口,此时可以上下浏览代码,并且可以进行一系列的操作:

按键操作
空格键设置或者取消断点;
o查看代码所在的文件;
/ 或者 ?在代码中搜索字符串;
-缩小代码窗口;
+扩大代码窗口;
gg光标移动到文件头部;
GG光标移动到文件尾部;
ctrl + b代码向上翻一页;
ctrl + u代码向上翻半页;
ctrl + f代码向下翻一页;
ctrl + d代码向下翻半页;

按下i键回到调试窗口,进入调试模式,使用的调试指令与GDB几乎一样!

2、gdb调试操作

命令作用样例
list/l显⽰源代码,从上次位置开始,每次列出list/l 10
list/l 函数名列出指定函数的源代码list/l main
list/l ⽂件名:行号列出指定⽂件的源代码list/l mycmd.c:1
r/run从程序开始连续执⾏run
n/next单步执行,不进⼊函数内部next
s/step单步执行,进⼊函数内部step
break/b [⽂件名:]行号在指定⾏号设置断点break 10 break test.c:10
break/b 函数名在函数开头设置断点break main
info break/b查看当前所有断点的信息info break
finish执⾏到当前函数返回,然后停⽌finish
print/p 表达式打印表达式的值print start+end
p 变量打印指定变量的值p x
set var 变量=值修改变量的值set var i=10
continue/c从当前位置开始连续执⾏程序continue
delete/d breakpoints删除所有断点delete breakpoints
delete/d breakpoints n删除序号为n的断点delete breakpoints 1
disable breakpoints禁⽤所有断点disable breakpoints
enable breakpoints启⽤所有断点enable breakpoints
info/i breakpoints查看当前设置的断点列表info breakpoints
display 变量名跟踪显⽰指定变量的值(每次停止时)display x
undisplay 编号取消对指定编号的变量的跟踪显示undisplay 1
until X⾏号执⾏到指定⾏号until 20
backtrace/bt查看当前执⾏栈的各级函数调⽤及参数backtrace
info/i locals查看当前栈帧的局部变量值info locals
quit退出GDB调试器quit
  • -断点(breakpoints) -行号(n)

四、常见技巧

📌

1、 安装cgdb:

• 上面的基本调试还是麻烦,虽然是黑屏,但是还是想看到代码调试
推荐安装cgdb:
• Ubuntu: sudo apt-get install -y cgdb
• Centos: sudo yum install -y cgdb

2、watch

执行时监视一个表达式(如变量)的值。如果监视的表达式在程序运行期间的值发生变化,GDB 会暂
停程序的执行,并通知使用者

(gdb) l main
11
12 			return result;
13 		}
14
15 		int main()
16 		{
17 		int start = 1;
18 		int end = 100;
19 		printf("I will begin\n");
20 		int n = Sum(start, end);
(gdb) b 20
Breakpoint 1 at 0x11c3: file mycmd.c, line 20.
(gdb) info b
Num	  Type	 	Disp	 Enb	 Address	 			What
1 	breakpoint  keep 	  y 	0x00000000000011c3 	in main at mycmd.c:20 
(gdb) r
Starting program: /home/whb/test/test/mycmd
I will beginBreakpoint 1, main () at mycmd.c:20
20 				int n = Sum(start, end);
(gdb) s
Sum (s=32767, e=-7136) at mycmd.c:5
5 		{
(gdb) n
6 			int result = 0;
(gdb) watch result
Hardware watchpoint 2: result
(gdb) c
Continuing.Hardware watchpoint 2: resultOld value = -6896
New value = 0
Sum (s=1, e=100) at mycmd.c:7
7 			for(int i = s; i <= e; i++)
(gdb) c
Continuing.Hardware watchpoint 2: resultOld value = 0
New value = 1
Sum (s=1, e=100) at mycmd.c:7
7 			for(int i = s; i <= e; i++)
(gdb) c
Continuing.Hardware watchpoint 2: resultOld value = 1
New value = 3
Sum (s=1, e=100) at mycmd.c:7
7 			for(int i = s; i <= e; i++)
(gdb) c
Continuing.Hardware watchpoint 2: resultOld value = 3
New value = 6
Sum (s=1, e=100) at mycmd.c:7
7 			for(int i = s; i <= e; i++)
(gdb) info b
Num 	Type 	Disp 	Enb 	Address 			What
1 	breakpoint 	keep 	y 	0x00005555555551c3 	in main at mycmd.c:20breakpoint already hit 1 time
2 	hw watchpoint keep y resultbreakpoint already hit 4 times
(gdb) d 2
(gdb) info b
Num 	Type 	Disp 	Enb 	Address 		What
1 	breakpoint 	keep 	y 	0x00005555555551c3 	in main at mycmd.c:20breakpoint already hit 1 time
(gdb) finish
Run till exit from #0 	Sum (s=1, e=100) at mycmd.c:7
0x00005555555551d2 in main () at mycmd.c:20
20 			int n = Sum(start, end);
Value returned is $1 = 5050

📌 注意:

  • 如果你有一些变量不应该修改,但是你怀疑它修改导致了问题,你可以watch它,如果变
    化了,就会通知你.

3、set var确定问题原因

更改一下标志位,假设我们想得到 +-result

// mycmd.c
#include <stdio.h>int flag = 0; // 故意错误
//int flag = -1;
//int flag = 1;int Sum(int s, int e)
{int result = 0;for(int i = s; i <= e; i++){result += i;}return result*flag;
} int main()
{int start = 1;int end = 100;printf("I will begin\n");int n = Sum(start, end);printf("running done, result is: [%d-%d]=%d\n", start, end, n);return 0;
}
(gdb) l main
15
16			return result*flag;
17 			}
18
19			 int main()
20 			{
21 				int start = 1;
22 				int end = 100;
23 				printf("I will begin\n");
24 				int n = Sum(start, end);
(gdb) b 24
Breakpoint 1 at 0x11ca: file mycmd.c, line 24.
(gdb) r
Starting program: /home/whb/test/test/mycmd
I will beginBreakpoint 1, main () at mycmd.c:24
24 				int n = Sum(start, end);
(gdb) n
25 				printf("running done, result is: [%d-%d]=%d\n", start, end,
n);
(gdb) n
running done, result is: [1-100]=0 # 这⾥结果为什么是026 				return 0;
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/whb/test/test/mycmd
I will beginBreakpoint 1, main () at mycmd.c:24
24 				int n = Sum(start, end);
(gdb) s
Sum (s=32767, e=-7136) at mycmd.c:9
9 		{
(gdb) n
10 			int result = 0;
(gdb) n
11 			for(int i = s; i <= e; i++)
(gdb)
13 				result += i;
(gdb)
11 			for(int i = s; i <= e; i++)
(gdb)
13 				result += i;
(gdb) until 14
Sum (s=1, e=100) at mycmd.c:16
16 			return result*flag;
(gdb) p result
$1 = 5050
(gdb) p flag
$2 = 0
(gdb) set var flag=1 	# 更改flag的值,确认是否是它的原因
(gdb) p flag
$3 = 1
(gdb) n
17 			}
(gdb) n
main () at mycmd.c:25
25 			printf("running done, result is: [%d-%d]=%d\n", start, end,
n);
(gdb) n
running done, result is: [1-100]=5050 # 是它的原因
26 				return 0;

4、条件断点

添加条件断点

(gdb) l main
11
12 			return result;
13 		}
14
15 		int main()
16 		{
17 			int start = 1;
18 			int end = 100;
19 			printf("I will begin\n");
20 			int n = Sum(start, end);
(gdb) b 20
Breakpoint 1 at 0x11c3: file mycmd.c, line 20.
(gdb) r
Starting program: /home/whb/test/test/mycmd
I will beginBreakpoint 1, main () at mycmd.c:20
20 				int n = Sum(start, end);
(gdb) s
Sum (s=32767, e=-7136) at mycmd.c:5
5 		{
(gdb) n
6 			int result = 0;
(gdb) n
7 			for(int i = s; i <= e; i++)
(gdb) n
9 				result += i;
(gdb) display i
1: i = 1
(gdb) n
7 			for(int i = s; i <= e; i++)
1: i = 1
(gdb) n
9 				result += i;
1: i = 2
(gdb) n
7 			for(int i = s; i <= e; i++)
1: i = 2
(gdb) n
9 				result += i;
1: i = 3
(gdb)
7 			for(int i = s; i <= e; i++)
1: i = 3
(gdb) info b
Num 	Type 	Disp 	Enb 	Address 			What
1 	breakpoint 	keep 	y 		0x00005555555551c3 	in main at mycmd.c:20breakpoint 	already hit 1 time
(gdb) b 9 if i == 30 	# 9是⾏号,表⽰新增断点的位置
Breakpoint 2 at 0x555555555186: file mycmd.c, line 9.
(gdb) info b
Num 	Type 	Disp 	Enb 	Address 			What
1 	breakpoint 	keep 	y 		0x00005555555551c3 	in main at mycmd.c:20breakpoint 	already hit 1 time
2 	breakpoint 	keep 	y 		0x0000555555555186 	in Sum at mycmd.c:9stop only if i == 30
(gdb) finish
Run till exit from #0 Sum (s=1, e=100) at mycmd.c:7Breakpoint 2, Sum (s=1, e=100) at mycmd.c:9
9 				result += i;
1: i = 30
(gdb) finish
Run till exit from #0 Sum (s=1, e=100) at mycmd.c:9
0x00005555555551d2 in main () at mycmd.c:20
20 				int n = Sum(start, end);
Value returned is $1 = 5050

给已经存在的端点新增条件

(gdb) l main
11
12 			return result;
13 		}
14
15 		int main()
16 		{
17 			int start = 1;
18 			int end = 100;
19 			printf("I will begin\n");
20 			int n = Sum(start, end);
(gdb) b 20
Breakpoint 1 at 0x11c3: file mycmd.c, line 20.
(gdb) r
Starting program: /home/whb/test/test/mycmd
I will beginBreakpoint 1, main () at mycmd.c:20
20 			int n = Sum(start, end);
(gdb) s
Sum (s=32767, e=-7136) at mycmd.c:5
5 		{
(gdb) n
6 			int result = 0;
(gdb) n
7 			for(int i = s; i <= e; i++)
(gdb) n
9 				result += i;
(gdb)
7 			for(int i = s; i <= e; i++)
(gdb)
9 				result += i;
(gdb)
7 			for(int i = s; i <= e; i++)
(gdb)
9 				result += i;
(gdb)
7 			for(int i = s; i <= e; i++)
(gdb) b 9 # 我们在第9⾏新增⼀个断点,⽤来开始测试
Breakpoint 2 at 0x555555555186: file mycmd.c, line 9.
(gdb) info b
Num Type 		Disp 	Enb 	Address 			What
1 	breakpoint 	keep 	y 		0x00005555555551c3 	in main at mycmd.c:20breakpoint 	already hit 1 time
2 	breakpoint 	keep 	y	 	0x0000555555555186 	in Sum at mycmd.c:9
(gdb) nBreakpoint 2, Sum (s=1, e=100) at mycmd.c:9
9 				result += i;
(gdb) n
7 			for(int i = s; i <= e; i++)
(gdb) nBreakpoint 2, Sum (s=1, e=100) at mycmd.c:9
9 				result += i;
(gdb) condition 2 i==30 #给2号断点,新增条件i==30
(gdb) info b
Num Type 		Disp 	Enb Address 			What
1 	breakpoint 	keep 	y 	0x00005555555551c3 	in main at mycmd.c:20breakpoint already hit 1 time
2 	breakpoint 	keep 	y 	0x0000555555555186 	in Sum at mycmd.c:9stop only if i==30breakpoint already hit 2 times
(gdb) n
7 			for(int i = s; i <= e; i++)
(gdb) n
9 				result += i;
(gdb) c
Continuing.
Breakpoint 2, Sum (s=1, e=100) at mycmd.c:9
9 				result += i;
(gdb) p i
$1 = 30
(gdb) p result
$2 = 435

📌 注意:

  • 条件断点添加常见两种方式:1. 新增 2. 给已有断点追加
  • 注意两者的语法有区别,不要写错了。
  • 新增: b 行号/文件名:行号/函数名 if i == 30(条件)
  • 给已有断点追加:condition 2 i==30, 其中2是已有断点编号,没有if
http://www.sczhlp.com/news/99219/

相关文章:

  • 都昌网站建设焦作网站开发公司
  • 免费建网站服务最好的公司建筑公司企业愿景平台
  • 新都网站开发江苏省建设注册中心网站首页
  • 编程scratch网站企业所得税怎么缴纳
  • 202105_风二西_SQL基于时间盲注
  • 内蒙古城乡建设厅网站网站制作北京网站建设公司哪家好
  • 网站关键字设置十大聊天软件排行榜
  • 百度 网站 说明茂名公司网站开发公司
  • 上海高端网站建好看的知名企业网站
  • 阿里网站备案寄材料淄博易宝网站建设
  • 山东做网站建设公司制作查询网站
  • 响应式 网站建设网站建设销售前景
  • 企业模板网站建设优势分析wordpress woocommerce
  • 网站建设seo虾哥网络找国外人做网站
  • 黄山区建设学会网站四川聚顺成网络科技有限公司
  • 东莞公司高端网站建设如何设计的英文网站
  • 国内免费的建网站平台做公益选哪个网站好
  • 企业网站建设渠道网站建设推广销售话术
  • 金华建设网站的公司做的较好的拍卖网站
  • 建网站 主机sae wordpress 上传
  • 英文网站建设一般多少钱网页页面布局
  • 展示网站方案wordpress 4.5.2 中文
  • 网站违反了 google 质量指南傻瓜内网网站建设
  • 建设网站的视频下载网站 not found
  • WordPress语音朗读插件深圳百度seo代理
  • php外贸网站制作knowall wordpress
  • 织梦网站导入链接怎么做成都到西安飞机
  • 从用户角度网站应该具备的条件ps网站设计全程绝密
  • 菜谱网站后台代码网络推广公司企业
  • 网站建设愿景网站开发与维护能做什么职业