כיצד להשתמש ב-GNU Debugger בלינוקס

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

תחילה נכתוב תוכנית C קטנה אשר לאחר מכן ננקה באגים. כדי להתחיל, צור חדש .c קובץ באמצעות מֶרֶץ או כל עורך לבחירתך:

vim test.c

צור את תוכנית C הבאה:

#include int main() { int i = 5; float f = 5.5 i = i + 3; f = f + 2.2; printf("הערך של i ו-f הם: %d ו-%f\n", i, f); החזר 0; }

ללחוץ בריחה כדי לעבור למצב פקודה vim. לאחר מכן הקלד :wq לשמור את התוכנית ולצאת.

קומפיל ובדוק אם התוכנית פועלת:

gcc test.c -o test ./test הערך של i ו-f הם: 8 ו-7.700000

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

gcc test.c -g -o test

כדי להתחיל באגים קובץ ההפעלה שלנו מִבְחָן ב gdb, אנחנו רצים:

מבחן gdb

זה יפתח את gdb מסוף, שבו אתה יכול להקליד את gdb פקודות. כדי לראות רשימה של פקודות השתמש ב- עֶזרָה פקודה.

$(gdb) help רשימת מחלקות של פקודות: כינויים -- כינויים של נקודות עצירה של פקודות אחרות -- לגרום לתוכנית לעצור בנקודות מסוימות נתונים -- בחינת קבצי נתונים -- ציון ובחינת קבצים פנימיים -- פקודות תחזוקה לא ברורות -- תכונות לא ברורות פועלות -- הפעלת מחסנית התוכנית -- בחינת מצב המחסנית -- תמיכה בפניות סטטוס -- נקודות מעקב של מתקני תמיכה -- מעקב אחר ביצוע התוכנית ללא עצירת התוכנית המוגדרת על ידי המשתמש -- פקודות מוגדרות על ידי משתמש הקלידו "עזרה" ואחריה שם מחלקה עבור רשימה של פקודות באותה מחלקה. הקלד "עזרה לכולם" עבור רשימת כל הפקודות. הקלד "עזרה" ואחריו שם הפקודה לתיעוד מלא. הקלד "אפרופו מילה" כדי לחפש פקודות הקשורות ל"מילה". קיצורי שם פקודה מותרים אם הם חד משמעיים.

לאחר מכן תוכל להקליד עזרה class_name כדי לראות פקודות השייכות לאותה מחלקה. כדי לחפש פקודות באמצעות מחרוזת משנה, השתמש אפרופו תת מחרוזת.

כדי להגדיר נקודת שבירה כאשר התוכנית נכנסת לפונקציה, לָרוּץ:

$(gdb) break main

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

$(gdb) לרוץ

כדי להגדיר נקודת שבירה במיקום מסוים בפונקציה, להשתמש:

הפסקה *ראשית + ​​4

זה יגדיר נקודת שבירה בשורה הרביעית של הפונקציה הראשית.

עַכשָׁיו, כדי לעבור על זרימת התוכנית לשורת הקוד הבאה, פשוט להפעיל את שלב פקודה.

$(gdb) שלב 5: float f = 5.5;

כדי להציג תוכן של משתנה, לָרוּץ לְהַצִיג .

$(gdb) display i 6: i = 5

כדי לשנות תוכן של משתנה, אשר עשוי להידרש כדי לנתח את הריצה של תוכנית תחת ערכים ספציפיים של משתנה, run set variable =ביטוי.

$(gdb) הגדר משתנה i=10 $(gdb) display i 7: i = 10

כאן, ה'ביטוי' יכול להיות כל ביטוי חוקי (אריתמטי / לוגי). למען הפשטות אנו פשוט מקצים ערך נוסף (10) למשתנה אני.

כדי להדפיס את קוד ההרכבה של התוכנית, השתמש בפקודה לפרק את שם הפונקציה:

השתמש רק לְפַרֵק כדי להדפיס קוד הרכבה עבור כל התוכנית. שימו לב לחץ בשורה מסוימת בקוד ההרכבה. זה מציין שהפעלת ניפוי הבאגים מושהית כרגע במיקום הזיכרון המסוים הזה (כלומר, שורת הקוד הזו).

כדי לקפוץ את מאתר הבאגים על שורת קוד מסוימת, לָרוּץ:

$(gdb) jump *main + 2 ממשיך ב-0x400528. נקודת שבירה 2, 0x000000000040052a ב-main () ב-test.c:3 3 int main() { 1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i = 

זה יגרום לאיפוי הבאגים לקפוץ למיקום הזיכרון של שורת הקוד השנייה בפונקציה רָאשִׁי. שימו לב שכאן קפצתי מהתחלה של ראשי למיקום שני ישירות. לפיכך, משתנה אני מעולם לא הוגדר, מה שגורם לשגיאת הבאגים שזורקת שגיאה שהוא לא יכול לגשת לתוכן הזיכרון בכתובת של משתנה אני.

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