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 :

debugger pour un programme appelant un autre programme


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 21
    Points : 9
    Points
    9
    Par défaut debugger pour un programme appelant un autre programme
    Bonjour,
    J'ai un programme (qui génère des nombres aléatoires) et un autre qui trie ces nombres par odre croissant.
    j'utilise un pipe pour passer mon tableau de nombre aléatoire à celui qui trie.
    J'ai un bug dans le programme de tri et je voudrais lancer le debugger. mais si je lance le debugger sur le 1er programme ca ne lance pas le 2nd et si je lance le debugger sur le 2nd, ca me fait une erreur car je n'ai pas l'entrée.

    Ma question : y a t'il un moyen de lancer le degugger sur le programme de trie en appelant quand meme le programme de generation de nombres?
    (je pourrais modifier le programme pour le faire stocker dans un fichier que je viendrais lire, mais c'est super lourd... y a t'il un moyen plus simple ?)


    Merci

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Bonjour et bienvenue,

    Quel système d'exploitation utilises-tu ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    Ubuntu
    (en fait j'utilise une machine distante https://c9.io/ mais qui utilises ubuntu)

  4. #4
    Membre habitué Avatar de Abacar94
    Homme Profil pro
    L2 Math-informatique
    Inscrit en
    Novembre 2015
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Niger

    Informations professionnelles :
    Activité : L2 Math-informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 103
    Points : 133
    Points
    133
    Par défaut
    Bonjour !
    Si les deux programme sont indépendant pour moi la solution la plus sure c'est de passer par le fichier

  5. #5
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    si ça peut aider, commande1 | commande2 on peut aussi l'écrire commande2 < <(commande1) ou commande2 <<< "$(commande1)", si on accepte que "le debugger" c'est gdb, la syntaxe (gdb) r < <(commande1) par exemple passe parfaitement.

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Citation Envoyé par ceimoi Voir le message
    Ma question : y a t'il un moyen de lancer le degugger sur le programme de trie en appelant quand meme le programme de generation de nombres?
    (je pourrais modifier le programme pour le faire stocker dans un fichier que je viendrais lire, mais c'est super lourd... y a t'il un moyen plus simple ?) Merci
    En fait, tu peux lancer le debugger sur le programme de ton choix. Il n'y a aucune difficulté en soi de ce côté-là.

    La vraie question, en revanche, est : comment lances-tu le « second » programme ? Plus précisément : s'agit-il réellement d'un exécutable distinct ou bien s'agit-il du même programme qui crée un processus fils avec fork() en héritant des descripteurs d'un tube anonyme créé à l'avance avec pipe() ? S'il s'agit de la première option, comment ton premier programme lance-t-il le second ? Avec system(), avec popen() ou avec fork()/execv() ? S'il s'agit de deux exécutables distincts, comment ouvres-tu le tube qu'ils partagent ? Est-ce que tu utilises un tube nommé sur le système de fichier (créé avec mknod p ou mkfifo) ?

    Dans tous les cas, tu peux lancer le debugger gdb de plusieurs façons : soit tu le lances en tapant « gdb » tout seul et en lançant le programme depuis sa ligne de commande avec « run tonprogramme », soit tu lances directement le programme depuis le shell avec « gdb tonprogramme », soit encore, tu peux demander au debugger de se rattacher à un processus en cours d'exécution, avec « gdb -p numerodupid ».

    Si tu as besoin de te rattacher à un processus existant, il faudra que tu prévois de lui faire faire une pause pour qu'il n'arrive pas à échéance avant d'avoir eu le temps de le monitorer.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Obsidian, je n'en suis pas encore à ce niveau sur les pipes (j'ai vu que c'était la suite les processus, les fork etc, mais pour l'instant j'utilise de façon très rudimentaire uniquement | pour les pipes).
    BufferBob, je n'ai pas bien compris / n'arrive pas bien a appliquer ce que tu dit.
    Si j'ai 2 programme prg_a et prg_b.
    prg_a a pour arguments 1 2
    prg_b a pour arguments prg_a et 3
    Comment je fais pour lancer ça par gdb ? (quand je lance gdb, je tape gdb prg_a par exemple et après je fais run 1 2 § mais je n'arrive pas à passer de l'un a l'autre)

  8. #8
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par ceimoi Voir le message
    prg_a a pour arguments 1 2
    prg_b a pour arguments prg_a et 3

    un truc comme ça prg_a 1 2 | prg_b 3 ?

    auquel cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ gdb prg_b
    (gdb) run 3 < <(prg_a 1 2)

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2016
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Merci.
    C'est bien ça que je voulais faire

Discussions similaires

  1. Appel d'autres programmes
    Par bennyben87 dans le forum Langage
    Réponses: 3
    Dernier message: 27/09/2010, 09h38
  2. appeler un autre programme à partir de son programme
    Par Invité dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 23/09/2009, 17h06
  3. Réponses: 23
    Dernier message: 30/06/2007, 18h14
  4. appeler un autre programme
    Par wakaa3lik dans le forum C
    Réponses: 13
    Dernier message: 19/02/2007, 01h47
  5. Réponses: 4
    Dernier message: 13/11/2006, 09h54

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