Parfois, quand je débugue avec gdb, j'ai besoin de call des fonctions qui prennent en paramètre des strings. Le problème c'est que comme chacun sait, une fonction qui prend une string ne peut pas être appelée simplement en passant une chaîne de caractères en argument.
void maFonction(const std::string& message)
call maFonction("la string de mon choix")
car ici "la string de mon choix" n'est pas une std::string mais une const char* et du coup ça ne fonctionne pas.
Il est néanmoins possible de créer des strings dans gdb mais le procédé est, à ma connaissance, laborieux.
Voici ma méthode pour construire une string avec gdb (n'hésitez pas à me dire si vous avez une meilleure technique) :
set $mystr = (std::string*)malloc(sizeof(std::string))
call $mystr->basic_string()
call $mystr->assign("la string de mon choix")
J'ai donc essayé de créer une macro gdb avec le scripting de gdb :
(gdb) define string
Type commands for definition of "string".
End with a line saying just "end".
>set $mystr = (std::string*)malloc(sizeof(std::string))
>call $mystr->basic_string()
>call $mystr->assign($arg0)
>end
mais ensuite à l'exécution il y a un problème avec malloc...
(gdb) string "test"
No symbol "malloc" in current context.
Mais je ne trouve pas beaucoup de tuto pour faire ça...
J'ai quand même fait une tentative avec ce code dans mon .gdbinit :
class String(gdb.Command):
"""Create a string."""
def __init__(self):
super(String, self).__init__("string", gdb.COMMAND_USER)
def invoke(self, arg, from_tty):
myStr = gdb.parse_and_eval('(std::string*)malloc(sizeof(std::string))')
String()
Mais même avec ce code qui fait pas grand chose j'ai déjà une erreur
(gdb) string "test"
Python Exception <class 'gdb.error'> No symbol "malloc" in current context.:
Error occurred in Python: No symbol "malloc" in current context.
Y aurait des experts C++ ici pour me conseiller des sources à consulter ?
J'aurais surtout besoin d'exemples... parce que là j'avance complètement à l'aveugle. J'ai quasiment pas trouvé de sources d'inspiration sur searchcode.com
Je suppose que ce que j'essaie de faire est possible puisque je peux créer une string manuellement dans gdb mais pour commencer à vraiment coder des macros gdb je ne sais pas trop comment m'y prendre...
Merci d'avance
- Edité par ThomasAirain 9 décembre 2023 à 1:16:24
En tant qu'expert C++... j'en ai aucune idée. Ce que tu veux faire me semble extrêmement compliqué pour pas grand chose.Le plus simple serait simplement de créer une fonction temporaire qui prend un char*. Mais j'ai l'impression que le mieux serait d'expliquer ton problème initial.
Je débugue des programmes en entreprise et quand je veux call des fonctions du code parfois je dois mettre en input une std::string. Du coup à chaque fois je répète ce code dans gdb :
set $mystr = (std::string*)malloc(sizeof(std::string))
call $mystr->basic_string()
call $mystr->assign("la string de mon choix")
Sur le moment je m'étais dit que je pourrais facilement créer une macro gdb pour automatiser cette technique que je répète encore et encore mais effectivement c'est peut-être beaucoup d'investissement pour pas grand chose.
J'ai passé plusieurs heures sur ce problème déjà.
Mais tu n'as jamais eu à débuguer avec des strings gbdrivers ? Je pense quand même que s'il y avait moyen de créer des strings facilement avec gdb ce serait une fonctionnalité intéressante.
- Edité par ThomasAirain 9 décembre 2023 à 17:31:48
c'est assez rare que j'execute des fonctions dans le débugeur. Pour ca qu'il serait intéressant que tu explique ton contexte d'utilisation, il y a peut être moyen de faire plus simple
(gdb) call maFonction(std::string("la string de mon choix"))
J'obtiens ce log d'erreur :
A syntax error in expression, near `"la string de mon choix"))'.
Définir une commande gdb pour créer une string ?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Discord NaN. Mon site.
Discord NaN. Mon site.