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

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. שגיאה לא ברורה

שגיאה לא ברורה

מתוזמן נעוץ נעול הועבר תכנות
10 פוסטים 3 כותבים 206 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מנצפךמ מנותק
    מנצפךמ מנותק
    מנצפך
    כתב ב נערך לאחרונה על ידי מנצפך
    #1

    C#
    יש לי תוכנה שמנטרת יצירה של קבצים ע"י המחלקה FileSystemWatcher
    לאובייקט של המחלקה יש Event :
    WatcherCreated
    שמופעל בכל יצירה של קובץ

    זה הקוד שכתבתי בתוך האירוע הנ"ל

    private void Watcher_Created(object sender, FileSystemEventArgs e)
            {
                int i = 0;
                try
                {
                    if (!e.FullPath.EndsWith(".tmp", StringComparison.OrdinalIgnoreCase))
                        i = 1;
                        if (!Globals.UserFiles.Contains(e.FullPath))
                    {
                        i = 2;
                        Globals.UserFiles.Add(e.FullPath);
                        i = 3;
                        Logger.DebugLog("Created: " + e.FullPath);
                        i = 4;  
                    }
                }
                catch (Exception ex)
                {
            // LOG the error           
                }
            }
    

    אני לא מבין למה, אבל לפעמים אני מקבל שגיאה
    System.IndexOutOfRangeException
    עכשיו, ביומן אני כותב גם את השגיאה וגם את הערך של I, בשביל לדעת איפה השגיאה קרתה.
    לפעמים הערך של I הוא 0 (זה אומר שהשגיאה קרתה לפני שורה 7) ולפעמים 1 (כלומר שהשגיאה קרתה לפני שורה 10).

    מה יכול להיות הבעיה?
    אולי בגלל שיש שני טרדים שניגשים לליסט Globals.UserFiles ?

    עריכה: אני חושב שכאן יש התייחסות לבעיה דומה, אך ללא פתרון:
    https://stackoverflow.com/questions/34582537/arraylist-contains-throws-system-indexoutofrangeexception

    yossizY תגובה 1 תגובה אחרונה
    0
    • yossizY מחובר
      yossizY מחובר
      yossiz
      השיב למנצפך ב נערך לאחרונה על ידי yossiz
      #2

      @מנצפך מה ה-stack המלא של השגיאה?
      (אין צורך להביא את מה שקודם ל-Watcher_Created רק מה שמגיע אח"כ.)
      אם באמת יש שני טרידים שניגשים ל-Globals.userfiles אז צריך לטפל בזה על ידי שימוש ב-lock. (למרות שאני לא רואה שום ציור בו השגיאה יכולה לקרות כאשר i==0)

      📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

      תגובה 1 תגובה אחרונה
      1
      • מנצפךמ מנותק
        מנצפךמ מנותק
        מנצפך
        כתב ב נערך לאחרונה על ידי
        #3

        אכן כדבריך @yossiz זה כנראה בגלל הגישה משני טרדים.
        גם כאן:
        https://stackoverflow.com/questions/3794171/under-what-circumstance-system-collections-arraylist-add-throws-indexoutofrangee

        למעשה זה יישמע מוזר אבל בחיים לא זכור לי שהשתמשתי ב lock.
        אשמח לשמוע עליו עוד ומה צריך להביא בחשבון.

        תגובה 1 תגובה אחרונה
        0
        • מנצפךמ מנותק
          מנצפךמ מנותק
          מנצפך
          כתב ב נערך לאחרונה על ידי
          #4

          אין לי הסבר לזה אבל זה נראה שגם Lock לא עוזר.
          מה עוד אפשר לעשות?

          תגובה 1 תגובה אחרונה
          0
          • מנצפךמ מנותק
            מנצפךמ מנותק
            מנצפך
            כתב ב נערך לאחרונה על ידי
            #5

            אולי צריך לשים lock בכל מקום, ולא רק במקום שקיבלתי את השגיאה?
            אני מנסה שוב.

            yossizY תגובה 1 תגובה אחרונה
            1
            • yossizY מחובר
              yossizY מחובר
              yossiz
              השיב למנצפך ב נערך לאחרונה על ידי
              #6

              @מנצפך נראה לי שצריך lock בכל מקום שניגש לאובייקט.
              אולי יותר קל להשתמש בזה: https://docs.microsoft.com/en-us/dotnet/api/system.collections.arraylist.synchronized?view=netframework-4.8

              📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

              תגובה 1 תגובה אחרונה
              0
              • dovidD מנותק
                dovidD מנותק
                dovid ניהול
                כתב ב נערך לאחרונה על ידי dovid
                #7

                @מנצפך
                אתה חייב להביא את כל הexception (ויכול להיות inner exception) וגם את הfull stack, או לחילופין לתת סקירה מה אתה עושה בעצם.
                (בשביל לקבל את כל זה מחוץ לזמן דיבאג תעשה תיעוד לex.ToString() ותדאג שיהיה ליד התוכנה את הקובץ pdb.
                בלי זה אין תשובה לשאלה, ובמילים אחרות אין שום דבר בקוד שלך שמסביר את השגיאה.

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                בכל נושא אפשר ליצור קשר dovid@tchumim.com

                תגובה 1 תגובה אחרונה
                0
                • מנצפךמ מנותק
                  מנצפךמ מנותק
                  מנצפך
                  כתב ב נערך לאחרונה על ידי
                  #8

                  למעשה כבר הפסקתי לקבל את השגיאות הללו.
                  כנראה באמת צריך לשים lock בכל מקום.

                  @dovid לגבי הקובץ pdb יש לי איתו איזושהי בעיה- נושא לאשכול נפרד, אבל כאמור הבעיה הגדולה נפתרה.

                  dovidD תגובה 1 תגובה אחרונה
                  0
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    השיב למנצפך ב נערך לאחרונה על ידי
                    #9

                    מאוד יכול להיות שזה לא "פתרון", אלא השקטת הבעיה בכח, אבל זה אכן יכול להיות מספיק כל עוד לא יפריע לך.

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    תגובה 1 תגובה אחרונה
                    0
                    • מנצפךמ מנותק
                      מנצפךמ מנותק
                      מנצפך
                      כתב ב נערך לאחרונה על ידי
                      #10

                      למה זה לא פתרון?
                      זו בדיוק הבעיה. שיש גישה מכמה טרדים, וכפי הקישורים שצירפתי.

                      בסה"כ עשיתי שם פעולות סטנדרטיות על רשימות מקושרות (list) וקיבלתי שגיאות שלא היו אמורות להיות.

                      תגובה 1 תגובה אחרונה
                      1

                      בא תתחבר לדף היומי!
                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום