3ieme TP du cours "Compilation"
en M1 d'informatique de l'Institut Galilée

Voici un code java buggué :

static void main() { try { assert 1 > 0; } catch (Exception e) { System.out.printf("test 1 echoue"); } finally { try { assert "toto".equals("toto"); } catch (Exception e) { System.out.printf("test 2 echoue"); } finally { try { assert 0 > 1; } catch (Exception e) { System.out.printf("test 3 echoue"); } finally { try { assert false; } catch (Exception e) { System.out.printf("test 4 echoue"); } finally { try { assert "toto" == "toto"; } catch (Exception e) { System.out.printf("test 5 echoue"); } finally { try { assert ((Object) "toto").equals("toto"); } catch (Exception e) { System.out.printf("test 6 echoue"); } finally { try { assert "test" instanceof String; } catch (Exception e) { System.out.printf("test 7 echoue"); } finally { try { assert 1/0 == 1/0; } catch (Exception e) { System.out.printf("test 8 echoue"); } finally { try {;} catch (Exception e) { System.out.printf("test 9 echoue"); } finally {;} } } } } } } } } }

Le but de ce TP est de trouver et d'expliquer le bug en détails

Remarque : En réalité, on devrait commencer par utiliser un outil de débugguage, mais (comme beaucoup de technologies spécifiques), vous verrez ça lorsque vous serez en entreprise, car il y a peu de théorie pour énormément de diversité (entre les logiciels et entre les versions).
De plus, pour le bug ci-dessus un débuggueur ne vous serait pas d'une grande utilité car il s'agit d'un bug rare et pointu lié au design du compilateur Java

Si vous pensez avoir compris exactement l'origine du bug, soumettez l'explication ci-dessous :

Sinon vous pouvez dérouler les indices.