2010-01-12 3 views
-1

Есть ли инструмент для отслеживания связи между потоками; 1. работает в одном процессе 2. работает в разных процессах (IPC)Связь с потоком

+3

В какой операционной системе? Какой язык программирования? – Oded

+1

и что вы подразумеваете под «связью»? – 2010-01-12 12:26:29

+0

обмен данными, например. – reonze

ответ

2

Предполагаю, что вам нужно отследить это для отладки. В нормальных условиях это сложно сделать без специального письменного кода. Для аналогичной проблемы, с которой я столкнулся, у меня был буфер отслеживания для каждого процессора, который использовался для краткой записи времени и интересной операции, выполняемой текущим потоком. Журнал был круглый след, который используется для хранения данных, как это:

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; 
} 

Журнал трассировки был массив этих структур длины 1024, по одному для каждого процессора. Каждый поток используется для отслеживания операций, а также время для определения причинности событий. Поля, которые использовались для хранения данных в «союзе», зависели от выполняемой операции. Значение указателя «data» зависело и от «op». Когда программа использовалась для сбоя, я бы открыл ядро ​​в gdb, и у меня был скрипт gdb, который будет проходить через журналы в каждом процессоре и распечатывать операционные системы и их соответствующие данные, чтобы узнать историю событий.

Для разных процессов вы можете выполнить такое ведение журнала в файле - по одному на процесс. Этот пример приведен в C, но вы можете сделать это на любом языке, который хотите использовать, если вы можете определить идентификатор CPU, на котором в данный момент работает поток.

1

Возможно, вы ищете что-то вроде Intel Thread Checker, если вы используете pthreads в (1).

Для связи между различными процессами (2) вы можете использовать Aspect-Oriented Programming (AOP), если у вас есть исходный код, или написать свою собственную оболочку для функций IPC и LD_PRELOAD.

Редактировать: Упс, вы сказали отслеживание, а не проверка.

0

Это будет зависеть от операционной системы и среды разработки, которую вы используете. Если вы работаете с Visual Studio, посмотрите на инструменты в Visual Studio 2010.

Смежные вопросы