Bonjour,
J'utilise gcc (11.2.0-mingw-w64ucrt-9.0.0-r5), et j'essaie de debugger avec gdb un code Fortran avec CodeBlocks sous Windows 10.
GDB ne semble pas catcher / s'arrêter sur les SIGFPEs. Je n'ai pas souvenir d'un comportement similaire sur des installs plus anciennes (mais j'ai changé de boulot y a quelques mois et je ne peux plus checker).
Voici les options de compil que j'utilise pour le debug (je les liste toutes pour être exhaustif mais la plupart ne devraient rien avoir à voir...)
Voici ce que dit la console de CodeBlockslors de l'appel GDB (pour voir les arguments passés) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part -g -fcheck=all -fcheck=bounds -fbacktrace -Og -fno-automatic -fdefault-real-8 -fdefault-double-8 -fno-align-commons -Wline-truncation -Wsurprising -ffpe-trap=invalid,zero,overflow -march=native -fmax-errors=3
Voici maintenant le reste de la sortie console (je passe les infos sur la version etc.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Starting debugger: D:\Logiciels\GCC\bin\gdb.exe -nx -fullname -quiet -args D:/Work/Baro/bin/Debug/BARO.exe done
Je vois du "exit with code 02", qui d'après Google semble bien pouvoir correspondre à un souci type SIGFPE ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 [debug]>>>>>>cb_gdb: [debug]> set confirm off Debugger name and version: GNU gdb (GDB for MinGW-W64 x86_64, built by Brecht Sanders) 11.2 [debug]>>>>>>cb_gdb: [debug]> set width 0 [debug]>>>>>>cb_gdb: [debug]> set height 0 [debug]>>>>>>cb_gdb: [debug]> set breakpoint pending on [debug]>>>>>>cb_gdb: [debug]> set print asm-demangle on [debug]>>>>>>cb_gdb: [debug]> set unwindonsignal on [debug]>>>>>>cb_gdb: [debug]> set print elements 200 [debug]>>>>>>cb_gdb: [debug]> set new-console on [debug]>>>>>>cb_gdb: [debug]> set disassembly-flavor att [debug]>>>>>>cb_gdb: [debug]> catch throw [debug]Catchpoint 1 (throw) [debug]>>>>>>cb_gdb: [debug]> directory D:/Work/Baro/ [debug]Source directories searched: D:/Work/Baro;$cdir;$cwd [debug]>>>>>>cb_gdb: [debug]> py print(1+2) [debug]3 [debug]>>>>>>cb_gdb: [debug]> set $fortran_script_dir = 'D:\Logiciels\CodeBlocks\share\codeblocks/images/fortranproject/' [debug]>>>>>>cb_gdb: [debug]> source D:\Logiciels\CodeBlocks\share\codeblocks/images/fortranproject/gdb_fortran_extensions_v1.0.py [debug]>>>>>>cb_gdb: [debug]> run [debug]Starting program: D:\Work\Baro\bin\Debug\BARO.exe Child process PID: 21196 [debug][New Thread 21196.0x1408] [debug][New Thread 21196.0x11f4] [debug][New Thread 21196.0x51c4] [debug][Thread 21196.0x51c4 exited with code 2] [debug][Thread 21196.0x11f4 exited with code 2] [debug][Thread 21196.0x1408 exited with code 2] [debug][Inferior 1 (process 21196) exited with code 02] [debug]>>>>>>cb_gdb: [Inferior 1 (process 21196) exited with code 02] [debug]> quit Debugger finished with status 0
Mais derrière GDB / l'IDE n'ont jamais suspendu l'exécution en me mettant le curseur là où il y a un pb (comme je l'attendrais), il ne fait que terminer le truc et du coup ça me sert à rien.
Est-ce que je loupe quelque chose ? Y a-t-il par ailleurs des arguments particuliers à passer à gdb par exemple (mais j'ai vraiment pas souvenir de ça...) ? Autre chose ?
Edit : j'ai ssayé d'ajouter la commande "info signal SIGFPE" lors du lancement de gdb, voici le résultat : normal ou pas ?
J'ai aussi essayé tour à tour d'ajouter `handle SIGFPE stop nopass`, `handle SIGFPE nostop nopass`, et `handle SIGFPE nostop pass` (avant et après connexion à la cible).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 [debug]> info signal SIGFPE [debug]Signal Stop Print Pass to program Description [debug]SIGFPE Yes Yes Yes Arithmetic exception
gdb renvoie alors un statut en accord sur la console, mais ça change rien sur le comportement concret lors du debug...
Merci de votre aide.
Partager