Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3196 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Alléger un programme pour éviter de faire exploser la pile.

n°1401119
western
AJMM
Posté le 05-07-2006 à 14:23:10  profilanswer
 

Reprise du message précédent :
Je ne vois pas ce que tu peux de faire plus dans ce fichier (à part faire des write directe au lieu de sprintf et concatenation) mais tu risque de sérieusement dégradé les performances
 
question: Que fait le main? Combien de RAM utilise-t-il? Peux-tu l'optimiser? Tu peux utiliser des outils comme gprof et gcov et biensur gdb/ddd pour regarder la mémoire, les appels aux fonctions, etc.

mood
Publicité
Posté le 05-07-2006 à 14:23:10  profilanswer
 

n°1401134
Vilo5
Posté le 05-07-2006 à 14:44:44  profilanswer
 

western a écrit :

Je ne vois pas ce que tu peux de faire plus dans ce fichier (à part faire des write directe au lieu de sprintf et concatenation) mais tu risque de sérieusement dégradé les performances
 
question: Que fait le main? Combien de RAM utilise-t-il? Peux-tu l'optimiser? Tu peux utiliser des outils comme gprof et gcov et biensur gdb/ddd pour regarder la mémoire, les appels aux fonctions, etc.


 
Pour le main c'est assez compliqué à expliquer mais je ne peut pas le publier ici. En quelque sorte c'est un programme qui fait des lecture et ecriture  sur le port série afin de communiquer avec une carte électronique dans laquel il y a des macro et sur laquel se touve un ecran LCD et un lecteur d ecarte à puce.
 
Alors gprof/gcov je connaissais pas et pour gdb/ddd je connais. En fait moi je développe sous Kdevellop donc je peut débuguer avec gdb. Mais pour la cible je compile en ligne de commande avec mon compilateur croisé puis je partage mon binaire via NFS sur la cible pour le tester sur celle-ci. Par contre je n'arrive pas à débuguer sur la cible c'est ca le hic. J'ai essayer avec gdb server sur la cible et un gdb arm sur l'hote mais j'arrive pas a mettre d epoint d'arret et compagnie.
 
Par contre si quelque peut m'expliquer comment connaitre l'etat de ma pile sous KDevelop, je suis prenneur.

n°1401303
Vilo5
Posté le 05-07-2006 à 17:48:11  profilanswer
 

Bon alors j'ai refait une nouvelle version du fichier, ou j'ai cette fois enlever énormement de chose qui ne me server finalement pas dans ce code. Par exemple la possibilité d epasser de options verbose, cookies, referer,...  l'encoage 64 qui me servait que a un cas particulier.
 
J'ai également compacter les 3 fonctions post, postURL, postURLbyParts en une seul fonctions qui est post.
 
Le fichier est donc bcp plus light.
 
Nouveau fichier
 
Comme d'habitude ca marche sur la machine d edéveloppement mais pas sur ma cible.
 
Apparement ca plante au niveau du socket dans la fonction open_client_socket et plus précisement sur le gethostbyname.
 
Petitte précision la fonction gethostbyname, marche très bien dans d'autre programme.
 
Voilà je compte pour vous pour critiquer ce nouveau fichier et trouver l'erreur. ca serait le bonheur.
 
Aller merci d'avance !


Message édité par Vilo5 le 05-07-2006 à 17:53:54
n°1401743
western
AJMM
Posté le 06-07-2006 à 10:31:27  profilanswer
 

Nous avons besoin de savoir exactement le probleme et pas un

Citation :

Apparement


Tu disais que tu as réussi à faire marcher gdb.server sur la cible mais que tu ne pouvais pas mettre des points d'arrêts, etc. Peux-tu nous donner la trace gdb (le retour de la commande where par exemple) du problème?

n°1401788
Vilo5
Posté le 06-07-2006 à 11:23:19  profilanswer
 

western a écrit :

Nous avons besoin de savoir exactement le probleme et pas un

Citation :

Apparement


Tu disais que tu as réussi à faire marcher gdb.server sur la cible mais que tu ne pouvais pas mettre des points d'arrêts, etc. Peux-tu nous donner la trace gdb (le retour de la commande where par exemple) du problème?


 
 
Très bien alors voici la démarche sue j'emploi :
 
1: Je lance la compile avec mon compilateur croisé et j'obtiens 2 fichiers : appli et appli.gdb
2: Je met appli sur ma cible
3: je lance gdbserveur sur la cible  

gdbserver IP_hote:2100 /chemin/appli


4: je lance mon arm-elf-gdb sur la machine hote

arm-elf-gdb appli.gdb -command gdbinit_lxnet50


gdbinit_lxnet50 est un fichier texte qui indique les coordonées de la cible :

target extended-remote IP_cible:2100


5 : A partir de la liaison entre la cible et la machine hote (Pc de developpement) est effectuée et je peut lancer le programme avec run.
 
En résumé ca donne çà:
 
Côté cible :

gdbserver IP_hote:2100 /nfs/post
Process /nfs/post created; pid = 41
Remote debugging from host IP_hote
code at 0x296040 - 0x2b94a0, data at 0x2b94a4
Killing inferior
GDBserver restarting
Process /nfs/post created; pid = 42
GDBserver restarting
Process /nfs/post created; pid = 43
...
déroulement du programme
...


 
côté hote :

/usr/local/LxNETES-2.3/arm-elf/bin/arm-elf-gdb post.gdb -command /targets/LxNETES/project_digi_me_modif/bin/gdbinit_lxnet50
GNU gdb 5.2.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-elf"...
0x00296044 in _stext ()
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/olivier/appli/test2/src/post.gdb


 
Par contre je n'arrive pas mettre de point d'arrêt, donc pour l'instant gdb me sert à rien puisque j'arrive uniquement a lancer le prog avec la command run mais c'est comme si je le lancer sans gdb car je met pas d epoints d'arrêts.
 
J'ai essayer ca :

(gdb) where
#0  0x00296044 in _stext ()
#1  0x00000000 in ?? ()
(gdb) break
Breakpoint 1 at 0x296044
(gdb) where
#0  0x00296044 in _stext ()
#1  0x00000000 in ?? ()
(gdb) break post.c:30
No source file named post.c.
(gdb) where
#0  0x00296044 in _stext ()
#1  0x00000000 in ?? ()
(gdb)


Message édité par Vilo5 le 06-07-2006 à 11:25:54
n°1401824
western
AJMM
Posté le 06-07-2006 à 11:39:27  profilanswer
 

les lancements de gdbserver et de arm-gdb sont OK.
Tu dis que le programme plante a priori à l'appel 'gethostbyname'... quelle est l'erreur? à ce moment, quel est le retour de la commande where?

n°1401941
Vilo5
Posté le 06-07-2006 à 13:36:27  profilanswer
 

western a écrit :

les lancements de gdbserver et de arm-gdb sont OK.
Tu dis que le programme plante a priori à l'appel 'gethostbyname'... quelle est l'erreur? à ce moment, quel est le retour de la commande where?


 
Alors il y a pas d'erreur en fit le programme reste bloqué sur 'gethostbyname', comme si il était un boucle infinni, d'ailleurs la led d'emission de la carte reste allumé tant qu eje ne fé pas "ctrl+c". Je soupsonne mon socket de chercher indéfiniment. Je comprend pas.
 
Pour le where je vois pas trop ce qu etu veu dire. Comment j'utilise ca, je vois pas ? une fois que j'ai lancer le run il execute le prog sans s'arreter.

n°1402629
western
AJMM
Posté le 07-07-2006 à 11:10:51  profilanswer
 

blocage à gethostbyname signifie que le programme n'arrive pas resoudre le nom...
essaye d'utiliser wireshark (nouveau nom d'Ethereal) et de regarder ce que la carte envoi sur le réseau... Et jusqu'à où vont les packets.

n°1402677
Vilo5
Posté le 07-07-2006 à 11:40:53  profilanswer
 

western a écrit :

blocage à gethostbyname signifie que le programme n'arrive pas resoudre le nom...
essaye d'utiliser wireshark (nouveau nom d'Ethereal) et de regarder ce que la carte envoi sur le réseau... Et jusqu'à où vont les packets.


 
Ca y est j'ai régler le problème du gethostbyname, j'ai remplie moi même la structure puisque finalement j'ai les données nécessaire, IP, famille=AF_INET, longueur=4 et voilà ca larche. Mais merci tout de même.
 
Mon programme tourne enfin sur ma cible, mais n'est pas encore parfait, il faut maintenant que je le modifie de façon a ce qu'il respecte un peu mieux les règles de l'embarqué, de plus je doit en faire un daemon.  
 
par contre je suis toujours interessé pour faire fonctionner mon débugger si quelqu'un a une idée?

n°1402690
western
AJMM
Posté le 07-07-2006 à 11:48:38  profilanswer
 

je ne sais plus (la dernière fois que j'ai utilisé gdbserver, c'était il y a plus 2.5 ans sur une board SH4)... Essaye de jouer avec TCP et tty

mood
Publicité
Posté le 07-07-2006 à 11:48:38  profilanswer
 

n°1402702
western
AJMM
Posté le 07-07-2006 à 11:57:40  profilanswer
 

Vilo5 a écrit :

Ca y est j'ai régler le problème du gethostbyname, j'ai remplie moi même la structure puisque finalement j'ai les données nécessaire, IP, famille=AF_INET, longueur=4 et voilà ca larche.


Bonjour la portabilité!

n°1402794
Vilo5
Posté le 08-07-2006 à 10:14:20  profilanswer
 

western a écrit :

je ne sais plus (la dernière fois que j'ai utilisé gdbserver, c'était il y a plus 2.5 ans sur une board SH4)... Essaye de jouer avec TCP et tty


 
J'utilise gdbserver via TCP avec telnet, je n'ai pas tester sur le port série car il me faut une sonde supplémentaire qu'il ne m'a pas été fourni avec le kit de véveloppement. De toute façon je préfère prendre la main par TCP.
 

western a écrit :

Bonjour la portabilité!


 
C'est net, je suis d'accord !


Message édité par Vilo5 le 08-07-2006 à 10:15:03
n°1405427
Vilo5
Posté le 12-07-2006 à 12:05:40  profilanswer
 

Voici mon avancement :
 
Mon fichier final
 
Ce fichier est celui que j'ai inclus dans le daemon linux de mon module emvarqué.
 
Vous remarquerai j'ai mis des ifdef DEBUG à plusieurs endroit.
 
Lorsque je fais un define DEBUG cela veut dire que je n'utilise pas le programme en tant qu edaemon sur mon module embarqué, mais que je le lance en debug sur ma machine de développement. J'ai essayé avec ce define de gerer les différentes erreurs, afin qu'elle n'arette pas le programme mais plutôt pour qu'on retourne proprement dans la boucle infini du main.
 
Faites moi par de vos suggestions sur le fichier tel qu'il est maintenant. Si il y a encore du travail ou si cela parait bien.
 
Merci d'avance!

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
donner un numero de version automatique au programmePetit programme de débutant
besoin d'un programme pour exécuter un fichier[php] programme de droit avec un type=file
Faire un programme de teste de carte mémoireexecution programme python
Macro ProgramméInterface graphique programme en SDL ???
Lost connection to MySQL server during query -> Comment eviter cela ?Logiciel de tests d un programme
Plus de sujets relatifs à : Alléger un programme pour éviter de faire exploser la pile.


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)