Après windows pour les nuls, voici PB pour les bons (ou presque).

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.
  • Index
  •  » Migration
  •  » Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

#1 05-03-2013 12:39:18

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Suite à la migration des sources de mon application PB5 vers PB11.5.1 Build 4843 en environnement Windows 7, il arrive de manière semble-t-il aléatoire que le fait de quitter l’application en mode « Run » fasse planter PB.
J’écris aléatoire car un même scénario ne fera pas forcément planter PB à la sortie de l’application.

Une fois que PB a planté de cette façon puis est relancé, certaines fenêtres ne peuvent plus être modifiées ou re-générées sans faire également planter PB.
Afin de débloquer la situation, il m’est alors nécessaire de « Full Build » le workspace ou la target.

Pensant qu’il s’agissait peut-être d’une mauvaise gestion de l’allocation mémoire, j’ai ajouté dans les évènements « Close » de mes 3 fenêtres principales (les seules à se lancer lors de mes tests) ainsi que de l’objet application un « GarbageCollect() » mais le dysfonctionnement persiste.

J’ai ensuite voulu m’assurer du plus important, c’est-à-dire que se passe-t-il avec l’application compilée. Aucun message Windows ne m’indique le moindre problème à la sortie de l’application, tout va bien de ce côté.

Quelqu’un aurait-il une idée?
Y aurait un moyen de monitorer le dysfonctionnement du mode run afin de cibler l’origine du problème?

Merci d'avance.

Hors ligne

 

#2 05-03-2013 13:22:43

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Bonjour,
Ton appli est fermée comment ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 05-03-2013 13:27:26

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Bonjour Erasorz

Je la ferme par l'icone de menu qui fait faire Close(This) à la MDI principale

Hors ligne

 

#4 05-03-2013 13:35:18

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Tu as du code dans le Close de l'objet Application ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#5 05-03-2013 13:41:28

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Oui

Quelques SetProfileString, 2 destroy de classe (une de ClientSideContext et une relié à une DLL servant aux notifications MOS de l'appli), quelques appels à une fonction de traçage dans la log, une GarbageCollect() que j'ai laissé pour l'instant et un StandardClose().

Le StandardClose() fait des SetProfileString et 5 If IsValid(Object) Then Destroy Object

Dernière modification par John77 (05-03-2013 13:45:13)

Hors ligne

 

#6 05-03-2013 13:43:45

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

StandardClose : kesako ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#7 05-03-2013 13:47:12

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Oui, en faisant Shift+F1 dessus me suis rendu compte que c'était une user function, dsl.

Le StandardClose() fait des SetProfileString et 5 If IsValid(Object) Then Destroy Object, les Objects étant reliés à des DLL

Hors ligne

 

#8 05-03-2013 13:50:22

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Y'a un Return dans ton close ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#9 05-03-2013 13:53:39

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Non, pas de Return explicite, la valeur de retour étant "none"

Hors ligne

 

#10 05-03-2013 13:55:51

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Il faudrait peut-être commenter et dé-commenter au fur et à mesure ce qui se trouve dans ton close pour identifier la cause du plantage. (il y a peut-être des choses dans les destructor de certains objets)


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#11 05-03-2013 15:50:41

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

J'ai suivi cette piste toute l'après-midi mais il n'y a rien dans le destructor de la plupart des objets et le fait de les commenter me fait planter plus systématiquement.
Pour 2 d'entres eux, il y a un LoadLibraryA dans le constructor et un FreeLibrary dans le destructor (pour DEV.DLL et NOTIFICATION.DLL)

Les FreeLibrary pourraient-ils être la cause de mes problèmes?

Hors ligne

 

#12 06-03-2013 09:06:33

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Alors, je ne comprends pas bien pourquoi, n'étant pas un spécialiste des objets d'encapsulation de DLL, mais en bloquant les 2 FreeLibrary, c'est beaucoup plus stable oO
Et si ça plante, je récupère la main sur PB quelques secondes avant le crash.

C'est bizarre car ça marchait nickel en PB5 que ce soit en environnement XP ou 7

Si quelqu'un a une idée là-dessus, je suis preneur.

Hors ligne

 

#13 06-03-2013 09:34:43

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Juste pour info, j'ai trouvé ça:

Préconisation du support Microsoft sur l'utilisation de Freelibrary

Peut-être qu'en remplaçant les LoadLibraryA par des LoadlibraryEx avec l'argument préconisé, tu n'auras plus le problème?


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#14 06-03-2013 10:46:00

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Bonjour Foon et merci pour ta réponse.

J'ai dupliqué mon projet pour tester ta proposition.

J'ai trouvé la définition de LoadLibraryEx:

Code: PB

FUNCTION ulong LoadLibraryEx(ref string lpLibFileName, ulong hFile, ulong dwFlags) LIBRARY "KERNEL32.DLL" ALIAS FOR "LoadLibraryExA;Ansi"


J'ai également trouvé un exemple d'utilisation pour les paramètres puisque LoadLibrary n'en avait qu'un:

Code: PB

ll_handle = LoadLibraryEx(ls_file,0,LOAD_LIBRARY_AS_DATAFILE)


Par contre, je bloque pour la valeur de LOAD_LIBRARY_AS_DATAFILE et bien entendu, si je l'utilise tel quel, PB me dit que la variable n'est pas définie

Hors ligne

 

#15 06-03-2013 11:00:33

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#16 06-03-2013 12:48:04

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Bonjour,

Des crash intermittents en utilisant des fonctions de l'API externe, je pense que ton problème est tout simplement celui-la :
http://pbadonf.fr/forum/viewtopic.php?pid=29272

Hors ligne

 

#17 06-03-2013 13:31:11

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

buck a écrit:

Bonjour,

Des crash intermittents en utilisant des fonctions de l'API externe, je pense que ton problème est tout simplement celui-la :
http://pbadonf.fr/forum/viewtopic.php?pid=29272

D'un autre côté, LoadLibrary n'a pas besoin de buffer, juste du nom de la dll...


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#18 06-03-2013 14:24:11

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Merci à tous pour vos interventions.

Après plusieurs dizaines de tests, LoadLibraryEx semble avoir les mêmes effets que lorsque j'avais désactivé les 2 FreeLibrary -> PB crash bien moins souvent mais ça arrive encore. Et quand ça arrive, PB ne me rend plus la main quelques secondes avant de planter.
Quoi qu'il en soit, ça reste satisfaisant par rapport à ma situation initiale.

C'est quand même dommage qu'il n'y ait rien pour monitorer ces crashs et pouvoir comprendre ce qu'il se passe vraiment.

Hors ligne

 

#19 06-03-2013 14:56:25

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

John77 a écrit:

C'est quand même dommage qu'il n'y ait rien pour monitorer ces crashs et pouvoir comprendre ce qu'il se passe vraiment.

Ben si, il y a le debugger si l'assembleur ne te fait pas peur . Si tu as un Visual Studio installé sur le poste où ça plante, lorsqu'un message "L'application a cessé de fonctionner..." apparaît, la fenêtre a un bouton supplémentaire qui permet de "débugger" l'application fautive (en fait de débugger, ça permet de charger l'appli dans le debugger et se placer sur la ligne fautive).

Si tu n'as pas visual studio, OllyDbg peut le remplacer tout aussi bien pour la seule partie trace / debug. Comme tu n'as pas le code source de PB sous la main (si tu l'as tu m'intéresses ) tu ne pourras voir que des instruction en assembleur mais tu peux voir à quelle adresse ça plante, pour quel motif (access violation est classique, on cherche à lire / écrire à une adresse impossible), et l'affichage de la pile d'appel (partie en bas / droite de la fenêtre "cpu" reste intéressante car on peut parfois voir les appels qui ont précédé.

Dans cet exemple, ce sont les lignes en rouge qui sont intéressantes : on y voit des appels de fonctions successifs, et c'est lors d'un appel à WideCharToMultiByte que le plantage se passe (pendant ue conversion de texte unicode -> ansi. Dans ce cas là, Olly me montre même les paramètres d'appel de la fonction.
http://i.imgur.com/5mibjpu.png

Un Dependency Walker en mode trace peut parfois aider (si c'est l'appel à une fonction de l'api pour la gestion des dll) mais ce n'est pas le meilleur outil.


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#20 06-03-2013 15:13:51

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Au début, pensant avoir un problème similaire à http://pbadonf.fr/forum/viewtopic.php?pid=16513#p16513 j'avais donc suivi les instructions de Erazorz sur le thread pour virer le debugger de VStudio. Je viens donc de le remettre avec regedit pour voir si quelque chose me saute aux yeux, Seki.

Ya plus qu'à refaire planter PB ... mais c'est plus difficile qu'avant ^^

Hors ligne

 

#21 06-03-2013 15:40:37

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Bon, j'ai réussis mais je reste perplexe devant le résultat

http://img15.hostingpics.net/pics/132595CrashVStudio.png

Unhandled exception at 0x10bf6145 in PB115.EXE: 0xC0000005: Access violation reading location 0x00000000.

Arf! pas vraiment parlant le truc et je ne connais pas bien VStudio

Hors ligne

 

#22 06-03-2013 15:47:47

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

John77 a écrit:

Bon, j'ai réussis mais je reste perplexe devant le résultat

[...]
Unhandled exception at 0x10bf6145 in PB115.EXE: 0xC0000005: Access violation reading location 0x00000000.

Arf! pas vraiment parlant le truc et je ne connais pas bien VStudio

Access Violation = le programme tente de lire (ou d'écrire) à une adresse incorrecte (parce qu'il n'y a rien à cette adresse, ou que l'adresse est nulle). Un cas classique par exemple de pointeur incorrect.

Essaie de regarder (en bas de ton écran) "call stack" pour savoir qui c'est qui merde au moment du problème (l'exception peut avoir lieu dans une dll système, parce que PB lui a donné une mauvaise valeur), et si tu peux retrouver le module non-système fautif (l'IDE PB, l'application PB compilée, ou une des dll qui lui sont associées)


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#23 06-03-2013 15:53:50

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Il me donne le même nom écrit en haut de ma précédente image à côté de Stack Frame: PBSHR115.DLL

http://img15.hostingpics.net/pics/161758CrashVStudio2.png

Hors ligne

 

#24 06-03-2013 16:05:30

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

C'est la VM de PB 11.5 qui déraille, (pbvm qui appelle une fonction dans pbshr, des fonctions partagées).

Avec OllyDbg, je pourrais peut-être te dire quelle fonction cafouille, mais avec visual studio, je ne sais pas comment te le demander...
Bon, une fois qu'on a le nom de la fonction fautive, on n'est pas toujours plus avancé. Mais parfois ça permet de savoir quel type d'action était en cours.


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#25 07-03-2013 08:00:06

John77  
Membre Geek
Lieu: Chambéry
Date d'inscription: 26-10-2012
Messages: 51
Pépites: 227
Banque: 0

Re: Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Merci beaucoup pour ces précisions Seki

Je viens de récupérer OllyDbg pour relancer le test.
Dois-je installer le Plugin Development Kit?

Hors ligne

 
  • Index
  •  » Migration
  •  » Migration PB5 -> PB11.5.1 sous Win7 - PB crash à la sortie du mode run

Pied de page des forums

Propulsé par FluxBB 1.2.22