Difference between revisions of "Debugging Gramps/he"
| Line 1: | Line 1: | ||
{{RTLPageStart}} | {{RTLPageStart}} | ||
| + | {{languages/he|Debugging Gramps}} | ||
{{man note|מסמך זה מיועד למפתחים המשתמשים בסביבת פיתוח עם גרמפס.|מידע נוסף [https://www.gramps-project.org/wiki/index.php/Portal:Developers פורטל המפתחים] לקבלת מידע על הגדרת [https://www.gramps-project.org/wiki/index.php/Getting_started_with_Gramps_development סביבת פיתוח לגרמפס].}} | {{man note|מסמך זה מיועד למפתחים המשתמשים בסביבת פיתוח עם גרמפס.|מידע נוסף [https://www.gramps-project.org/wiki/index.php/Portal:Developers פורטל המפתחים] לקבלת מידע על הגדרת [https://www.gramps-project.org/wiki/index.php/Getting_started_with_Gramps_development סביבת פיתוח לגרמפס].}} | ||
| Line 149: | Line 150: | ||
* [http://www.learn-c.org/ מדריך אינטראקטיבי חינמי לשפת C] | * [http://www.learn-c.org/ מדריך אינטראקטיבי חינמי לשפת C] | ||
* [https://learncodethehardway.org/c/ Learn C The Hard Way] (בתשלום) | * [https://learncodethehardway.org/c/ Learn C The Hard Way] (בתשלום) | ||
| + | |||
| + | {{languages/he|Debugging Gramps}} | ||
[[Category:He:פיתוח]] | [[Category:He:פיתוח]] | ||
{{RTLPageEnd}} | {{RTLPageEnd}} | ||
Latest revision as of 01:58, 20 September 2025
מסמך זה מיועד למפתחים המשתמשים בסביבת פיתוח עם גרמפס. מידע נוסף פורטל המפתחים לקבלת מידע על הגדרת סביבת פיתוח לגרמפס. |
מדריך כללי לניפוי תקלים בגרמפס.
Contents
קריסה קשה
בעת קריסה קשה, לרוב אין מידע על מיקומה. חשוב לדעת באיזו שורה התרחשה הקריסה. אם ניתן לשחזר אותה, יש להפעיל את גרמפס כך:
python -m trace -t Gramps.py
הפקודה תפיק פלט רב למסוף ותאט את הביצועים, לכן מומלץ להפנות את הפלט לקובץ:
python -m trace -t Gramps.py >/tmp/trace.out
לאחר מכן ניתן לעיין בקובץ /tmp/trace.out, לשמור אותו לפי הצורך, או להפנות את הפלט מראש למיקום אחר.
הוספת פקודות ניפוי
אתחול גרמפס עם דגל אופטימיזציה:
python -O Gramps.py
דבר זה מאפשר להוסיף פקודות ניפוי באמצעות המשתנה המובנה __debug__ או הפקודה assert. כך ניתן להכניס קוד שיפעל רק כאשר גרמפס מופעל ללא דגל האופטימיזציה:
python Gramps.py
מידע נוסף: משפט ה־assert
שימוש במערכת יומן הרישום (לוג)
גרמפס כולל תשתית רישום מובנית של פיתון. גרמפס מופעל ברמת הרישום logging.DEBUG אל stderr.
מידע נוסף: מערכת יום רישום (באנגלית)
בשימוש: יש להוסיף לקוד פקודות רישום כגון: log.warning(), log.error(), log.info()...
להפעלת גרמפס עם דגל ניפוי מסוים:
python Gramps.py --debug="name_of_the_logger"
שיטה זו יעילה לצורך פילוח הרישום לפי רכיבי הקוד הרלוונטיים.
שימוש בפרופיילר
לגרמפס קיימת תכונה מובנית לביצוע פרופיילינג — ניתוח ביצועים של קוד.
דוגמה לשימוש:
בקובץ שנדרש לבחון, יש להוסיף בראשו:
from gramps.gen.utils.debug import profile
נניח שנדרש לבחון את הפונקציה 'שמירה'. יש לשנות את החיבור בלחצן:
#self.define_ok_button(self.top.get_widget("ok"), self.save)
self.define_ok_button(self.top.get_widget("ok"), self.testsave)
הוספת הפונקציה:
def testsave(self, *obj):
profile(self.save, *obj)
בכל פעם שלוחצים על "אישור", תופעל הפונקציה עם פרופיילינג, והדוח יוצג במסוף.
למידע נוסף: שיפור מהירות העיבוד בגרמפס
מודול ניפוי תקלים של פיתון
ניתן להשתמש במנפה התקלים המובנה של פיתון – pdb:
python3 -m pdb Gramps.py
ניתן לשלב breakpoint() בקוד, ולקבל שליטה במסוף.
תחילה יש להפעיל את הפקודה `c` (או `continue`) כדי להריץ את הקוד.
שימוש במנפה התקלות הגרפי winpdb
לתשומת לב ל־winpdb יש בעיות מסוימות. לעקיפה ניתן למצוא מידע דיווח תקלות 2564 |
Winpdb (ב־Ubuntu: הפקודה `sudo apt-get install winpdb`) היא מנשק גרפי ל־pdb.
להפעלה:
winpdb Gramps.py
בפעם הראשונה, בתפריט File יש לבחור 'Open Source' ולפתוח את הקובץ הרצוי. ניתן להציב נקודות עצירה, להריץ עד שורה מסוימת, ולעיין בערכי משתנים וסטאק.
שימוש במנפה התקלים gdb של C
דרושה היכרות עם שפת C. |
שגיאות ברמת C עלולות לקרות כאשר משתמשים ב־GObject introspection. לצורך זה ניתן להשתמש ב־gdb.
יש להתקין ספריות איתור תקלות, כמו libglib2.0-0-dbg, python-gobject-dbg וכו'.
לאחר מכן, להפעיל את gdb כך:
gdb python
ואז:
run Gramps.py
במקרה של תקלה (כגון Segmentation Fault), תתקבל:
Program received signal SIGSEGV, Segmentation fault. ...
הקשה על:
(gdb) bt
לקבלת backtrace. כעת ניתן לאבחן את התקלה בעזרת ידע בשפת C.
איתור אזהרות GObject/GTK
GTK עלולה להוציא אזהרות למסוף. לאיתורן, יש להקיש:
gdb python
ובשורת הפקודה של gdb:
b g_log if log level < 32 r Gramps.py
כעת גרמפס תיעצר על הודעות חמורות, וניתן יהיה לבצע:
bt
לקבלת backtrace.
אפשר גם לגרום לקריסת שגיאות חמורות על ידי:
LC_ALL=C G_DEBUG=fatal-warnings python -m trace -t Gramps.py
ערכים אפשריים נוספים: [1]
למידה נוספת
למידע נוסף על ניפוי תקלים בפיתון ו־C עם gdb:
- מדריכי לימוד לשפת C
שפת הפיתוח של פיתון כתובה ב־C.

