שגיאה לא ברורה
-
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 -
@מנצפך מה ה-stack המלא של השגיאה?
(אין צורך להביא את מה שקודם ל-Watcher_Created
רק מה שמגיע אח"כ.)
אם באמת יש שני טרידים שניגשים ל-Globals.userfiles
אז צריך לטפל בזה על ידי שימוש ב-lock
. (למרות שאני לא רואה שום ציור בו השגיאה יכולה לקרות כאשרi==0
) -
אכן כדבריך @yossiz זה כנראה בגלל הגישה משני טרדים.
גם כאן:
https://stackoverflow.com/questions/3794171/under-what-circumstance-system-collections-arraylist-add-throws-indexoutofrangeeלמעשה זה יישמע מוזר אבל בחיים לא זכור לי שהשתמשתי ב lock.
אשמח לשמוע עליו עוד ומה צריך להביא בחשבון. -
@מנצפך
אתה חייב להביא את כל הexception (ויכול להיות inner exception) וגם את הfull stack, או לחילופין לתת סקירה מה אתה עושה בעצם.
(בשביל לקבל את כל זה מחוץ לזמן דיבאג תעשה תיעוד לex.ToString()
ותדאג שיהיה ליד התוכנה את הקובץ pdb.
בלי זה אין תשובה לשאלה, ובמילים אחרות אין שום דבר בקוד שלך שמסביר את השגיאה.