עבור לתוכן

הבדל בערכים של משתנים בין DEBUG מלא לחלקי(או ריצה)

Featured Replies

פורסם

קצת רקע ואחרי ההסבר.

אני כרגע בשלבים מאוד מתקדמים בפרוייקט שלי, שעוסק במשחק תוך שימוש בAI.

נתקלתי כרגע בבעיה מאוד מאוד מוזרה ומשונה(וכרגע נראה בלתי אפשרית).

אני עובר בDEBUG על הקוד שלי כדי לזהות בעיה עכשיו אני מגיע לשורה כלשהי שהיא הכי גדולה ומורכבת.

היא קוראת למלא פונקציות ומלא שטויות, עכשיו נגיד אני עובר עליה ב STEP OVER אחד מהמשתנים שאמורים להשתנות לא משתנים.

אבל אם אני עובר על השורה הזו ב STEP INTO ואז STEP OVER על מה שרשום בפונקציה המשתנה שאני עוקב אחריו כן משתנה.

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

מקווה שהבנתם ותוכלו לעזור. אם זה משנה אני עובד בJAVA.

פורסם

כנראה השורה מתבצעת לא לפי הסדר שאתה מצפה שהיא תתבצע (בגלל סדר פעולות, סוגריים וכד').

הצעה שלי - תפריד את השורה הזו לכמה שורות נפרדות, ותנסה לדבג ככה.

(אגב, רושמים debug)

פורסם

יכול להיות שבתוך הפונקציה יש משתנה באותו שם ואתה מסתכל על המשתנה ה"לא נכון"?

יכול להיות שאתה עושה watch שקורא לפונקציה שמשנה את ה- data שלך? (אני לא יודע אם זה בכלל אפשרי ב- java, בדלפי היה אפשר לעשות דבר כזה).

פורסם
  • מחבר

כנראה השורה מתבצעת לא לפי הסדר שאתה מצפה שהיא תתבצע (בגלל סדר פעולות, סוגריים וכד').

הצעה שלי - תפריד את השורה הזו לכמה שורות נפרדות, ותנסה לדבג ככה.

(אגב, רושמים debug)

אין מה להפריד.

מתבצעת בשורה זו יצירה של אובייקט חדש מאובייקט שמתקבל לאחר הקריאה לרפונקציה. משהו כזה:

x= new Game(m.ai());

למשל.. כאשר הפונקציה ai() מחזירה אובייקט מסוג GAME

יכול להיות שבתוך הפונקציה יש משתנה באותו שם ואתה מסתכל על המשתנה ה"לא נכון"?

יכול להיות שאתה עושה watch שקורא לפונקציה שמשנה את ה- data שלך? (אני לא יודע אם זה בכלל אפשרי ב- java, בדלפי היה אפשר לעשות דבר כזה).

אממ, לא נראה לי. וידאתי כמה וכמה פעמים. בגדול אני עושה WATCH רק על משתנים ולא על פונקציות. לא נראה לי שזה אפשרי בJAVA מה שאמרת..

פורסם

אפשרות נוספת -

יכול להיות שהתוכנית שלך תלויה בתזמון בין threads? (ובגלל שאתה מעכב את ה- thread הראשי ע"י step דברים קורים בסדר שונה)

פורסם

אין מה להפריד.

מתבצעת בשורה זו יצירה של אובייקט חדש מאובייקט שמתקבל לאחר הקריאה לרפונקציה. משהו כזה:

x= new Game(m.ai());

למשל.. כאשר הפונקציה ai() מחזירה אובייקט מסוג GAME

אז יש מה להפריד.

נסה ככה:

Game tmp = m.ai();
x = new Game(tmp);

פורסם
  • מחבר

אמממ בגדול נראה לי שפתרתי את זה, אבל זה בכלל לא קשור לקטע של הSTEP OVER/INTO

היה לי שימוש באחד מהמשתנים הגלובלים במקום שימוש בפרמטר ששלחתי. מוזר ביותר איך הדברים קשורים.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים