Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Banana-Coding.com - Java Knuddels Emulator. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

1

Freitag, 16. September 2011, 12:52

HowTo Crack Knuddels-Jobs

Hier mal ein kleines Tutorial (Ja, hatte Langeweile :-P), wie man bei einem Debugging vorgeht. Bezug hierdrauf dient Knuddels, die extra eine "Aufgabe" unter Jobs online gestellt haben.

Wie geht man nun vor, wenn man etwas Debuggen möchte? Debugging ist ja nichts anderes als einer Fehleranalyse. Dementsprechend werden absichtlich Fehler Produziert um dann das Verhalten weiter zu behandeln und ggf. Korrekturen am Snippet vor zu nehmen.

Bei den Markierungen (Markierung 1 - 4) können also diverse Exceptions geworfen werden. Jetzt wäre nur noch die Frage, welche,...

Dies ist relativ einfach zu beantworten:
Man setze bei jeder Makierung (Oben und unten) ein error-printer (System.err.println();) um diese Ausgaben von den normalen zu unterscheiden, und setzt als Aushabe die Markierung selber.

Warum?

Ganz einfach. Wenn die Methode nun durch läuft, kann ganz genau nachvollzogen werden, ob die Markierung an dieser stelle Fehler zurückwirft, oder ob es weiter geht.

Wie sieht dann nun unser Script aus?

Java-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class Jobs {
	public static void main(String[] args) {
		f(0,999999999);
	}

	public static void f(int x, int y) {
		// Markierung 1
		System.err.println("// Markierung 1 - Start");
		String[] strings = new String[x];
		System.err.println("// Markierung 1 - Ende");

		for(int i = 0; i < y; ++i) {
			// Markierung 2
			System.err.println("// Markierung 2 - Start");
			strings[i] = Integer.toString(i);
			System.err.println("// Markierung 2 - Ende");
		}
	
		for(int i = 0; i < y; ++i) {
			// Markierung 3
			System.err.println("// Markierung 3 - Start");
			strings[i] = strings[i].concat(" Wert");
			System.err.println("// Markierung 3 - ende");
		}

		for(int i = 0; i < x; ++i) {
			// Markierung 4
			System.err.println("// Markierung 4 - Start");
			System.out.println(strings[i].toString());
			System.err.println("// Markierung 4 - Ende");
		}
	}
}


Und wie wird nun damit Debuggt?

Hierfür sehen wir uns die Methode f genauer an.

Die Methode läuft mehrere for-Schleifen ab, endpunkt hierfür sind die Integer-Werte aus den Parametern.

Wenn der Wert erreich wird, ist die Schleife beendet. Was kann also rein Logisch gesehen passieren? Genau. Die Schleife kann unendlich durchlaufen (Was hier aber nicht passieren kann, die Schleife wird durch Werte begrenzt). Was kann aber auch passieren? Genau - Nichts. Eigendlich Schwachsinn, denn Knuddels kat bei den Fragen überall "keine" als Antwort stehen. Dies müsste rein Theoretisch auch als "korrekt" angesehen werden.

Kommen wir nun zum Debuggen.
Was müssen wir nun machen, damit wir Fehler finden?

Wir nehmen uns die Methode f und setzen immer wieder unterschiedliche Parameter, um zu sehen, ob Exceptions geworfen werden - Und wenn ja, welche.

Was kann man nun testen?

Die größte Zahl die es gibt:

Java-Quelltext

1
2
3
4
5
f(0, 999999999);
// oder
f(999999999, 0);
// oder
f(999999999, 999999999);


Verhalten bei Nullen:

Java-Quelltext

1
f(0, 0);


Verhalten bei negativen Zahlen ins Positive:

Java-Quelltext

1
2
3
f(-1, 0);
// oder
f(0, 1);


Verhalten bei negativen Zahlen:

Java-Quelltext

1
f(-1, -1);


Verhalten bei positiven Zahlen:

Java-Quelltext

1
f(1, 1);


Verhalten bei positiven Zahlen ins Negative:

Java-Quelltext

1
2
3
f(1, -1);
// oder
f(1, 0);


Und damit sollte der Grundbaustein gelegt sein.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Blizzard« (19. Februar 2013, 12:27)


2

Montag, 19. September 2011, 23:12

MyImg erlaubt kein Hotlinking, deswegen hab ichs woanders geuppt:

Kein Support per PN. Nur im Forum!

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Blizzard