Bonjour,
- Mon objectif est de débugger un programme C++ développé sous VisualStudio (2008), lancé à partir d'une ligne de commande.
- (En réalité, l'objectif est de lancer ce programme en batch à partir d'un programme maître utilisant la méthode CreateProcess. Le problème que je rencontre avec CreateProcess étant le même qu'en ligne de commande, il m'est plus facile de l'analyser en ligne de commande, cela m'évite d'avoir à recompiler le programme maître pour chaque essai)
- J'utilise la librairie wxWidget, dans laquelle l'objet wxApp contient les deux variables argc et argv du main. La méthode wxApp::OnInit joue le rôle du main en C. On récupère donc dans wxApp:argc et wxApp:argv, les paramètres inscrits dans la ligne de commande
La ligne de commande est la suivante :
>devenv.exe /debugexe toto.exe "param1" "param2"
L'exécution de cette ligne de commande entraîne bien le lancement de VisualStudio. Je charge ensuite le .sln à partir duquel j'ai compilé "toto.exe", et je peux placer un point d'arrêt dans le code source au niveau de wxApp::OnInit, et enfin, lancer l'exécution de "toto.exe" à l'aide de la touche F5.
Mon problème est que je ne récupère pas les paramètres "param1", "param2", dans la méthode wxApp::OnInit. argc y reste désespérément égal à 1, et argv[0] contient "toto.exe" (avec son chemin d'accès).
J'ai d'abord mis en cause la syntaxe que j'utilise dans la ligne de commande (et qui n'est pas précisée dans la doc Microsoft : https://msdn.microsoft.com/fr-fr/library/ms241274.aspx : "toute chaine qui suit le nom de l'exécutable est passée à ce fichier comme argument »).
J'ai essayé :
>devenv.exe /debugexe "toto.exe "param1" "param2""
>devenv.exe /debugexe "toto.exe param1 param2"
>devenv.exe /debugexe toto.exe "param1 param2"
etc. etc.
Si je mets un point d'arrêt dans wxApp::OnInit, et que je regarde le stack, je peux voir qu'une fonction appelante est une méthode de "WinMain", et qu'à ce niveau, argc est déjà égal à 1.
J'aimerais bien remonter l'analyse vers Visual Studio, et déterminer si :
- Le problème se situe au niveau du shell qui analyse la ligne de commande. Dans ce cas de figure, VisualStudio ne recevrait pas les paramètres, et ne pourrait donc pas les transmettre à wxApp, et ne serait donc pas responsable du problème.
- Le shell analyse correctement la ligne de commande, et envoie bien à VisualStudio les paramètres. Dans ce cas le problème se situerait dans VisualStudio, qui ne transmettrait pas ces paramètres à "toto.exe", au moment de son lancement.
Toute proposition de manip pour localiser le problème est la bienvenue,
Merci d'avance,
Zorglbug
Partager