J'ai un programme multithread =E9crit en C++ sous Visual Studio 6.
Lorsque je ferme mon programme, il y a des situations o=F9 une ou=20
plusieurs threads sont bloqu=E9es, provoquant le blocage du programme=20
entier.
Est-il possible, depuis une application ext=E9rieure, de v=E9rifier chacune=
=20
des threads du programme, et d'obtenir un call stack de chacune d'elle?
=20
_________________________________________________
Alain Migeon
Please reverse dynamics and rovsing for replying.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Aurelien Regat-Barrel
Alain Migeon a écrit :
Bonjour
Bonjour,
J'ai le problème suivant.
J'ai un programme multithread écrit en C++ sous Visual Studio 6. Lorsque je ferme mon programme, il y a des situations où une ou plusieurs threads sont bloquées, provoquant le blocage du programme entier.
Est-il possible, depuis une application extérieure, de vérifier chacune des threads du programme, et d'obtenir un call stack de chacune d'elle?
Y'a process explorer: http://www.sysinternals.com/Utilities/ProcessExplorer.html
Mais le débogueur de VC++ fera bien mieux encore. Mettez sur "pause" une fois le programme bloquer, vous disposer de la liste des threads, et pour chacun d'eux la call-stack, et plus encore. Notez qu'il est possible de donner un nom aux threads figurant dans le débogueur.
/// Donne un nom au thread appelant cette fonction. /// Ce nom apparaît dans le débogueur de VC++ void SetCurrentThreadName( const char * ThreadName ) { #ifdef _MSC_VER // VC++ typedef struct tagTHREADNAME_INFO { DWORD dwType; // must be 0x1000 LPCSTR szName; // pointer to name (in user addr space) DWORD dwThreadID; // thread ID (-1Êller thread) DWORD dwFlags; // reserved for future use, must be zero } THREADNAME_INFO;
J'ai un programme multithread écrit en C++ sous Visual Studio 6.
Lorsque je ferme mon programme, il y a des situations où une ou
plusieurs threads sont bloquées, provoquant le blocage du programme
entier.
Est-il possible, depuis une application extérieure, de vérifier chacune
des threads du programme, et d'obtenir un call stack de chacune d'elle?
Y'a process explorer:
http://www.sysinternals.com/Utilities/ProcessExplorer.html
Mais le débogueur de VC++ fera bien mieux encore. Mettez sur "pause" une
fois le programme bloquer, vous disposer de la liste des threads, et
pour chacun d'eux la call-stack, et plus encore.
Notez qu'il est possible de donner un nom aux threads figurant dans le
débogueur.
/// Donne un nom au thread appelant cette fonction.
/// Ce nom apparaît dans le débogueur de VC++
void SetCurrentThreadName( const char * ThreadName )
{
#ifdef _MSC_VER // VC++
typedef struct tagTHREADNAME_INFO
{
DWORD dwType; // must be 0x1000
LPCSTR szName; // pointer to name (in user addr space)
DWORD dwThreadID; // thread ID (-1Êller thread)
DWORD dwFlags; // reserved for future use, must be zero
} THREADNAME_INFO;
J'ai un programme multithread écrit en C++ sous Visual Studio 6. Lorsque je ferme mon programme, il y a des situations où une ou plusieurs threads sont bloquées, provoquant le blocage du programme entier.
Est-il possible, depuis une application extérieure, de vérifier chacune des threads du programme, et d'obtenir un call stack de chacune d'elle?
Y'a process explorer: http://www.sysinternals.com/Utilities/ProcessExplorer.html
Mais le débogueur de VC++ fera bien mieux encore. Mettez sur "pause" une fois le programme bloquer, vous disposer de la liste des threads, et pour chacun d'eux la call-stack, et plus encore. Notez qu'il est possible de donner un nom aux threads figurant dans le débogueur.
/// Donne un nom au thread appelant cette fonction. /// Ce nom apparaît dans le débogueur de VC++ void SetCurrentThreadName( const char * ThreadName ) { #ifdef _MSC_VER // VC++ typedef struct tagTHREADNAME_INFO { DWORD dwType; // must be 0x1000 LPCSTR szName; // pointer to name (in user addr space) DWORD dwThreadID; // thread ID (-1Êller thread) DWORD dwFlags; // reserved for future use, must be zero } THREADNAME_INFO;
Y'a process explorer: http://www.sysinternals.com/Utilities/ProcessExplorer.html
J'ai essayé, mais j'ai besoin de plus de détails de chacune des threads .
Mais le débogueur de VC++ fera bien mieux encore. Mettez sur "pause" un e fois le programme bloquer, vous disposer de la liste des threads, et pour chacun d'eux la call-stack, et plus encore.
Cette solution n'est pas valide, car la machine sur laquelle est éxécut é le programme n'a pas Visual Studio. J'ai en fait trouvé mon salut dans WinDbg (Debugging Tools for Windows), qui peut être installé indépendemment de Visual Studio. Je dois juste éxécuter mon program compilé en mode debug, et conserver le .pdb gé néré.
Merci pour ton aide.
_________________________________________________ Alain Migeon Please reverse dynamics and rovsing for replying.
In article <4459e520$0$2651$636a55ce@news.free.fr>,
nospam.aregatba@yahoo.fr says...
Y'a process explorer:
http://www.sysinternals.com/Utilities/ProcessExplorer.html
J'ai essayé, mais j'ai besoin de plus de détails de chacune des threads .
Mais le débogueur de VC++ fera bien mieux encore. Mettez sur "pause" un e
fois le programme bloquer, vous disposer de la liste des threads, et
pour chacun d'eux la call-stack, et plus encore.
Cette solution n'est pas valide, car la machine sur laquelle est éxécut é
le programme n'a pas Visual Studio.
J'ai en fait trouvé mon salut dans WinDbg (Debugging Tools for Windows),
qui peut être installé indépendemment de Visual Studio. Je dois juste
éxécuter mon program compilé en mode debug, et conserver le .pdb gé néré.
Merci pour ton aide.
_________________________________________________
Alain Migeon
Please reverse dynamics and rovsing for replying.
Y'a process explorer: http://www.sysinternals.com/Utilities/ProcessExplorer.html
J'ai essayé, mais j'ai besoin de plus de détails de chacune des threads .
Mais le débogueur de VC++ fera bien mieux encore. Mettez sur "pause" un e fois le programme bloquer, vous disposer de la liste des threads, et pour chacun d'eux la call-stack, et plus encore.
Cette solution n'est pas valide, car la machine sur laquelle est éxécut é le programme n'a pas Visual Studio. J'ai en fait trouvé mon salut dans WinDbg (Debugging Tools for Windows), qui peut être installé indépendemment de Visual Studio. Je dois juste éxécuter mon program compilé en mode debug, et conserver le .pdb gé néré.
Merci pour ton aide.
_________________________________________________ Alain Migeon Please reverse dynamics and rovsing for replying.