GNU Debugger ma ọ bụ GDB: Ngwá ọrụ nbibi koodu isi iyi maka Mmemme Linux


Onye nrụpụta na-arụ ọrụ dị mkpa na sistemụ mmepe ngwanrọ ọ bụla. Ọ nweghị onye nwere ike ide koodu na-enweghị ahụhụ ozugbo. N'oge mmepe, a na-ebuli ahụhụ na ọ dị mkpa ka edozi ya maka nkwalite ọzọ. Usoro mmepe ezughị ezu na-enweghị onye nbibi. N'ịtụle obodo ndị mmepe mepere emepe, GNU Debugger bụ nhọrọ kacha mma ha. A na-ejikwa ya maka mmepe ngwanrọ azụmaahịa na nyiwe ụdị UNIX.

GNU Debugger, nke a makwaara dị ka gdb, na-enye anyị ohere ịbanye na koodu ahụ ka ọ na-eme ma ọ bụ ihe mmemme na-agbalị ime n'oge ahụ tupu ọ daa. GDB na-enyere anyị aka ime ihe anọ bụ isi iji jide ntụpọ na koodu isi mmalite.

  1. Malite mmemme, na-akọwapụta arụmụka nwere ike imetụta omume izugbe.
  2. Kwụsị mmemme na ọnọdụ akọwapụtara.
  3. Nyochaa mkpọka ma ọ bụ mgbe mmemme kwụsịrị.
  4. Gbanwee koodu ahụ wee jiri koodu a gbanwere ozugbo were nwalee.

Anyị nwere ike iji gdb mebie mmemme edere na C na C++ na-enweghị nnukwu mbọ. Ka ọ dị ugbu a nkwado maka asụsụ mmemme ndị ọzọ dị ka D, Modula-2, Fortran bụ ele mmadụ anya n'ihu.

Na-amalite na GNU Debugger ma ọ bụ GDB

A na-akpọ GDB site na iji iwu gdb. Na ịnye gdb, ọ na-egosiputa ụfọdụ ozi gbasara ikpo okwu wee tụba gị n'ime ngwa ngwa (gdb) dị ka egosiri n'okpuru.

 gdb
GNU gdb (GDB) Fedora 7.6.50.20130731-19.fc20 
Copyright (C) 2013 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law.  Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "x86_64-redhat-linux-gnu". 
Type "show configuration" for configuration details. 
For bug reporting instructions, please see: 
<http://www.gnu.org/software/gdb/bugs/>. 
Find the GDB manual and other documentation resources online at: 
<http://www.gnu.org/software/gdb/documentation/>. 
For help, type "help". 
Type "apropos word" to search for commands related to "word". 
(gdb)

Pịnye ndepụta enyemaka iji wepụta klaasị dị iche iche nke iwu dị n'ime gdb. Pịnye enyemaka na-esote aha klas maka ndepụta iwu na klaasị ahụ. Pịnye enyere niile maka ndepụta iwu niile. A na-anabata ndebiri aha iwu ma ọ bụrụ na edoghị anya. Dịka ọmụmaatụ, ị nwere ike pịnye n kama ịpị na-esote ma ọ bụ c maka gaa n'ihu na ihe ndị ọzọ.

Edepụtara iwu gdb a na-ejikarị na tebụl na-esote. A ga-eji iwu ndị a site na gdb iwu ozugbo (gdb).

Rịba ama ọdịiche dị n'etiti iwu abụọ ahụnzọụkwụna na-esote. Iwu na-esote anaghị abanye n'ime ọrụ ma ọ bụrụ na ahịrị na-esote bụ oku ọrụ. Ebe iwu nzọụkwụ nwere ike ịbanye n'ime ọrụ wee hụ ihe na-eme ebe ahụ.

Tụlee koodu isi mmalite a.

// sum.c
#include <stdio.h> 

int sum (int a, int b) { 
	int c; 
	c = a + b; 
	return c; 
} 

int main() { 
	int x, y, z; 
	printf("\nEnter the first number: "); 
	scanf("%d", &x); 
	printf("Enter the second number: "); 
	scanf("%d", &y); 
	z = sum (x, y); 
	printf("The sum is %d\n\n", z); 
	return 0; 
}

Iji debug faịlụ mmepụta anyị kwesịrị ịchịkọta otu ihe ahụ na nhọrọ -g ka gcc dị ka ndị a.

$ gcc -g sum.c -o sum

Enwere ike itinye faịlụ mmepụta sum na gdb site na otu n'ime ụzọ abụọ ndị a:

1. Site na ịkọwapụta faịlụ mmepụta dị ka arụmụka na gdb.

$ gdb sum

2. Na-agba ọsọ faịlụ mmepụta n'ime gdb site na iji fileiwu.

$ gdb
(gdb) file sum

Iwu ndepụta depụtara ahịrị dị na faịlụ koodu isi wee megharịa pointer. Ya mere, nke mbụndepụtaga-egosiputa ahịrị iri mbụ na ndepụta na-egosiputa 10 na-esote na ihe ndị ọzọ.

(gdb) list
1	#include <stdio.h>   
2	 
3	int sum (int a, int b) { 
4		int c; 
5		c = a + b; 
6		return c; 
7	} 
8	 
9	int main() { 
10		int x, y, z;

Iji malite mmezu, nye iwu run. Ugbu a, a na-eme mmemme ahụ nke ọma. Mana anyị chefuru itinye ụfọdụ nkwụsịtụ na koodu isi mmalite maka nbipu, nri? Enwere ike ịkọwa ebe nkwụsịtụ ndị a maka ọrụ ma ọ bụ n'ahịrị akọwapụtara.

(gdb) b main

Mara: Ejila m mbelata b maka ezumike.

Mgbe ịtọsịrị ebe nkwụsịtụ na isi ọrụ, ịmegharị ihe omume ahụ ga-akwụsị na ahịrị 11. Enwere ike ịme otu ihe ahụ ma ọ bụrụ na amara nọmba akara ahụ na mbụ.

(gdb) b sum.c:11

Ugbu a banye n'ahịrị koodu site na iji na-esote ma ọ bụ niwu. Ọ dị mkpa iburu n'obi na ọzọiwu anaghị abanye n'ime koodu ọrụ ma ọ bụrụ na edobere ebe nkwụsịtụ na ọrụ ahụ. Ka anyị nwalee iwu ebipụta ugbu a. Tọọ ebe nkwụsịtụ na nchikota ọrụ dịka n'okpuru.

(gdb) b sum 
Breakpoint 1 at 0x4005aa: file sum.c, line 5. 
(gdb) r 
Starting program: /root/sum 

Enter the first number: 2 
Enter the second number: 3 

Breakpoint 1, sum (a=2, b=3) at sum.c:5 
5		c = a + b; 
(gdb) p a 
$1 = 2 
(gdb) p b 
$2 = 3
(gdb) c 
Continuing. 
The sum is 5 

[Inferior 1 (process 3444) exited normally]

Ọ bụrụ na mmemme a na-agba na-achọ paramita ahịrị iwu wee nye otu ihe ahụ yana iwu run dị ka.

(gdb) run   . . .

Enwere ike ịdepụta faịlụ ọbá akwụkwọ ejikọtara na mmemme na-agba ọsọ ugbu a dị ka.

(gdb) info share 
From                To                  Syms Read   Shared Object Library 
0x00000035a6000b10  0x00000035a6019c70  Yes         /lib64/ld-linux-x86-64.so.2 
0x00000035a641f560  0x00000035a6560bb4  Yes         /lib64/libc.so.6

GDB nwekwara ike gbanwee mgbanwe n'oge mmezu nke mmemme. Ka anyị nwalee nke a. Dị ka e kwuru n'elu, tọọ ebe nkwụsịtụ na ahịrị 16 ma mee mmemme ahụ.

(gdb) r 
Starting program: /root/sum 

Enter the first number: 1 
Enter the second number: 2 

Breakpoint 1, main ( ) at sum.c:16 
16		printf("The sum is %d\n\n", z); 
(gdb) set z=4 
(gdb) c 
Continuing. 
The sum is 4

Ugbu a a = 1, b = 2 na nsonaazụ kwesịrị ịbụ z = 3. Ma ebe a anyị gbanwere nsonaazụ ikpeazụ na z = 4 na isi ọrụ. N'ụzọ dị otu a, enwere ike ime ka nbipu dị mfe iji gdb.

Iji nweta ndepụta ebe nkwụsịtụ niile pịnye ebe nkwụsịtụ ozi.

(gdb) info breakpoints 
Num     Type           Disp Enb Address            What 
1       breakpoint     keep y   0x00000000004005c2 in main at sum.c:11

N'ebe a enwere naanị otu nkwụsịtụ ma ọ bụ To. enyere gbanyụọ ebe nkwụsịtụ ezipụta nọmba nkwụsịtụ yana iwu gbanyụọ. Iji mee ka emechaa jiri enableiwu.

(gdb) disable 1 
(gdb) info breakpoints 
Num     Type           Disp Enb Address            What 
1       breakpoint     keep n   0x00000000004005c2 in main at sum.c:11

Ị nwekwara ike ihichapụ ebe nkwụsịtụ site na iji ehichapụ.

Ọtụtụ usoro na-aga n'azụ na sistemụ GNU/Linux. Iji debug a na-agba ọsọ usoro mbụ niile anyị kwesịrị ịchọta usoro id nke otu usoro. pidofiwu na-enye gị pid nke usoro.

$ pidof <process_name>

Ugbu a, anyị kwesịrị itinye pid a na gdb. Enwere ụzọ 2.

1. Site n'ịkọwa pid yana gdb.

$ gdb -p <pid>

2. Iji gbakwunyeiwu sitere na gdb.

(gdb) attach <pid>

Nke ahụ bụ ihe niile ugbu a. Ndị a bụ naanị isi nke gdb iji nweta ezigbo mmalite na nbipu koodu isi na ọ karịrị ihe ndị akọwara n'elu. Dịka ọmụmaatụ, anyị nwere ike degharịa site na iji ozi nchịkọta, mgbanwe gburugburu ebe obibi na ọtụtụ ndị ọzọ. Gbalịa iji ihe ndị a niile gwuo egwu…