2010-01-12 7 views
-1

Existe-t-il un outil disponible pour tracer la communication entre les threads; 1. Exécution en un seul processus 2. Exécution dans différents processus (IPC)Communication de fil

+3

Dans quel système d'exploitation? Quel langage de programmation? – Oded

+1

et que voulez-vous dire par "communication"? –

+0

partage de données par ex. – reonze

Répondre

2

Je suppose que vous devez suivre ce processus pour le débogage. Dans des circonstances normales, il est difficile de le faire, sans code écrit personnalisé. Pour un problème similaire auquel j'ai été confronté, j'avais un tampon de suivi par processeur, qui enregistrait brièvement le temps et l'opération intéressante effectuée par le thread en cours d'exécution. Le journal était une trace circulaire qui permet de stocker des données comme suit:

struct trace_data { 
    int op; 
    void *data; 
    struct time t; 
    union { 
    struct { 
     int op1_field1; 
     int op1_field2; 
    } d1; 
    struct { 
     int op2_field1; 
     int op2_field2; 
    } d2 
    } u; 
} 

Le journal de trace est un ensemble de ces structures de longueur 1024, un pour chaque processeur. Chaque thread utilisé pour tracer les opérations, ainsi que le temps pour déterminer la causalité des événements. Les champs qui étaient utilisés pour stocker des données dans le "syndicat" dépendaient de l'opération en cours. La signification du pointeur "data" dépendait aussi de "op". Lorsque le programme venait à planter, j'ouvrais le noyau dans gdb et j'avais un script gdb qui parcourait les logs de chaque processeur et imprimait les ops et leurs données correspondantes, pour trouver l'historique des événements.

Pour différents processus, vous pouvez effectuer une journalisation de ce type dans un fichier à la place, une par processus. Cet exemple est en C, mais vous pouvez le faire dans la langue que vous voulez utiliser, tant que vous pouvez trouver l'ID du CPU sur lequel le thread est actuellement en cours d'exécution.

1

Vous recherchez peut-être quelque chose comme Intel Thread Checker tant que vous utilisez pthreads dans (1).

Pour la communication entre différents processus (2), vous pouvez utiliser la programmation orientée aspect (AOP) si vous avez le code source ou écrire votre propre wrapper pour les fonctions IPC et LD_PRELOAD.

Modifier: Oups, vous avez dit suivi, pas vérification.

0

Cela dépendra beaucoup du système d'exploitation et de l'environnement de développement que vous utilisez. Si vous êtes avec Visual Studio, regardez les outils dans Visual Studio 2010.