Presentation is loading. Please wait.

Presentation is loading. Please wait.

סמינר בניהול זכרון דינמי Purify: Fast Detection of Memory Leaks and Access Errors רומן מנביץ ’

Similar presentations


Presentation on theme: "סמינר בניהול זכרון דינמי Purify: Fast Detection of Memory Leaks and Access Errors רומן מנביץ ’"— Presentation transcript:

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

10

11 Purify ממשק המשתמש Object Code Insertion טכניקות גילוי מגבלות

12 Error Warning Information

13

14

15

16

17

18

19

20

21

22

23 ניתן להשתמש במסננים כדי להקטין את מספר ההודעות דוגמא:

24

25

26

27

28

29

30

31

32

33 ניתן לשמור תוצאות של ריצות שונות ולהשוות אחר-כך דוגמא :

34

35

36

37

38

39

40 ניתן גם לגלות שגיאות ב -Object Code ללא קוד המקור : (Third Party Code) דוגמא:

41

42

43

44

45

46 Code Instrumentation Source Code Executable Object Code 1) Including Files 2) Source Code Insertion 3) Object Code Insertion 4) Executable Code Insertion למה לא לשנות את הקוד ישירות דרך המהדר ?

47

48

49

50

51

52 Object Code Insertion

53 קישור ספריית הבקרה של Purify

54 רשימת אורכי הבלוקים פקודות ונתונים בשפת סף אינדקסים לטבלת המחרוזות ומידע על הסמלים ( סוג, ערך ) פקודות חיצוניות (unresolved references) נתונים חיצוניים (unresolved references) שמות הסמלים

55

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)

59

60

61

62

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 :


Download ppt "סמינר בניהול זכרון דינמי Purify: Fast Detection of Memory Leaks and Access Errors רומן מנביץ ’"

Similar presentations


Ads by Google