עבודה ב- t2

37
- בבבבב בT2 תתתת תתתתתת תתתתתת

Upload: caden

Post on 29-Jan-2016

40 views

Category:

Documents


0 download

DESCRIPTION

עבודה ב- T2. מבוא לתכנות מערכות. מטרה. ברצוננו לכתוב את התכנית הבאה: התכנית מנהלת חשבונות בנק. התכנית מורצת משורת הפקודה ומקבלת כפרמטר קובץ לשימוש מאגר הנתונים. המשתמש מבצע פקודות על המאגר בעזרת מנשק טקסטואלי. בסיום ריצת התכנית מאגר הנתונים החדש נשמר בקובץ הפלט. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: עבודה ב- T2

T2עבודה ב-

מערכות לתכנות מבוא

Page 2: עבודה ב- T2

מטרה

ברצוננו לכתוב את התכנית הבאה:•התכנית מנהלת חשבונות בנק.–התכנית מורצת משורת הפקודה ומקבלת כפרמטר –

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

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

בקובץ הפלט..T2נרצה להריץ את התכנית על שרת ה-–

2מבוא לתכנות מערכות

Page 3: עבודה ב- T2

דוגמה

myuser@t2 > bank database.txt database2.txtadd Moshe Cohen Premium 50000.00deposit Moshe Cohen Premium 4000.00withdraw Dani Din Regular 300.00exitmyuser@t2 >

myuser@t2 > bank database.txt database2.txtadd Moshe Cohen Premium 50000.00deposit Moshe Cohen Premium 4000.00withdraw Dani Din Regular 300.00exitmyuser@t2 >

database.txt

[Business Yaron Levi 6000.00]

[Regular Dani Din 600.00]

database2.txt

[Business Yaron Levi 6000.00]

[Regular Dani Din 300.00]

[Premium Moshe Cohen 54000.00]

3מבוא לתכנות מערכות

Page 4: עבודה ב- T2

תכן התכנית

תכנית גדולה נהוג לחלק למודולים.•כיצד יש לחלק תכנית נלמד במהלך הקורס.–בד"כ המודולים נוצרים לפי "עצמים" המופיעים –

בתוכנה.

התוכנה שלנו תורכב ממודול עבור חשבון בנק.•.account.c ו-account.hמודול זה ימומש בקבצים –את העיבוד של מאגר הנתונים ופקודות המשתמש –

.main.cנבצע בקובץ נוסף -

4מבוא לתכנות מערכות

Page 5: עבודה ב- T2

מטרת השיעורים

בשיעורים אלו נתעסק בכלים הדרושים לשלבים השונים של כתיבת •התכנית.

כתיבת הקוד–קומפילציה–debuggingניפוי שגיאות - –

כיצד ניתן לכתוב את הקוד הדרוש לתכנית כזו יילמד בהרצאות •ובתרגולים.

כיצד מחלקים את הקוד לקבצים–כיצד משתמשים במבני נתונים מתאימים–וכו'...–

Course Materialקוד התכנית הפתורה זמין באתר הקורס תחת •

5מבוא לתכנות מערכות

Page 6: עבודה ב- T2

T2עבודה מרחוק ב-

בשיעור זה נתרכז בכתיבת תכניות, בדיקתן והרצתן •:T2ישירות על שרת ה-

T2התחברות ל-–

עריכת טקסט–

הידור תכניות–

הרצת ובדיקת תכניות–

6מבוא לתכנות מערכות

Page 7: עבודה ב- T2

T2התחברות ל-

נלמד בפירוט בתרגול T2כיצד ניתן להתחבר לשרת ה-•הראשון.

.T2 כדי להתחבר בדוגמאות אלו ל-SSHנשתמש ב-•–SSH.היא תכונת אמולציה לטרמינל מרחוק

–SSH ניתנת להורדה עבור Windows:מהכתובת הבאה ftp://ftp.cs.technion.ac.il/pub/ssh-client/sshclient.exe

( ניתן פשוט לפתוח חלון טרמינל OSXעבור לינוקס )או –”.sshולהשתמש בפקודה “

7מבוא לתכנות מערכות

Page 8: עבודה ב- T2

ניווט בסיסי

לאחר ההתחברות נגיע לתיקית הבית שלנו.•.Directory או Folderתיקיה תיקרא גם: ספריה מדריך, – ~.cdבכל שלב ניתן לחזור אליה ע"י הפקודה –

ניתן לבצע פקודות ע"י הקלדת שמן:•עבור פקודות בסיסיות פשוט לרשום את שמן:–

.cd, cp, mv, lsלמשל •.1רשימת פקודות מפורטת יותר מופיעה בתרגול מס' •

עבור תכניות יש לכתוב את כתובת קובץ ההרצה:–ע"י כתובתו המלאה המתחילה מהתיקיה הראשית "/"•ע"י רישום כתובת יחסית.•

<”filenameכדי להריץ קובץ בתיקיה הנוכחית יש לרשום “./<–

8מבוא לתכנות מערכות

Page 9: עבודה ב- T2

יצירת תיקיה חדשה

בשלב הראשון ניצור תיקיה תחת תיקית הבית •אשר בה נכתוב ונריץ את התכנית.

יוצרת תיקיה חדשה.mkdirהפקודה – מחליפה את התיקיה הנוכחית.cdהפקודה –( שמות הקבצים Windows )בניגוד ל-Unixשימו לב! ב-–

case-sensitiveוהתיקיות הם הבדל זה יכול להשפיע על קוד שמתייחס לשמות קבצים כך •

!יעבוד שונה במערכות הפעלה שונותש

Last login: Thu Aug 20 23:50:22 2009 from 93-173-128-49.techion.ac.ilmyuser@t2 > mkdir Bankmyuser@t2 > cd Bank

Last login: Thu Aug 20 23:50:22 2009 from 93-173-128-49.techion.ac.ilmyuser@t2 > mkdir Bankmyuser@t2 > cd Bank

אדום = רע

אדום = רע

9מבוא לתכנות מערכות

Page 10: עבודה ב- T2

עריכת טקסט

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

קיימות מספר תוכנות פופולריות לעריכת •טקסט בטרמינל:

–pico/nano–vim–emacs

.Emacsנתרכז בשימוש ב-•

10מבוא לתכנות מערכות

Page 11: עבודה ב- T2

Pico/Nano

•nanoו pico הם עורכי טקסט בסיסיים אשר מזכירים את

notepad של windowsאין להם ממשק גרפי או •

שליטה באמצעות העכבר, כל הפקודות נעשות

באמצעות קומבינציה של עם מקש נוסף. Ctrlהמקש

דוגמא לפעולות בסיסיות:–Ctrl+xיציאה מהעורך – –Ctrl+oשמירת שינויים –

11מבוא לתכנות מערכות

Page 12: עבודה ב- T2

Emacs

•Emacs.הוא עורך טקסט משוכלל במיוחד הוא מתרגם פקודות של Emacsבבסיסו –

.emacs-lispשפת התכנות מאפשר למשתמשים להוסיף תכונות לתכנית •

בקלות.

במנשק גרפי או Emacsניתן להפעיל את –בטרמינל.

מופעל במצב גרפי אם Emacsכברירת מחדל •הוא זמין.

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

ראשונית.

:Windowsניתן להוריד גרסה ל-•

מצב גרפי

מצב טרמינלmyuser@t2 > emacs >files>myuser@t2 > emacs >files>

:// . . / / / / -22.3- -http ftp gnu org gnu emacs windows emacs bin386.i zip

12מבוא לתכנות מערכות

Page 13: עבודה ב- T2

emacs.קובץ

•Emacs./~ קורא בצורה אוטומטית את הקובץ emacs בתחילת ההרצה וטוען ממנו הגדרות משתמש.

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

משתמשות בשיטה זו.Unixרוב התכניות ב-–

.Course Material, Helpers מועיל תחת emacsבאתר הקורס ניתן להוריד קובץ .•++C/Cב-צביעה של הקוד מוסיף –.Emacsלקומפילציה ו"דיבוג" מתוך קיצורים נוחים –הגדרת מקשי המקלדת בצורה מתאימה יותר למשתמשי חלונות.–

ניתן לערוך את הקובץ ולהתאים אותו לטעמכם.• בסיסית ב-emacs-lispניתן ללמוד –

http://www.gnu.org/software/emacs/emacs-lisp-intro/html_mono/emacs-lisp-intro.html.ניתן להבין מהקובץ הקיים כיצד לבצע פעולות פשוטות.–

למשל החלפת הצבעים תדרוש החלפה של מחרוזות פשוטות בקוד.•

.http://www.emacswiki.org/emacs/ElispArea#toc2ניתן למצוא קוד להורדה ב-–

ירוק = טוב

ירוק = טוב

13מבוא לתכנות מערכות

Page 14: עבודה ב- T2

קומפילציה / הידור

בכדי להריץ את התכנית שכתבנו עלינו לקמפל אותה •תחילה.

)וכולן במסגרת הקורס( מותקן Unixברוב מערכות ה-•.GCC - GNU Compiler Collection הקרוי Cקומפיילר

הערה: נא לא להתבלבל בין קומפיילר לסביבת פיתוח.•++ למשל( מכילה קומפיילר ואת Dev Cסביבת פיתוח )כמו –

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

קלט היוצרת קובץ פלט המכיל פקודות מכונה שניתן להריץ.

14מבוא לתכנות מערכות

Page 15: עבודה ב- T2

GCC

כדי לקמפל את התכנית נריץ את הקומפיילר •עם קבצי הקוד כפרמטרים:

אותו נוכל a.outאם הקוד תקין יתקבל קובץ בשם –להריץ.

myuser@t2 > gcc main.c account.cmyuser@t2 > gcc main.c account.c

myuser@t2 > a.out database.txtadd Moshe Cohen Premium 50000.00exitmyuser@t2 >

myuser@t2 > a.out database.txtadd Moshe Cohen Premium 50000.00exitmyuser@t2 >

15מבוא לתכנות מערכות

Page 16: עבודה ב- T2

שגיאות קומפילציה

ידפיס למסך את GCCאם הקוד אינו תקין •רשימת שגיאות הקומפילציה שמנעו את המשך

הקומפילציה.

לכל שגיאה מצוין מספר השורה בו נמצאה –ותיאורה.

myuser@t2 > gcc main.c account.caccount.c: In function `AccountCreate':account.c:52: error: syntax error before "return"account.c: In function `AccountRead':account.c:74: error: `balance' undeclared )first use in this function(account.c:74: error: )Each undeclared identifier is reported only onceaccount.c:74: error: for each function it appears in.(myuser@t2 >

myuser@t2 > gcc main.c account.caccount.c: In function `AccountCreate':account.c:52: error: syntax error before "return"account.c: In function `AccountRead':account.c:74: error: `balance' undeclared )first use in this function(account.c:74: error: )Each undeclared identifier is reported only onceaccount.c:74: error: for each function it appears in.(myuser@t2 >

16מבוא לתכנות מערכות

Page 17: עבודה ב- T2

GCCפרמטרים של

בקורס זה נקמפל את התכניות שלנו עם שורת הפקודה הבאה:•

•- o <filename< דגל זה מורה לקומפיילר לכתוב את קובץ הפלט לקובץ>filename במקום לברירת המחדל >a.out.

•-std=c99 .דגל זה קובע את סטנדרט השפה לפיו הקומפיילר יעבוד .C99הסטדרנט בקורס הוא

:for ניתן להגדיר משתנים לא רק בתחילת בלוק, ואף בתחילת לולאת C99שימו לב, ב-–

•-pedantic-errors מכריח את הקומפיילר להקפיד על הסטנדרט הנבחרולפלוט שגיאות על הפרות שלו.

myuser@t2 > gcc -o bank -std=c99 -pedantic-errors -Wall -Werror main.c account.cmyuser@t2 > gcc -o bank -std=c99 -pedantic-errors -Wall -Werror main.c account.c

for (int i = 0; i < n; ++i) {printf("%d\n", i);

}

for (int i = 0; i < n; ++i) {printf("%d\n", i);

}

17מבוא לתכנות מערכות

Page 18: עבודה ב- T2

GCCפרמטרים של

בקורס זה נקמפל את התכניות שלנו עם שורת הפקודה הבאה:•

•-Wall.גורם לקומפיילר להציג יותר אזהרות בזמן קומפילציה אזהרות קומפילציה דומות לשגיאות.–הקומפיילר יכול להתעלם מהן.–בד"כ הן מצביעות על טעויות של המתכנת או על קוד שנכתב בצורה לא –

טובה.נעדיף לראות את אזהרות אלו ולחסוך לנו טעויות בהמשך.–

•-Werror .דגל זה מורה לקומפיילר להתייחס לאזהרה כאל שגיאהכלומר הקוד שלכם בקורס חייב להתקמפל גם ללא אזהרות.–בד"כ )ובקורס הזה תמיד( אין סיבה שהקוד שלכם יכיל אזהרות.–

myuser@t2 > gcc -o bank -std=c99 -pedantic-errors -Wall -Werror main.c account.cmyuser@t2 > gcc -o bank -std=c99 -pedantic-errors -Wall -Werror main.c account.c

18מבוא לתכנות מערכות

Page 19: עבודה ב- T2

השוואת טקסט

משמשת להשוואת שני קבצי טקסט.diffהפקודה •אם הקבצים זהים לא יודפס כלום.•אם הם שונים תודפס רשימת שינויים שיש לבצע על הקובץ הראשון כדי להפכו •

myuser@t2 > cat file1.txtלשני[Business Yaron Levi 6000.00][Regular Dani Din 600.00]myuser@t2 > cat file2.txt[Premium Moshe Cohen 54000.00][Business Yaron Levi 6000.00][Regular Dani Din 300.00]myuser@t2 > diff file1.txt file2.txt0a1> [Premium Moshe Cohen 54000.00]2c3> [Regular Dani Din 600.00]---> [Regular Dani Din 300.00]

myuser@t2 > cat file1.txt[Business Yaron Levi 6000.00][Regular Dani Din 600.00]myuser@t2 > cat file2.txt[Premium Moshe Cohen 54000.00][Business Yaron Levi 6000.00][Regular Dani Din 300.00]myuser@t2 > diff file1.txt file2.txt0a1> [Premium Moshe Cohen 54000.00]2c3> [Regular Dani Din 600.00]---> [Regular Dani Din 300.00]

בדוגמה:•–0a1 : השורה ) 0בשורה לפני

שורה( את להוסיף יש הראשונה1) השני ) מהקובץ

–:2c3 שורה להחליף 2את יש.3בשורה השני מהקובץ

לקריאה אכן, • נוח אינו .הפלט

19מבוא לתכנות מערכות

Page 20: עבודה ב- T2

sdiff

מלבד צורת הפלט.diff דומה לפקודה sdiffהפקודה •שני הקבצים יוצגו אחד ליד השני.–שורות ארוכות ייחתכו.–כל שורה מהקובץ הראשון תותאם ותוצג ליד שורה מהקובץ השני.–שורות שהותאמו לשורה ריקה או שורה שאינה זהה יוצגו עם תו | מפריד ביניהן –

כדי לסמן הבדלים ביון הקבצים.

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

shiroko2@t2 > diff file1.txt file2.txt> [Premium Moshe Cohen 54000.00]

[Business Yaron Levi 6000.00] [Business Yaron Levi 6000.00][Regular Dani Din 600.00] | [Regular Dani Din 300.00]

shiroko2@t2 > diff file1.txt file2.txt> [Premium Moshe Cohen 54000.00]

[Business Yaron Levi 6000.00] [Business Yaron Levi 6000.00][Regular Dani Din 600.00] | [Regular Dani Din 300.00]

20מבוא לתכנות מערכות

Page 21: עבודה ב- T2

בדיקות

כדי לבדוק את התכנית שלנו:•נכתוב קבצי קלט וקובץ פלט צפוי.–נריץ את התכנית עם קבצי הקלט.– בכדי לבדוק אם הפלט שהתקבל מתאים לפלט diff ב-נשתמש–

הצפוי.

בצורה בעזרת שיטה זו נוכל לוודא את נכונות התכנית •לאחר שינויים בקוד.אוטומטית

לתכנית בשלב הכנסת קלט ידנית שיטה זו חוסכת •הבדיקה.

21מבוא לתכנות מערכות

Page 22: עבודה ב- T2

דוגמא:database.txt[Business Yaron Levi 6000.00][Regular Dani Din 600.00]

test1.out[Business Yaron Levi 6000.00][Regular Dani Din 300.00][Premium Moshe Cohen 54000.00]

test.inadd Moshe Cohen Premium 50000.00deposit Moshe Cohen Premium 4000.00withdraw Dani Din Regular 300.00exit

כדי לבדוק את התכנית נכתוב תרחישים •קצרים הבודקים את התכנית

במקרה שלנו נצטרך:•קובץ נתונים התחלתי–קובץ קלט לפקודות–קובץ הפלט הצפוי–

כדי לבדוק את התכנית נריץ את הפקודות •הבאות:

אם לא מודפס כלום התכנית עובדת •כמתוכנן.

אחרת ניתן לנתח את הפלט ולראות מהי •ההתנהגות הלא נכונה.

אפשרות נוספת היא שהתכנית פשוט תתרסק –ולא נגיע לפקודה השנייה.

myuser@t2 > ./bank database.txt out.txt > test.inmyuser@t2 > diff out.txt test1.outmyuser@t2 > ./bank database.txt out.txt > test.inmyuser@t2 > diff out.txt test1.out

22מבוא לתכנות מערכות

Page 23: עבודה ב- T2

Shellשימוש בתכונות ה-

היא הסביבה הטקסטואלית בה מורצות הפקודות בשימוש Shellה-•בטרמינל.

.C-Shell הקרויה Shell מופעלת ה-T2בהתחברות ל-–

מכילה קיצורים ע"מ להקל על המשתמש מהקלדה מייגעת של Shellכל •פקודות.

קיצורים בסיסיים המקלים על העבודה:•–TAB.משלים את המילה הנוכחית לשם קובץ או פקודה :ניתן להשתמש בחצים ↑/↓ כדי לעבור על הפקודות האחרונות שבוצעו.–

פופולרי, בפרט:Shellקיצורים אלה עובדים בכל •(T2 )על ה-C-Shellב-–(Linux Ubuntu ברירת המחדל ב-Shell )Bashב-–.Windows ב-Command Promptב-–

23מבוא לתכנות מערכות

Page 24: עבודה ב- T2

scriptהרצת

ניתן גם לכתוב מספר פקודות בקובץ טקסט ולהריץ •.sourceאת פקודות אלו ע"י הפקודה

(.scriptsקבצים אלו נקראים תסריטים )–חומר זה נלמד לעומק בהמשך הקורס, בינתיים ניתן –

לעשות בו שימוש בסיסי אך חשוב.

backup.csh

echo “Backing up code…”

mkdir backup

cp *.c *.h backup

echo “Done”myuser@t2 > source backup.cshBacking up code…Donemyuser@t2 >

myuser@t2 > source backup.cshBacking up code…Donemyuser@t2 >

myuser@t2 > chmod u+x backup.cshmyuser@t2 > backup.cshBacking up code…Donemyuser@t2 >

myuser@t2 > chmod u+x backup.cshmyuser@t2 > backup.cshBacking up code…Donemyuser@t2 >

•: תכנית" כמו הפקודה משורת להריצו ניתן לקובץ ריצה הרשאות הוספת י ע

24מבוא לתכנות מערכות

Page 25: עבודה ב- T2

הרצת בדיקות אוטומטית

עכשיו כשאנו יודעים כיצד •ניתן לבדוק בצורה

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

נוחה.יצירת בדיקות הקפידו על –

כבר ותסריט להרצתן בתחילת העבודה

הריצו לאחר כל ביצוע –שינוי בקוד

הרצה קבועה של הבדיקות –תמנע בזבוז זמן בבדיקות ו"פאדיחות" ברגע האחרון.

run_tests.cshgcc -o bank -std=c99 -pedantic-errors -Wall -Werror main.c account.c

echo “Test no.1 )Adding accounts(”./bank database.txt out.txt > test1.indiff out.txt test1.out

echo “Test no.2 )Depositing(”./bank database.txt out.txt > test2.indiff out.txt test2.out

echo Test no.3 )Withdraw(./bank database.txt out.txt > test3.indiff out.txt test3.out myuser@t2 > source run_tests.csh

Test no.1 )Adding accounts(Test no.2 )Depositing(Test no.3 )Withdraw(myuser@t2 >

myuser@t2 > source run_tests.cshTest no.1 )Adding accounts(Test no.2 )Depositing(Test no.3 )Withdraw(myuser@t2 >

25מבוא לתכנות מערכות

Page 26: עבודה ב- T2

GDBשימוש ב-

.GDBכלי אחרון וחשוב לעבודה במנשק טקסט הוא •–GDB הוא דיבאגר בסיסי המגיע בד"כ עם GCC.

"דיבאגר" היא תכנית המאפשרת להריץ את התכנית שלנו בצורה מבוקרת •ולבדוק את מצב התכנית.

איתור נקודות התרסקות–הדפסת ערכי משתנים–

.g-כאשר מקמפלים את התכנית לצרכי "דיבוג" חשוב להוסיף את הדגל • לספק GDBמוסיף מיפוי לקוד המקור לקובץ ההרצה הבינארי ומאפשר לתכניות כגון –

מידע מדויק יותר.

myuser@t2 > gcc -o bank -g -std=c99 -pedantic-errors -Wall -Werror main.c account.cmyuser@t2 > gcc -o bank -g -std=c99 -pedantic-errors -Wall -Werror main.c account.c

26מבוא לתכנות מערכות

Page 27: עבודה ב- T2

לטיפול בקריסות תוכנהGDBשימוש ב-

קריאת הערך המוצבע ממצביע • תגרום לתכנית NULLשערכו

לעצור בפתאומיות.

בתכנית הנתונה הקריאה השנייה – תגרום לקריאת הערך fל-

.NULLממצביע

הרצה רגילה של התכנית ללא –דיבאגר אינה מספקת מידע על

הסיבה להתרסקות.

#include <stdio.h> int twice(int* ptr) {

int result = *ptr + *ptr;return result;

} int main() {

int a = 5;printf("%d\n",twice(&a));int* ptr = NULL;printf("%d\n",twice(ptr));return 0;

}

#include <stdio.h> int twice(int* ptr) {

int result = *ptr + *ptr;return result;

} int main() {

int a = 5;printf("%d\n",twice(&a));int* ptr = NULL;printf("%d\n",twice(ptr));return 0;

}

myuser@t2 > gcc crash.cmyuser@t2 > ./a.out10Segmentation faultmyuser@t2 >

myuser@t2 > gcc crash.cmyuser@t2 > ./a.out10Segmentation faultmyuser@t2 >

27מבוא לתכנות מערכות

Page 28: עבודה ב- T2

נריץ את התכנית עם קובץ ההרצה אותו GDBכדי להריץ את •נרצה "לדבג".

•GDB עובדת בעזרת מנשק טקסטואלי. כאשר התכנית הנבדקת אינה רצה תופיע שורת פקודה בה ניתן להכניס פקודות שונות של

GDB:למשל ,–runמריצה את התכנית - –continueממשיכה את ריצת התכנית לאחר הפסקה - –step)מריץ שורת קוד אחת בדיוק )נכנס לפונקציה –printמקבל שם משתנה או ביטוי כפרמטר ומדפיס את ערכו - .Ctrl+zניתן לעצור זמנית את ריצת התכנית ע"י –.Ctrl+Cניתן להפסיק את ריצת התכנית לחלוטין ע"י –

לטיפול בקריסות תוכנהGDBשימוש ב-

myuser@t2 > gdb >binary file>myuser@t2 > gdb >binary file>

28מבוא לתכנות מערכות

Page 29: עבודה ב- T2

לטיפול בקריסות תוכנהGDBשימוש ב-

כאשר התכנית מנסה •לקרוא כאת את המצביע

GDBההרצה נעצרת ו-מספק מידע מדויק לגבי

מיקום התכנית.

backtraceע"י הפקודה •ניתן להדפיס את מצב

מחסנית הקריאות.במקרה שלנו הפונקציה –

twice-נקראת מ main.

myuser@t2 > gcc -g crash.cmyuser@t2 > gdb -q a.out)gdb( runUsing host libthread_db library "/lib64/tls/libthread_db.so.1".Starting program: /u1/115/myuser/a.out 10

Program received signal SIGSEGV, Segmentation fault.0x00000000004004b4 in twice )ptr=0x0( at crash.c:44 int result = *ptr + *ptr;)gdb( backtrace#0 0x00000000004004b4 in twice )ptr=0x0( at crash.c:4#1 0x00000000004004fa in main )( at crash.c:12)gdb(

myuser@t2 > gcc -g crash.cmyuser@t2 > gdb -q a.out)gdb( runUsing host libthread_db library "/lib64/tls/libthread_db.so.1".Starting program: /u1/115/myuser/a.out 10

Program received signal SIGSEGV, Segmentation fault.0x00000000004004b4 in twice )ptr=0x0( at crash.c:44 int result = *ptr + *ptr;)gdb( backtrace#0 0x00000000004004b4 in twice )ptr=0x0( at crash.c:4#1 0x00000000004004fa in main )( at crash.c:12)gdb(

מתוך • שוב התכנית את נריץ .GDBעכשיו.qהדגל -– הפתיחה הודעת של הדפסה חוסךהתכנית runהפקודה – להרצת פרמטרים לקבל יכולה

29מבוא לתכנות מערכות

Page 30: עבודה ב- T2

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

התנהגותיות של התכנית.כדי לבדוק אותן נרצה לעצור את התכנית, –

לבדוק את ערכי המשתנים ולהתקדם צעד צעד.

כדי לעצור את התכנית בשורת קוד •נקודת עצירה מסוימת נוסיף

(breakpoint) ע"י הפקודה break ושם הפונקציה שיש לעצור בתחילתה

נוכל לבדוק את ערכי המשתנים בעזרת •.printהפקודה

כדי להמשיך בריצת התכנית נשתמש • )המשך עד נקודת העצירה continueב-

הבאה(

כדי להתקדם בצורה מבוקרת נשתמש •.stepבפקודה

shiroko2@t2 > gdb -q a.outUsing host libthread_db library "/lib64/tls/libthread_db.so.1".)gdb( break twiceBreakpoint 1 at 0x4004b0: file crash.c, line 4.)gdb( runStarting program: /u1/115/shiroko2/a.out

Breakpoint 1, twice )ptr=0x7fbffff7dc( at crash.c:44 int result = *ptr + *ptr;)gdb( print ptr$1 = )int *( 0x7fbffff7dc)gdb( print *ptr$2 = 5)gdb( print *ptr+*ptr$3 = 10)gdb( continueContinuing.10

Breakpoint 1, twice )ptr=0x0( at crash.c:44 int result = *ptr + *ptr;

shiroko2@t2 > gdb -q a.outUsing host libthread_db library "/lib64/tls/libthread_db.so.1".)gdb( break twiceBreakpoint 1 at 0x4004b0: file crash.c, line 4.)gdb( runStarting program: /u1/115/shiroko2/a.out

Breakpoint 1, twice )ptr=0x7fbffff7dc( at crash.c:44 int result = *ptr + *ptr;)gdb( print ptr$1 = )int *( 0x7fbffff7dc)gdb( print *ptr$2 = 5)gdb( print *ptr+*ptr$3 = 10)gdb( continueContinuing.10

Breakpoint 1, twice )ptr=0x0( at crash.c:44 int result = *ptr + *ptr;

30מבוא לתכנות מערכות

Page 31: עבודה ב- T2

GDBסיכום -

אינה פשוטה בהתחלה.GDBהעבודה עם •אבל עדיין עדיפה על עבודה ללא דיבאגר.–התחילו בשימוש בפקודות הפשוטות שמוצגות כאן.–ניתן לקבל את רשימת הפקודות המלאה ע"י הפקודה –

help.ולקבל מידע מפורט יותר

בהמשך נלמד שימוש נוסף ב"דיבאגרים" נוחים •יותר.

GDBבפרט נראה מנשקים גרפיים אשר עובדים מעל –ומאפשרים עבודה נוחה יותר.

31מבוא לתכנות מערכות

Page 32: עבודה ב- T2

Backup

עם Emacsעבודה

32מבוא לתכנות מערכות

Page 33: עבודה ב- T2

Emacsמושגים בסיסיים ב-

•C-<key< לחיצה על -Ctrl+>key.משמש בהגדרת קיצורים >

•M-<key < לחיצה -Meta+>key.> מתפקד ככפתור זה, אם לא ניתן להחליף אותו בלחיצה על מקש Altלפעמים –

Esc לחיצה על <ולאחריה key.>

•buffer חוצץ טקסט הניתן להצגה ו/או עריכה. למשל לכל קובץ פתוח - מתאים.bufferקיים

•minibuffer חוצץ התחתית החלון אשר משמש את - Emacs להודעות ושאלות.

למשל:–חלק מהשאלות נענות ע"י לחיצת מקש, חלקן דורשות לרשום מחרוזת ולחיצה על –

Enter.)למשל פתיחת קובץ(

Modified buffers exist; exit anyway? )yes or no(Modified buffers exist; exit anyway? )yes or no(

33מבוא לתכנות מערכות

Page 34: עבודה ב- T2

Emacsשליטה ב-

סגירת חוצץ:•.C-x kע"י –

שמירת קובץ:•C-x C-sבשמו הנוכחי ע"י –C-x C-wבשם חדש ע"י –

יציאה:•יציאה מתבצעת ע"י–

C-x C-c אם יש חוצצים ,לא שמורים תופיע שאילתה

האם יש לשמור אותם.

•:) מקובץ ) חדש חוצץ פתיחתלכל – הנפתחים החוצצים מלבד

לפקודת כפרמטר שניתן קובץ " י ע נוסף קובץ לפתוח ניתן ההרצה

C-x C-f.– " י ע תיקיה גם לפתוח , C-x dניתן

קובץ לבחור ניתן תיקיה בחוצץ " על לחיצה י ע .Enterלפתיחה

•: חוצצים בין מעברי" – . C-x bע החוצץ שם והכנסת

(Tab זה במקרה אוטומטית ישליםהחוצצים רשמית את וימיג

האפשריים(

34מבוא לתכנות מערכות

Page 35: עבודה ב- T2

Emacsשליטה ב-

לחיפוש לאחור(C-r: )או C-sחיפוש - •מתחיל חיפוש אינקרמנטלי.– יקפוץ לתוצאה הראשונה המתאימה.Emacsברגע לחיצת תו למחרוזת החיפוש – תקפוץ לתוצאה הבאה.C-sלחיצה נוספת על –

(:Undoביטול פעולה אחרונה )•-_Cאו C-x uמתבצע ע"י – כמו בתוכנות שכיחות. במקום זאת לאחר ביצוע מספר פעולות redo פעולת Emacsאין ב-–

undo ופעולה שאינה undo-כל הפעולות האחרונות ייכנסו למחסנית ה undo כלומר ניתן( הקודמות(undo לפעולות ה-undoלבצע

השלמה אוטומטית:• ושמות קבצים.Emacs כדי להשלים שמות פקודות של Tabניתן להשתמש ב-–.-/Mניתן להשלים מילים הקוד בעזרת –

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

שימוש בהשלמה יחסוך לכם הרבה זמן ושגיאות קומפילציה כתוצאה משגיאות כתיב.•

35מבוא לתכנות מערכות

Page 36: עבודה ב- T2

Emacsשליטה ב-

הוא בסיסי במיוחד, ניתן לקרוא את המדריך הקצר Emacsהחומר המפורט כאן לשימוש ב-•והיעיל הבא:

http://www2.lib.uchicago.edu/keith/tcl-course/emacs-tutorial.html

•: זמנית בו חוצצים במספר שליטהמספר – שיציג כך הנוכחי הטקסט חלון את לפצל ניתן

. אחת בבת חוצצים–C-x o. הבא לחלון הפעיל הסמן את מעביר–C-x 0. הפעיל החלון את סוגר–C-x 1 . הפעיל החלון מלבד החלונות כל את סוגר–C-x 2) השני ) מעל אחד קבצים שני אנכי לפיצול–C-x 3) השני ) ליד אחד קבצים שני מאוזן לפיצול

• , הפונקציה שם זהו מלא שם יש פקודה לכל.Emacs Lispב-

• " י ע שם לפי פקודה להריץ שם M-xניתן ורישום.הפקודה

על – רשימת Tabלחיצה את ותציג אוטומטית תשלים האפשרויות.

36מבוא לתכנות מערכות

Page 37: עבודה ב- T2

Emacsעזרה ב-

גם ע"י שימוש במנגנון העזרה הפנימי.Emacsניתן למצוא פקודות •

.C-hכל פקודות העזרה מתחילות ב-•

תפתח חוצץ המציג את פקודות העזרה השונות. C-h C-hהפקודה •

•C-h a :.מחכה למחרוזת קלט ומדפיס את כל הפקודות המכילות מחרוזת זו בשמה” בשמן בד"כ.deleteלמשל פקודות מחיקה יכילו את המחרוזת “–

•C-h k : מחכה ללחיצה על מקש כלשהו ומדפיסה את הפקודה הקשורה למקש זה)אם קיימת אחת(.

•C-h t :( מריצה את התרגולTutorial הפנימי למשתמשים חדשים. מומלץ מאוד ).Emacsלהריץ את פקודה זו בפעם הראשונה שעובדים עם

37מבוא לתכנות מערכות