# Debuggen liefert anderes Ergebnis als Ausführen



## anand (5. Sep 2009)

Hey leute

ich schreibe mein problem deshalb in den bereich web tier weil ich myfaces verwende und ich nicht weiß ob mein problem daran liegen kann. oder ob netbeans einen bug hat


Ich hab einen ganz komischen Fehler:

Ich entwickle in Netbeans und deploye mein projekt mit tomcat. wenn ich das Projekt normal starte bekomme ich einen indexoutofbound fehler, wenn ich das ganze debugge dann funktioniert es wenn ich in die problem funktion reinspringe, überspringe ich die funktion kommt wieder der fehler... bin recht ratlos.

mein code:


```
....
oDot = dcon.executeDLV(graph);  //PROBLEMATISCHER FUNKTIONSAUFRUF
oGraphml = gcon.createOutputGRAPHMLs(oDot, graph);
....
```

Die Funktion im detail
DIR ist eine konstante

```
public String[] executeDLV(Graph graph){
        Program dlvprog = new Program();
        DlvHandler dlvhandler = new DlvHandler(DIR + "dlv.mingw.exe");

        dlvprog.addString(graph.getInputDOT());
        dlvprog.addProgramFile(getProgPath(new Integer(graph.getProg())));

        dlvhandler.setProgram(dlvprog);
        dlvhandler.setPFilter(new String[]{"in"});

        try {
            dlvhandler.run();
            String[] output = new String[dlvhandler.getSize()];
            int i=0;

            while (dlvhandler.hasMoreModels()) {
                Model mod = dlvhandler.nextModel();

                output[i] = mod.toString();

                i++;
            }

            return output;
        } catch (DLVInvocationException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return null;
    }
```

kann es sein dass der degubber manche variablen anderst instanziert oder warum kann das sonst sein?

nochmal wenn ich diese fun ktion mit dem debugger durchlaufe, dann funktioniert alles, wenn ich diese funktion mit dem debugger überspringe oder das programm normal ausführe wirft die funktion einen fehler

ich hoffe ihr könnt mir helfen!

lg
anand


----------



## Landei (5. Sep 2009)

Kann das mit Multithreading zusammenhängen? Ist dlvhandler eventuell von Thread abgeleitet? Dann solltest du statt dlvhandler.run() mal dlvhandler.start() ausprobieren. 

Falls nicht, versuche mal das hier:

```
try {
            dlvhandler.run();
            List<String> output = new ArrayList<String>();
            while (dlvhandler.hasMoreModels()) {
                Model mod = dlvhandler.nextModel();
                output.add(mod.toString());
            }
 
            return output.toArray(new String[]{});
        } catch (DLVInvocationException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
```


----------



## anand (6. Sep 2009)

hey landei

wenn ich deinen codteil mit meinem austausche, dann funktioniert alles...

warum? gleiche funktion nur anderst geschrieben
das verstehe ich nicht

kannst du mir das erklären?

danke danke und lg



-------- ZUSATZ --------
ICh denke ich hab das problem ausfindig gemacht

ich verwende in meiner variante die funktion

```
dvlhandler.GETSIZE();
```

In der beschreibung der funktion steht dass man bei verwendung dieser sehr vorsichtig sein soll
da ich bei der arraylist die funktion nicht brache geht nun alles

danke für den lösungsansatz!


----------

