Ik worstel nu al 2 dagen met een in mijn ogen zeer vreemde bug in Java programma ik heb de volgende code:
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.
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.