IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème boucle infinie


Sujet :

C

  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    mai 2011
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : mai 2011
    Messages : 225
    Points : 136
    Points
    136
    Par défaut Problème boucle infinie
    Bonjour,

    j'ai écris un programme qui, lors d'une boucle infinie, filme des vidéos de trois minutes.

    Cela marche bien pendant presque une journée entière, puis le programme bloque sans
    que je sache pourquoi.

    Quand je fais ps -aux | more la tache est toujours présente en mode sleep, mais bloquée à une certaine heure.

    J'utilise la commande raspivid pour la vidéo.

    Est-ce un problème mmal ou autre ?

    Comment savoir ?

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    8 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 8 965
    Points : 24 571
    Points
    24 571
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Ca ressemble à une saturation mémoire.
    Citation Envoyé par frederic13870 Voir le message
    Comment savoir ?
    Du printf() dans la boucle. Regarder le retour des fonctions systèmes, la valeur de errno. Peut-être rajouter du sleep pour laisser au bouzin le temps de se reposer...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  3. #3
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    mai 2011
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : mai 2011
    Messages : 225
    Points : 136
    Points
    136
    Par défaut Merci
    Peut-être puis-je paramétrer la mémoire avec raspi-config et faire un essai ?

    Je ne fais pas de malloc, mais utilise un tableau de grande taille ...

    Le problème est que je lance le programme en tache de fond avec une commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nohup ./camera -i 10 -d 5 &
    i étant le nombre d'images par seconde et d la durée d'enregistrement en jours.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    2 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : février 2008
    Messages : 2 173
    Points : 4 286
    Points
    4 286
    Billets dans le blog
    4
    Par défaut
    Bonjour.

    Je rejoins Sve@r sur un problème de dépassement de tampon.

    Même si tu n'alloues pas de mémoire dans le tas, la pile a une taille limitée. Elle est réglable de mon souvenir dans le système d'exploitation.

    Plutôt que de lancer ton application "à l'infini" pourquoi ne pas la lancer avec crontab. Tu choisis l'intervalle de temps pour chaque lancement et une exécution enregistre 3 minutes.
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    8 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 8 965
    Points : 24 571
    Points
    24 571
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par frederic13870 Voir le message
    Je ne fais pas de malloc, mais utilise un tableau de grande taille ...
    grande taille ça veut tout dire et rien dire à la fois. Mais malloc pourrait avoir une utilité dans la mesure où lui il bosse dans le tas et non dans la pile (plus réduite). Ceci dit, dans la mesure où tu ne fais pas de VLA (j'espère) et que ton tableau est défini hors de la boucle, ça ne devrait pas influer (et même s'il est défini dans la boucle, chaque itération terminée libère la mémoire)

    Citation Envoyé par frederic13870 Voir le message
    Le problème est que je lance le programme en tache de fond avec une commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nohup ./camera -i 10 -d 5 &
    T'as une sortie dans "nohup.out". Si tu rajoutes des témoins dans la boucle tu auras un résultat utilisable.
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 695
    Points : 30 553
    Points
    30 553
    Billets dans le blog
    4
    Par défaut
    Et le code est ?
    Ce serait pas la première fois que je vois un truc boucler sur un ensemble et exploser quand on ajoute des choses dedans.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    mai 2011
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : mai 2011
    Messages : 225
    Points : 136
    Points
    136
    Par défaut Module ou noyau ?
    J'aimerai être sur qu'un module du noyau, ou le noyau lui-même, ou bien le matériel n'est pas en cause.

    Pour cela, je fait des Et je trouve régulièrement des erreurs.

    Voulez-vous que je vous les montre ?


  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    25 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 25 754
    Points : 201 004
    Points
    201 004
    Billets dans le blog
    82
    Par défaut
    Les messages renvoyés par dmesg comprennent les erreurs de segmentation des programmes en espace utilisateur, surement pour signaler à l'administrateur qu'un utilisateur/programme est entrain de faire des trucs crades, mettant en question la sécurité.
    Mais peut être il y a des messages intéressants, je dis pas.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    mai 2011
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : mai 2011
    Messages : 225
    Points : 136
    Points
    136
    Par défaut Merci à tous ! Mais
    Je crois que le mieux est de refaire le programme de A à Z.

    Les outils de débuggage à l'execution ne sont pas légion pour le gcc.

    Quand ce genre de problèmes arrive, je crois que le mieux est de tout re-écrire et tester au fur et à mesure.

    Ah , au fait ! Savez-vous dans quel répertoire système sont situés les includes en C ?

    Je me souhaite bon courage !

  10. #10
    Membre averti
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    juillet 2020
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : juillet 2020
    Messages : 125
    Points : 370
    Points
    370
    Par défaut
    Citation Envoyé par frederic13870 Voir le message
    Je crois que le mieux est de refaire le programme de A à Z.
    Bonjour,
    je ne sais pas …

    Citation Envoyé par frederic13870 Voir le message
    Les outils de débuggage à l'execution ne sont pas légion pour le gcc.
    Alors gcc permet d'embarquer des informations de debug dans les fichiers produits. Il y a plusieurs formats (gdb, stabs, COFF, XCOFF, ou DWARF) dans différentes versions. Ensuite il existe plusieurs debugers utilisables, ces debugers sont indépendants de gcc. Le plus connu est certainement gdb qui par défaut utilise une interface REPL, mais il existe de nombreux front-ends (DDD, nemiver …) ou plugin (VSCode, VS, Anjuta, Emacs, vim, …) et il est possible de faire du debug distant.
    Ensuite c'est plus une question de disponibilité sur les plateformes utilisées.

    Mais bon, il n'y a pas que les debuger pas à pas … il y a aussi le memory profilers comme valgrind pour les problèmes de gestion de mémoire par exemple.

    Citation Envoyé par frederic13870 Voir le message
    Quand ce genre de problèmes arrive, je crois que le mieux est de tout re-écrire et tester au fur et à mesure.
    C'est clair que tester pendant le dev c'est bien lol.
    Tout réécrire ? ça dépend de l'état du projet.
    Mais cela n'évitera jamais la phase de debug … avec gdb, valgrind, ou même de simples printf.

    Citation Envoyé par frederic13870 Voir le message
    Ah , au fait ! Savez-vous dans quel répertoire système sont situés les includes en C ?

    Je me souhaite bon courage !
    Il faut demander à ton compilo où il va les chercher
    Comme tu peux avoir plusieurs configurations … tu peux exécuter la commande gcc -xc -E -v /dev/null -o /dev/null qui te donneras une liste comme (extrait) :
    Citation Envoyé par gcc -xc -E -v /dev/null -o /dev/null
    #include "..." search starts here:
    #include <...> search starts here:
    /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include
    /usr/local/include
    /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include-fixed
    /usr/include
    End of search list.
    Bon courage ????
    Surtout bon apprentissage !!!

  11. #11
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    mai 2011
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : mai 2011
    Messages : 225
    Points : 136
    Points
    136
    Par défaut C'était bien ça
    J'avais un problème de dépassement dans le code C.
    Ach, ces chiennes de caractères ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème boucle infinie bloquer comment bloquer outlook
    Par traersa dans le forum VBA Outlook
    Réponses: 2
    Dernier message: 09/03/2018, 11h03
  2. Problème boucle infinie
    Par Hafa10 dans le forum Langage
    Réponses: 9
    Dernier message: 16/05/2015, 19h01
  3. [XL-2007] Problème boucle infinie
    Par s.byczek dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/02/2012, 14h49
  4. [XL-2010] Problème boucle infini
    Par Zaelos dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/01/2012, 10h49
  5. problème boucle infinie
    Par hanou88 dans le forum C
    Réponses: 7
    Dernier message: 05/11/2010, 01h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo