1091 | | - Exécutez le programme en lançant le simulateur avec `make debug`.\\Cela exécute le programme pour une courte durée et cela produit deux fichiers `trace0.s` et `label0.s`.\\`trace0.s` contient la trace des instructions assembleur exécutées par le processeur. \\Ouvrez `trace.0.s` et repérez ce qui est cité ici |
1092 | | - On voit la séquence des instructions exécutées |
1093 | | - La première colonne nous informe que les adresses lues sont dans l'espace Kernel |
1094 | | - La seconde colonne sont les numéros de cycles |
1095 | | - La troisième sont les adresses |
1096 | | - La quatrième le code binaire des instructions |
1097 | | - Le reste de la ligne contient l'instruction désassemblée |
1098 | | - Lorsque les adresses ont un nom, c'est à dire qu'une étiquette leur a été attribuée, celle-ci est indiquée. |
1099 | | |
1100 | | `label0.s` contient la séquence des appels de fonctions de l'exécutions. C'est en fait un extrait de la trace.\\Ouvrez le fichier `label0.s` et interprétez ce que vous voyez. |
| 1091 | - Exécutez le programme en lançant le simulateur avec `make debug`.\\Cela exécute le programme pour une courte durée et cela produit deux fichiers `trace0.s` et `label0.s`.\\ \\ |
| 1092 | - `trace0.s` contient la trace des instructions assembleur exécutées par le processeur. \\Ouvrez `trace.0.s` et repérez ce qui est cité ici |
| 1093 | - On voit la séquence des instructions exécutées |
| 1094 | - La première colonne nous informe que les adresses lues sont dans l'espace Kernel |
| 1095 | - La seconde colonne sont les numéros de cycles |
| 1096 | - La troisième sont les adresses des instructions |
| 1097 | - La quatrième le code binaire des instructions |
| 1098 | - Le reste de la ligne contient l'instruction désassemblée |
| 1099 | - Lorsque les adresses ont un nom, c'est à dire qu'une étiquette leur a été attribuée, celle-ci est indiquée. |
1118 | | }}} |
| 1117 | K 60: <puts> ------------------------------------------------------- ./kinit.c |
| 1118 | }}} |
| 1119 | '' |
| 1120 | }}} |
| 1121 | - `label0.s` contient la séquence des appels de fonctions de l'exécutions. C'est en fait un extrait de la trace.\\Ouvrez le fichier `label0.s` et interprétez ce que vous voyez. |
| 1122 | {{{#!protected ------------------------------------------------------------------------------------ |
| 1123 | '' |
| 1124 | {{{#!asm |
| 1125 | K 12: <boot> ------------------------------------------------------- ./hcpua.S |
| 1126 | K 37: <kinit> ------------------------------------------------------ ./kinit.c |
| 1127 | K 60: <puts> ------------------------------------------------------- ./kinit.c |
| 1128 | }}} |
| 1129 | '' |
| 1130 | }}} |
| 1131 | - Si vous ouvrez le Makefile, vous pouvez voir que le mode d'optimisation du compilateur est `O1` (regardez la définition de `CFLAGS`). Si vous demandez une optimisation en `02` ou `03`, et que vous exécutez à nouveau votre programme en mode debug, qu'observez-vous dans la trace d'exécution ? |
| 1132 | {{{#!protected ------------------------------------------------------------------------------------ |
| 1133 | '' |
| 1134 | - La fonction `puts` a disparue, elle a été ''inlinée'' par le compilateur ! Par conséquent, parfois pour voir le debug, il faut demander au compilateur de ne pas optimiser, mais parfois aussi en faisant ça, le bug disparait et là, on pleure... |