Open main menu

Gramps β

Debugging Gramps/he

Revision as of 01:58, 20 September 2025 by Gioto (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)


Gramps-notes.png
מסמך זה מיועד למפתחים המשתמשים בסביבת פיתוח עם גרמפס.

מידע נוסף פורטל המפתחים לקבלת מידע על הגדרת סביבת פיתוח לגרמפס.

Tango-Dialog-information.png
לתשומת לב בעת ניפוי תקלים,

מסמך זה מתייחס לקבצים src/gramps.py ול־Gramps.py. כיוון שלעולם לא יהיו שניהם באותה התקנה של גרמפס, יש להשתמש ב־src/gramps.py עבור גרסה 3.x ומטה, וב־Gramps.py עבור גרסה 4.x ומעלה.


מדריך כללי לניפוי תקלים בגרמפס.

קריסה קשה

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

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

Gramps-notes.png
לתשומת לב

ל־winpdb יש בעיות מסוימות. לעקיפה ניתן למצוא מידע דיווח תקלות 2564

Winpdb (ב־Ubuntu: הפקודה `sudo apt-get install winpdb`) היא מנשק גרפי ל־pdb.

להפעלה:

winpdb Gramps.py
Winpdb עם גרמפס טעון

בפעם הראשונה, בתפריט File יש לבחור 'Open Source' ולפתוח את הקובץ הרצוי. ניתן להציב נקודות עצירה, להריץ עד שורה מסוימת, ולעיין בערכי משתנים וסטאק.












שימוש במנפה התקלים gdb של C

Gramps-notes.png
דרושה היכרות עם שפת 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.