GNU Debugger וא GDB: סקוניל תוינכות רובע קזח רוקמ דוק רותיא רותיא ילכ


.UNIX גוסמ תומרופטלפב תירחסמ הנכות חותיפל םג שמשמ אוה .םהלש רתויב הבוטה הריחבה אוה GNU Debugger ,חותפה דוקה יחתפמ תליהקב בשחתהב .םיגאב יופינ אלל המלש הניא חותיפ תכרעמ .ףסונ רופישל םתוא רות

GNU Debugger, םשב םג עודיה gdb, הסרק איהש ינפל עגרב תושעל התסינ תינכות המ וא עצבמ אוהש ןמזב דוקב בנגתהל ונל רשפאמ. GDB רוקמה דוקב םימגפ סופתל ידכ םיירקיע םירבד העברא תושעל ונל רזוע םצעב.

    .תויקלח ןה D, Modula-2, Fortran ומכ תורחא תונכת תופשב הכימתה וישכעל ןוכנ .בר ץמאמ אלל ++ C -ו C -ב ובתכנש תוינכותב םיגאב יופינל gdb -ב שמתשהל םילוכי ונא

    GDB וא GNU Debugger םע הדובעה תליחת

    GDB הדוקפה תועצמאב לעפומ gdb . לש הקפנהב gdb הדוקפה לא ךתוא ךילשמו המרופטלפה לע עדימ גיצמ אוה ( gdb ) ןלהל גצומכ.

     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)

    .האלה ןכו ךשמה רובע c וא אבה דילקהל םוקמב n דילקהל לוכי התא ,אמגודל .םייעמשמ דח םה םא םירתומ הדוקפ םש ירוציק .תודוקפה לכ תמישר רובע םלוכ

    .gdb ( gdb ) הדוקפה תרושמ הלא תודוקפב שמתשהל שי .האבה הלבטב תוטרופמ תוצופנ gdb תודוקפ

    .םש הרוק המ תוארלו תימינפ היצקנופל סנכיהל הלוכי בלש הדוקפה וליאו .היצקנופ תחיש איה האבה הרושה םא היצקנופל תסנכנ אל האבה הדוקפה . אבה בלש תודוקפה יתש ן

    .אבה רוקמה דוק תא לוקש

    // 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; 
    }

    .ןמקלדכ gcc -ל -g תורשפא םע ותוא לפמקל ונילע טלפה ץבוקב םיגאב יופינ עצבל תנמ לע

    $ gcc -g sum.c -o sum

    :תואבה םיכרדה יתשמ תחאב gdb -ל םוכס טלפה ץבוק תא ףרצל ןתינ

    .gdb -ל ןועיטכ טלפה ץבוק ןויצ ידי לע .1

    $ gdb sum

    . file הדוקפה תועצמאב gdb ךותב טלפ ץבוק תלעפה .2

    $ gdb
    (gdb) file sum

    .האלה ןכו תואבה 10 תא גיצת האבה המישר ו תונושארה תורושה 10 תא גיצת המישר תישאר זא .עיבצמה תא הריבעמו רוקמה דוק ץבוקב תורוש תטרפמ המישר הדוקפה

    (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;

    .וניוצש תורושב וא תויצקנופ רובע הקספה תודוקנ תא ןייצל ןתינ ?ןוכנ ,םיגאב יופינל רוקמה דוקב הריבש תודוקנ המכ םישל ונחכש לבא .ליגרכ תעצובמ תינכותה תעכ . לעפה הדוקפה תא אצוה ,עוציבב

    (gdb) b main

    .הקספהל b רוציקב יתשמתשה :הרעה

    .םדוק עודי היה הרושה רפסמ םא רבדה ותוא תא עצבל ןתינ .11 הרושב רצעית תינכותה לש שדחמ הלעפה ,תישארה היצקנופב הקספה תדוקנ תרדגה רחאל

    (gdb) b sum.c:11

    .ןלהל היצקנופה םוכס לע הריבש תדוקנ רדגה .וישכע ספדה הדוקפה תא הסננ ואוב .היצקנופב הקספה תדוקנ תרדגומ ןכ םא אלא היצקנופה דוקל תסנכנ הניא הדוקפ אבה ש ןייצל בושח .

    (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]

    . לעפה הדוקפה םע דחי התוא קפס ,הדוקפ תרוש לש םירטמרפ תבייחמ תלעפומה תינכותה םא

    (gdb) run   . . .

    .תיחכונה הצרה תינכותל םיכיושמה םיפתושמ היירפס יצבק םושרל ןתינ

    (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 16 הרושב הריבש תדוקנ עבק ליעל רומאכ .הז תא הסננ ואוב .תינכותה עוציב ךרואל םינתשמ תונשל םג לגוסמ תינכותה תא לעפהו.

    (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

    .gdb תועצמאב םיגאב רותיא לע לקהל ןתינ הז ןפואב .תישארה היצקנופב z = 4 -ל תיפוסה האצותה תא וניניש ןאכ לבא .z = 3 תויהל הכירצ האצותהו a = 1, b = 2 וישכע

    . הקספה תודוקנ דלקה הקספהה תודוקנ לכ תמישר תא לבקל ידכ

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

    . לעפה הדוקפב שמתשה ךכ רחא ליעפהל ידכ . תבשה הדוקפה םע דחי רבשה תדוקנ רפסמ תא ןייצו רבשה תודוקנ תא תבשה לעפומ .To איהו תחא הריבש תדוקנ קר שי ןאכ

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

    . קחמ הדוקפה תועצמאב הקספה תודוקנ תא קוחמל םג ןתינ

    .ךילהת לש דיפה תא ךל תנתונ pidof הדוקפה .םיוסמ ךילהת ותוא לש ךילהתה ההזמ תא אוצמל ונילע לכ םדוק לעופ ךילהתב םיגאב רותפל ידכ .GNU/Linux תכרעמב עקרב םילעופ םיבר םיכילהת

    $ pidof <process_name>

    .םיכרד יתש ןנשי .gdb -ל pid -ה תא ףרצל ונילע וישכע

    .gdb םע דחי pid ןויצ ידי לע .1

    $ gdb -p <pid>

    .gdb -מ ףרצ הדוקפב שומיש .2

    (gdb) attach <pid>

    ... הלאה םירבדה לכ םע קחשל הסנ .דועו הביבסה ינתשמ ,המירעה עדימ תועצמאב םיגאב יופינ עצבל םילוכי ונא ,אמגודל .ליעל ורבסוהש םירבדהמ רתוי הברה הזו רוקמה דוק רותיאב בוט ליחתהל ידכ gdb לש תודוסי


כל הזכויות שמורות. © Linux-Console.net • 2019-2024