⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 event.c

📁 linux下的多线程调试工具
💻 C
字号:
/* Copyright (C) 2004,2005,2006  Bull S.A. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#if HAVE_CONFIG_H#include <config.h>#endif#include "types.h"#define EVT0(param,s1,f) \    {#param, 0, {0,}, {s1,}, f} #define EVT1(param,s1,s2,x,f) \    {#param, 1, {PTT_##x,}, {s1, s2,}, f} #define EVT2(param,s1,s2,s3,x,y,f) \    {#param, 2, {PTT_##x, PTT_##y,}, {s1,s2,s3,}, f}#define EVT3(param,s1,s2,s3,s4,x,y,z,f) \    {#param, 3, {PTT_##x,PTT_##y,PTT_##z,}, {s1,s2,s3,s4,}, f}#define EVT4(param,s1,s2,s3,s4,s5,x,y,z,t,f) \    {#param, 4, {PTT_##x,PTT_##y,PTT_##z,PTT_##t,}, {s1,s2,s3,s4,s5,}, f}#define EVT5(param,s1,s2,s3,s4,s5,s6,x,y,z,t,u,f) \    {#param, 5,	{PTT_##x,PTT_##y,PTT_##z,PTT_##t,PTT_##u}, \     {s1,s2,s3,s4,s5,s6}, f}ptt_event_data_t ptt_event_array[] = {    {"NULL", 0, {0,}, {0,}, 0},    EVT1(START_USER_FUNC, " starts user function, version=", "", UINT, 0),    EVT0(END_USER_FUNC, " leaves user function", 0),    EVT2(BARRIER_LOCK_FREE, " frees barrier ", ", lock=", "", PTR, INT, 0),    EVT2(BARRIER_LOCK_REQUIRE, " requires barrier ", ", lock=", "", PTR, INT,                               0),    EVT2(BARRIER_LOCK_TAKEN, " takes barrier ", ", lock=", "", PTR, INT, 0),    EVT2(BARRIER_LEFT_DEC, " decrements barrier ", ", left=", "", PTR, UINT,                           0),    EVT2(BARRIER_LEFT_INC, " increments barrier ", ", left=", "", PTR, UINT,                           0),    EVT2(BARRIER_INIT, " initializes barrier ", ", left=", "", PTR, UINT, 0),    EVT1(BARRIER_DESTROY, " destroys barrier ", "", PTR, 0),    EVT1(BARRIER_DESTROY_IN, " enters function pthread_barrier_destroy, "                             "barrier=", "", PTR, 0),    EVT2(BARRIER_DESTROY_OUT, " leaves function pthread_barrier_destroy, "                              "barrier= ", ", return=", "", PTR, INT, 0),    EVT3(BARRIER_INIT_IN, " enters function pthread_barrier_init, barrier=",                          ", attribute=", ", count=", "", PTR, PTR, UINT, 0),    EVT2(BARRIER_INIT_OUT, " leaves function pthread_barrier_init, barrier=",                           ", return=", "", PTR, INT, 0),    EVT1(BARRIER_WAIT_IN, " enters function pthread_barrier_wait, barrier=",                          "", PTR, 0),    EVT2(BARRIER_WAIT_OUT, " leaves function pthread_barrier_wait, barrier=",                           ", return=", "", PTR, INT, 0),    EVT2(COND_LOCK_FREE, " frees cond-var ", ", lock=", "", PTR, INT, 0),    EVT2(COND_LOCK_REQUIRE, " requires cond-var ", ", lock=", "", PTR, INT, 0),    EVT2(COND_LOCK_TAKEN, " takes cond-var ", ", lock=", "", PTR, INT, 0),    EVT2(COND_TOTAL_SEQ_SET, " blocks cond-var ", "for destruction, "                             "total_seq=", "", PTR, ULL, 0),    EVT2(COND_TOTAL_SEQ_INC, " uses the cond-var ", ", total_seq=", "", PTR,                             ULL, 0),    EVT2(COND_BROAD_SEQ_INC, " wakes up everyone waiting for cond-var ",                             ", broad_seq=", "", PTR, UINT, 0),    EVT2(COND_MUTEX_FREE, " frees mutex ", " of cond-var ", "", PTR, PTR, 0),    EVT2(COND_MUTEX_REQUIRE, " requires mutex ", " of cond-var ", "", PTR,                             PTR, 0),    EVT2(COND_MUTEX_TAKEN, " takes mutex ", " of cond-var ", "", PTR, PTR, 0),    EVT4(COND_INIT, " initializes cond-var ", ", mutex=", ", total_seq=",                    ", broad_seq=", "", PTR, PTR, ULL, UINT, 0),    EVT1(COND_DESTROY, " destroys cond-var ", "", PTR, 0),    EVT1(COND_DESTROY_IN, " enters function pthread_cond_destroy, cond-var=",                          "", PTR, 0),    EVT2(COND_DESTROY_OUT, " leaves function pthread_cond_destroy, cond-var=",                           ", return=", "", PTR, INT, 0),    EVT2(COND_INIT_IN, " enters function pthread_cond_init, cond-var=",                       ", attribute=", "", PTR, PTR, 0),    EVT2(COND_INIT_OUT, " leaves function pthread_cond_init, cond-var=",                        ", return=", "", PTR, INT, 0),    EVT1(COND_BROAD_IN, " enters function pthread_cond_broadcast, cond-var=",                        "", PTR, 0),    EVT2(COND_BROAD_OUT, " leaves function pthread_cond_broadcast, cond-var=",                         ", return=", "", PTR, INT, 0),    EVT1(COND_SIGNAL_IN, " enters function pthread_cond_signal, cond-var=",                         "", PTR, 0),    EVT2(COND_SIGNAL_OUT, " leaves function pthread_cond_signal, cond-var=",                          ", return=", "", PTR, INT, 0),    EVT2(COND_WAIT_IN, " enters function pthread_cond_wait, cond-var=",                       ", mutex=", "", PTR, PTR, 0),    EVT2(COND_WAIT_OUT, " leaves function pthread_cond_wait, cond-var=",                        ", return=", "", PTR, INT, 0),    EVT2(MUTEX_STATE_FREE, " frees mutex ", ", lock=", "", PTR, INT, 0),    EVT2(MUTEX_STATE_REQUIRE, " requires mutex ", ", lock=", "", PTR, INT, 0),    EVT2(MUTEX_STATE_TAKEN, " locks mutex ", ", lock=", "", PTR, INT, 0),    EVT2(MUTEX_COUNT_DEC, " decrements mutex ", ", count=", "", PTR, UINT, 0),    EVT2(MUTEX_COUNT_INC, " increments mutex ", ", count=", "", PTR, UINT, 0),    EVT2(MUTEX_OWNER_CHANGE, " changes the owner of mutex ", ", owner=", "",                             PTR, INT, 0),    EVT4(MUTEX_INIT, " initializes mutex ", ", owner=", ", count=", ", kind=",                     "", PTR, UINT, INT, INT, 0),    EVT1(MUTEX_DESTROY, " destroys mutex ", "", PTR, 0),    EVT1(MUTEX_DESTROY_IN, " enters function pthread_mutex_destroy, mutex=",                           "", PTR, 0),    EVT2(MUTEX_DESTROY_OUT, " leaves function pthread_mutex_destroy, mutex=",                            " return=", "", PTR, INT, 0),    EVT2(MUTEX_INIT_IN, " enters function pthread_mutex_init, mutex=",                        ", attribute=", "", PTR, PTR, 0),    EVT2(MUTEX_INIT_OUT, " leaves function pthread_mutex_init, mutex=",                         " return=", "", PTR, INT, 0),    EVT1(MUTEX_LOCK_IN, " enters function pthread_mutex_lock, mutex=", "",                        PTR, 0),    EVT2(MUTEX_LOCK_OUT, " leaves function pthread_mutex_lock, mutex=",                         " return=", "", PTR, INT, 0),    EVT1(MUTEX_UNLOCK_IN, " enters function pthread_mutex_unlock, mutex=", "",                          PTR, 0),    EVT2(MUTEX_UNLOCK_OUT, " leaves function pthread_mutex_unlock, mutex=",                           " return=", "", PTR, INT, 0),    EVT2(THREAD_JOIN, " joins thread ", " that returned ", "", PTR, INT, 0),    EVT1(THREAD_DETACH, " makes thread ", " unjoinable", PTR, 0),    EVT0(THREAD_STATE_DEAD, " is dead", 0),    EVT0(THREAD_STATE_WAIT, " is blocked", 0),    EVT0(THREAD_STATE_WAKE, " is resumed", 0),    EVT1(THREAD_INIT, " creates thread ", "", PTR, 0),    EVT4(THREAD_CREATE_IN, " enters function pthread_create, thread=",                           ", attribute=", ", start_routine=", ", argument=",                           "", PTR, PTR, PTR, PTR, 0),    EVT1(THREAD_CREATE_OUT, " leaves function pthread_create, return=", "",                            INT, 0),    EVT2(THREAD_JOIN_IN, " enters function pthread_join, thread=",                         " thread returns in ", "", PTR, PTR, 0),    EVT1(THREAD_JOIN_OUT, " leaves function pthread_join, return=", "", INT,                          0),    EVT1(THREAD_SET_PD, " sets new thread at address ", "", PTR, 0),	    EVT1(THREAD_CANCEL_IN, " enters function pthread_cancel, thread=", "",                           PTR, 0),    EVT1(THREAD_CANCEL_OUT, " leaves function pthread_cancel, return=", "",                            INT, 0),    EVT1(THREAD_CANCEL_PROG, " cancelling thread ", " is in progress ",                             PTR, 0),    EVT1(THREAD_STATE_CANCEL, " cancels thread ", "", PTR ,0),    EVT1(THREAD_STATE_WAIT_MUTEX, " is blocked on mutex ", "", PTR, 0),    EVT1(THREAD_STATE_WAKE_MUTEX, " is resumed, mutex=", "", PTR, 0),    EVT1(THREAD_STATE_WAIT_BARRIER, " is blocked on barrier ", "", PTR, 0),    EVT1(THREAD_STATE_WAKE_BARRIER, " is resumed, barrier=", "", PTR, 0),    EVT1(THREAD_STATE_WAIT_COND, " is blocked on cond-var ", "", PTR, 0),    EVT1(THREAD_STATE_WAKE_COND, " is resumed, cond-var=", "", PTR, 0),    EVT1(THREAD_STATE_WAIT_SEM, " is blocked on semaphore ", "", PTR, 0),    EVT1(THREAD_STATE_WAKE_SEM, " is resumed, semaphore=", "", PTR, 0),    EVT1(PROG_FORK, " is child of ", "", INT, 0),    EVT2(SEM_COUNT_DEC, " decrements semaphore ", ", count=", "", PTR, UINT,                        0),    EVT2(SEM_COUNT_INC, " increments semaphore ", ", count=", "", PTR, UINT,                        0),    EVT2(SEM_INIT, " initializes semaphore ", ", count=", "", PTR, UINT, 0),    EVT3(SEM_INIT_IN, " enters function sem_init, sem=", ", pshared=",                      ", count=", "", PTR, INT, UINT, 0),    EVT2(SEM_INIT_OUT, " leaves function sem_init, sem =", ", return=", "",                       PTR, INT, 0),    EVT1(SEM_DESTROY, " destroys semaphore ", "", PTR, 0),    EVT1(SEM_DESTROY_IN, " enters function sem_destroy, sem=", "", PTR, 0),    EVT2(SEM_DESTROY_OUT, " leaves function sem_destroy, sem=", ", return=",                          "", PTR, INT, 0),    EVT1(SEM_POST_IN, " enters function sem_post, sem=", "", PTR, 0),    EVT2(SEM_POST_OUT, " leaves function sem_post, sem=", ", return=", "",                       PTR, INT, 0),    EVT1(SEM_WAIT_IN, " enters function sem_wait, sem=", "", PTR, 0),    EVT2(SEM_TRYWAIT_OUT, " leaves function sem_trywait, sem=", ", return=",                          "", PTR, INT, 0),    EVT1(SEM_TRYWAIT_IN, " enters function sem_trywait, sem=", "", PTR, 0),    EVT2(SEM_WAIT_OUT, " leaves function sem_wait, sem=", " return=", "", PTR,                       INT, 0),    EVT2(SEM_OPEN_IN, " enters function sem_open, sem name=", ", oflag=", "",                      PTR, INT, 0),    EVT2(SEM_OPEN_OUT, " leaves function sem_open, sem name=", ", return=",                       "", PTR, PTR, 0),    EVT2(SEM_OPEN_CREATE, " will create a semaphore, mode=", ", count=", "",                          UINT, INT, 0),    EVT1(SEM_CLOSE_IN, " enters function sem_close, sem=", "", PTR, 0),    EVT1(SEM_CLOSE_OUT, " leaves function sem_close, return=", "", INT, 0),    EVT0(SEM_MAPPINGSLOCK_FREE, " frees sem mapping ", 0),    EVT0(SEM_MAPPINGSLOCK_REQUIRE, " requires sem mapping ", 0),    EVT0(SEM_MAPPINGSLOCK_TAKEN, " takes sem mapping ", 0),    EVT2(SEM_REFCOUNT_DEC, " decrements reference counter for semaphore ",                           ", count=", "", PTR, UINT, 0),    EVT2(SEM_REFCOUNT_INC, " increments reference counter for semaphore ",                           ", count=", "", PTR, UINT, 0),    EVT1(SEM_UNLINK_IN, " enters function sem_unlink, sem name=", "", PTR, 0),    EVT2(SEM_UNLINK_OUT, " leaves function sem_unlink, sem name=",                         ", return=", "", PTR, INT, 0)};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -