Toon posts:

[Java] assignment vind niet plaats in JDB

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik worstel nu al 2 dagen met een in mijn ogen zeer vreemde bug in Java programma ik heb de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void feedSignal(SignalSet s) {
        /*check wether we actually notice this state*/
        System.out.println("Passing safdsf");
        if(!(s.publicSignal==null&&s.privateSignal==null&&!s.canTakeAction&&s.actionTaken==null)){
            assert currenInformationSetTree.children.containsKey(s);
            InformationSetTree a = currenInformationSetTree.children.get(s);
            currenInformationSetTree =a;
            assert compare(currenInformationSetTree,a);
            if(compare(currenInformationSetTree,a)){
                try {
                    throw  new Exception();
                } catch (Exception e) {
                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                }

            }
            System.out.println("a = " + a);
            System.out.println("currenInformationSetTree = " + currenInformationSetTree);
            System.out.println("passing");
        }
    }


er staat aardig wat code omheen om er precies achter te komen wat er gebeurd, wat is nu het probleem:

Als ik: de code gewoon uitvoer of een debug punt vlak voor de functie call invoer en daarna op continue excecutie druk dan wordt de code gewoon uitgevoerd echter currenInformationSetTree is niet geupdate. Als ik de debugger stop binnen in de functie dan gaat het mis bij de assert compare... regel. Compare is gedefineerd als ==, dit heb ik gedaan omdat de compiler anders de assert wegoptimaliseert (deze moet immers altijd waar zijn). Als ik in mijn debug informatie kijk dan is inderdaad, currenInformationSetTree niet veranderd en dus ongelijk a.

Ik heb de equals methode niet overschreven, nog in de InformationSetTree class of 1 van zijn subklasse. Het enige wat mij nog rest is dat er een bug in de java implementatie zit, echter de functies zijn zo basis dat ik daar niet aan wil.

Verwijderd

Topicstarter
Na 3 dagen debugen, ben heb ik eindelijk het probleem gevonden:
de toString() van de klasse paste de state aan van de klasse :( en deze werd aangeroepen door de debugger.

Topic kan wat mij betreft gesloten worden.

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Verwijderd schreef op zondag 24 juni 2007 @ 15:10:
Na 3 dagen debugen, ben heb ik eindelijk het probleem gevonden:
de toString() van de klasse paste de state aan van de klasse :( en deze werd aangeroepen door de debugger.

Topic kan wat mij betreft gesloten worden.
Not yet wat mij betreft.

Nog ff een opmerking voor iedereen dat je als het ff kan immutable objecten moet nastreven. Dan is dit probleem ook de wereld uitgeholpen. Net zoals andere problemen m.b.t. bijvoorbeeld concurrency.

Fat Pizza's pizza, they are big and they are cheezy


Verwijderd

Topicstarter
of switch naar Haskell..... ;) immutable kon in dit geval niet.

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Methoden met ongedocumenteerde bij-effecten zijn sowieso al vervelend, maar een toString() methode die de instantie (of, god forbid, de klasse) niet invariant laat lijkt me ook wel een goede reden om de aanstichter te kielhalen }).

Wie trösten wir uns, die Mörder aller Mörder?