OVH Cloud OVH Cloud

Threads VB

2 réponses
Avatar
Trinh Huu Nhuan
Bonjour,
on me demande de débugger une DLL écrite en VB6 et je ne suis pas très
familier avec ce langage. J'aurais besoin d'un peu d'aide.
Voilà mon problème:
j'ai cette ligne de code VB:

If objApplication(strPrefixeConnexion & "_DefinitionBaseChargee") Then....

Et objApplication est une référence à l'objet Application d'une
application ASP.

Apparement, une fois compilée, on obtient la pile d'appel suivant:

1) 018ee9d0 77f7ce61 00000348 00000000 00000000
ntdll!NtWaitForSingleObject+0xb (FPO: [3,0,0])

2) 018eea44 77f77586 0008da70 680b7cf0 0008da70
ntdll!RtlpWaitForCriticalSection+0xaa (FPO: [Non-Fpo])

3) 018eea4c 680b7cf0 0008da70 018eea6c 018eeaaa
ntdll!RtlEnterCriticalSection+0x46 (FPO: [1,0,0])

4) 018eea60 680b7e2a 0008d9f8 00410044 00410054
asp!CAppln::Lock+0x3d (FPO: [1,0,3]) (CONV: stdcall)
[d:\nt\private\inet\iis\svcs\cmp\asp\applmgr.cpp @ 1503]

5) 018eeae8 653460f0 0008d9f8 02fbb3a4 018eeb4c
asp!CAppln::get_Value+0xa8 (FPO: [Non-Fpo]) (CONV: stdcall)
[d:\nt\private\inet\iis\svcs\cmp\asp\applmgr.cpp @ 1616]

6) 018eeb08 65365dea 0008d9f8 0000001c 00000004
OLEAUT32!tPushValJmpTab+0xf5 [d:\OA\src\dispatch\WIN32\i386\invoke.asm @
340]

7) 018eeb98 680c0f71 00091a6c 0008d9f8 00000000
OLEAUT32!CTypeInfo2::Invoke+0x244 (CONV: stdcall)
[d:\OA\src\typelib2\tiinvoke.cpp @ 629]

Donc, si je comprends bien:
à la ligne 5, le code essaie d'accéder à la valeur de la variable.
à la ligne 4, il pose un verrou sur qq chose.
puis, il entre dans une section critique et reste en attente de la
variable détenu par un autre thread.

Voilà ma question, le verrou posé à la ligne 4 est un verrou sur l'objet
Application ou seulement sur la valeur "DefinitionBaseChargee" de cet objet.

Si vous avez une idée, n'hésitez pas.

Merci d'avance et cordialement

Trinh Huu Nhuan

2 réponses

Avatar
David Rousset
Bonjour,

Je ne suis pas bien sûr que vous allez dans la bonne direction.

Pourriez-vous nous en dire davantage sur ce que vous appelez "débugger
une DLL" ? Cette dernière crash ?

Le plus simple dans ces cas là est de la recompilée avec les symboles de
Debug pour avoir un peu plus d'information et de s'attacher avec un
débuggeur au process qui va charger la DLL.

Par ailleurs, où se trouve cette DLL ? Dans COM+ ou non ?

Bye,

--
David Rousset
Microsoft France
--------------------
Merci de bien vouloir répondre à ce message dans le newsgroup où il a été
posté. Je le consulte régulièrement.


"Trinh Huu Nhuan" wrote in message
news:bmes3n$4mk$
Bonjour,
on me demande de débugger une DLL écrite en VB6 et je ne suis pas très
familier avec ce langage. J'aurais besoin d'un peu d'aide.
Voilà mon problème:
j'ai cette ligne de code VB:

If objApplication(strPrefixeConnexion & "_DefinitionBaseChargee") Then....

Et objApplication est une référence à l'objet Application d'une
application ASP.

Apparement, une fois compilée, on obtient la pile d'appel suivant:

1) 018ee9d0 77f7ce61 00000348 00000000 00000000
ntdll!NtWaitForSingleObject+0xb (FPO: [3,0,0])

2) 018eea44 77f77586 0008da70 680b7cf0 0008da70
ntdll!RtlpWaitForCriticalSection+0xaa (FPO: [Non-Fpo])

3) 018eea4c 680b7cf0 0008da70 018eea6c 018eeaaa
ntdll!RtlEnterCriticalSection+0x46 (FPO: [1,0,0])

4) 018eea60 680b7e2a 0008d9f8 00410044 00410054
asp!CAppln::Lock+0x3d (FPO: [1,0,3]) (CONV: stdcall)
[d:ntprivateinetiissvcscmpaspapplmgr.cpp @ 1503]

5) 018eeae8 653460f0 0008d9f8 02fbb3a4 018eeb4c
asp!CAppln::get_Value+0xa8 (FPO: [Non-Fpo]) (CONV: stdcall)
[d:ntprivateinetiissvcscmpaspapplmgr.cpp @ 1616]

6) 018eeb08 65365dea 0008d9f8 0000001c 00000004
OLEAUT32!tPushValJmpTab+0xf5 [d:OAsrcdispatchWIN32i386invoke.asm @
340]

7) 018eeb98 680c0f71 00091a6c 0008d9f8 00000000
OLEAUT32!CTypeInfo2::Invoke+0x244 (CONV: stdcall)
[d:OAsrctypelib2tiinvoke.cpp @ 629]

Donc, si je comprends bien:
à la ligne 5, le code essaie d'accéder à la valeur de la variable.
à la ligne 4, il pose un verrou sur qq chose.
puis, il entre dans une section critique et reste en attente de la
variable détenu par un autre thread.

Voilà ma question, le verrou posé à la ligne 4 est un verrou sur l'objet
Application ou seulement sur la valeur "DefinitionBaseChargee" de cet


objet.

Si vous avez une idée, n'hésitez pas.

Merci d'avance et cordialement

Trinh Huu Nhuan



Avatar
Trinh Huu Nhuan
David Rousset wrote:
Bonjour,


Bonjour et merci pour la réponse


Je ne suis pas bien sûr que vous allez dans la bonne direction.

Pourriez-vous nous en dire davantage sur ce que vous appelez "débugger
une DLL" ? Cette dernière crash ?


Euh non.... Il faut savoir que je n'ai pas accès au serveur où est
installée la DLL. Si je crois que me décrit la personne chargée de la
gestion du serveur, périodiquement, le processus inetinfo.exe se met à
gonfler en taille mémoire et au delà d'une certaine taille,
l'application web ne répond plus et il est obligé de redémarrer le
serveur (je sais, c'est violent!!! :) ).


Le plus simple dans ces cas là est de la recompilée avec les symboles de
Debug pour avoir un peu plus d'information et de s'attacher avec un
débuggeur au process qui va charger la DLL.


Outre le problème d'accès au serveur, nous n'avons jamais reussi à
reproduire ce comportement en développement. Il ne se reproduit qu'en
exploitation. Apparement, il y a un deadlock entre 2 threads et la file
d'attente qui gonfle finit par tout faire exploser.


Par ailleurs, où se trouve cette DLL ? Dans COM+ ou non ?


Plutôt dans MTS. C'est un serveur NT4 SP6a.

Cordialement

Trinh Huu Nhuan