Download presentation
Presentation is loading. Please wait.
1
סמינר בניהול זכרון דינמי Purify: Fast Detection of Memory Leaks and Access Errors רומן מנביץ ’
2
הקדמה ניהול הזכרון - שתי אפשרויות : אוטומטי מערכות עם ניהול זכרון מפורש חסרונות בניהול מפורש : ידע קוד מסורבל יעילות * אמינות הקוד
3
למה צריך מערכת אוטומטית לגילוי שגיאות בניהול הזכרון ? השגיאות עלולות לגרום לתוכנית להתרסק או לפעול באופן בלתי - צפוי. השגיאוות קשות לגילוי - מופיעות ונעלמות, מופיעות לעיתים רחוקות. תוצאות השגיאה אינן נראות לעין. קשה לקשר בין התוצאה הנראית לעין למקור השגיאה ולמצוא את מקור השגיאה.
4
איזה שגיאות זכרון נפוצות קיימות ? Memory Access Errors : חריגה ממערכים פנייה לזכרון דרך מחוון שגוי ( לא - מאותחל, מצביע לזכרון ששוחרר …) קריאה מזכרון שלא אותחל דליפות זכרון
5
דוגמא לחריגה מתחומי מערך:
6
דוגמא לקריאה מזכרון לא מאותחל :
7
דוגמא לקריאה מזכרון ששוחרר בטעות:
8
דוגמא לדליפת זכרון:
9
פתרון ע ” י Run-Time Debugging Source Code Executable Instrumentation Run-Time debugger BUG
11
Purify ממשק המשתמש Object Code Insertion טכניקות גילוי מגבלות
12
Error Warning Information
23
ניתן להשתמש במסננים כדי להקטין את מספר ההודעות דוגמא:
33
ניתן לשמור תוצאות של ריצות שונות ולהשוות אחר-כך דוגמא :
40
ניתן גם לגלות שגיאות ב -Object Code ללא קוד המקור : (Third Party Code) דוגמא:
46
Code Instrumentation Source Code Executable Object Code 1) Including Files 2) Source Code Insertion 3) Object Code Insertion 4) Executable Code Insertion למה לא לשנות את הקוד ישירות דרך המהדר ?
52
Object Code Insertion
53
קישור ספריית הבקרה של Purify
54
רשימת אורכי הבלוקים פקודות ונתונים בשפת סף אינדקסים לטבלת המחרוזות ומידע על הסמלים ( סוג, ערך ) פקודות חיצוניות (unresolved references) נתונים חיצוניים (unresolved references) שמות הסמלים
56
Old Object Code TableNew Object Code Table Forward Index TableForward Index Control Table Inter-Item Offset Table
57
ניטור המערכת בזמן ריצה : Memory Status Array Memory Monitoring Memory Access - byte-level detection - stack access efficiency
58
Detecting Array Bounds Violations: שימוש ב -red-zones לרישום זמן הקריאה (watch points)
63
Detecting Memory Leaks : שלב ראשון MARK : סריקה של המחסנית דרך כל המחוונים הפוטנציאליים. שלב שני SWEEP : מציאת כל הבלוקים היתומים. ( כל בלוק מסומן עם כתובת החזרה, לאפשר זיהוי. ) ה -Heap מתחלק לשלושה חלקים : - בלוקים שכמעט לבטח הינם זבל ( אין מחוונים אליהם ) - בלוקים שהם זבל פוטנציאלי ( אין מחוונים לתחילתם ) - בלוקים שאינם זבל ( יש מחוונים לתחילתם )
64
יתרונות OCI : 1 ) קלות השימוש 2) Instrumentation מהיר יחסית ולא מצריך קומפילציה 3 ) כדי לגלות שגיאות, אין צורך בקוד המקור. נעשה כיסוי מלא של הקוד כולל קוד ב -assembly וספריות חיצוניות. 4 ) מכיון שקוד שנכתב בשפות שונות דומה מאוד ברמת ה -object code ניתן להשתמש בטכניקה למגוון רב של שפות.
65
חסרונות ומגבלות : 1 ) הרבה מידע אובד בתהליך הקומפילציה, ולכן איכות הבדיקה מוגבלת ( סוגים ושמות של משתנים ). 2 ) גילוי שגיאות בזמן ריצה בלבד. 3 ) טכניקות הבדיקה היוריסטיות ואינן מדוייקות : - דליפות זכרון - חריגות מגבולות מערכים - dangling pointers - ב -Purify יש מגבלות לגבי זכרון המחסנית (Sub-Allocators*)
66
Working at Source Level Memdebug (Schmit Rene) : דוגמא הפונקציות הנבדקות : malloc, calloc, realloc ו - free. השיטה : ע ” י שימוש ב -PreProcessor יש לכלול ה- header ששמו memdebug.h, define MEMDEBUG# ולצרף מספר קבצים נוספים. בסוף הריצה נכתבים נתונים שונים ל -stdout.
67
טכניקות הגילוי : * חריגות ממערכים - ע ” י sentinels * memorization : ה -BlockDescriptor שומר מחוון לבלוק ה -CallSequence record שומר נתונים אחרים ( סטטיסטיים ) קריאה ל -malloc :
68
קריאה ל -free : העץ הנוסף משמש לאיסוף מידע על מחוונים בתוכנית באופן שמי.
69
Insure++ / ParaSoft Source Code Insertion * בדיקה ברמת הקוד לנכונות הקוד : (printf(“%d”, 1.0. * בסיס נתונים לכל הבלוקים - לכל בלוק שומרים את כתובת ההתחלה, גודלו והסוג שלו. * בסיס נתונים לכל המחוונים - מחוון אינו מורשה לגשת לבלוק שהוא אינו מצביע אליו. * איתור דליפות זיכרון ע ” י reference counting ברגע הדליפה. * גילוי שגיאות בזכרון המחסנית. * עבודה מוגבלת בתחום ה -object code ( כמו Sentinel). * Interfaces.
70
Mutation Testing * Subsumption of the coverage criteria : Statement coverage Decision coverage Condition coverage * The coupling effect * Effective test case = killed mutant * Adequate test sets
71
Creating the Test Set
72
The Mothra system mutation operators :
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.