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

📄 debug.h

📁 最新版的BCC, bcc-src-1.0.29c.rar,基于sparc平台处理器leon2,leon3,v7,v8等系列的linux环境下交叉编译工具
💻 H
字号:
#ifndef _PT_DEBUG_H#define _PT_DEBUG_H#include <asm-leon/leondbg.h>#define DEBUG_PT//#define PDEBUG_FLAGS __pthread_dbgflags#define PDEBUG_FLAGS (0)#define PDEBUG_DO_ASSERT extern volatile int pthread_started;#ifdef PDEBUG_DO_ASSERT#define PDEBUG_FLAGS_check(code) ((PDEBUG_FLAGS & (code)) && pthread_started)#else#define PDEBUG_FLAGS_check(code) (((PDEBUG_FLAGS & (code)) || ((code) & PDBG_ASSERT)) && pthread_started)#endif#define PDBG_PRINTF dbgleon_printf#define PDEBUG_PTNAME(code,p)                          \    if ((p) && (p)->pt_name) {                         \      PDEBUG_SIMPLECODE(code, "%s",(p)->pt_name);      \    } else {                                           \      PDEBUG_SIMPLECODE(code, "0x%08x",p);             \    }                                                  #define PDEBUG_HEADER(code)                            \  if (PDEBUG_FLAGS_check(code)) {                      \    register unsigned int _GETSP asm("sp");            \    PDBG_PRINTF("[sp:%08x self(%08x):", _GETSP, mac_pthread_self()); \    if ((mac_pthread_self()) && (mac_pthread_self())->pt_name) {\      PDBG_PRINTF("%8s",mac_pthread_self()->pt_name);       \    } else {                                           \      PDBG_PRINTF("%08x",mac_pthread_self());               \    }                                                  \    PDBG_PRINTF(" %20s : %03d @ %28s()]:" , __FILE__,__LINE__,__FUNCTION__); \  }                                                      #define PDEBUG_CODE(code, fmt, args...) do { \  PDEBUG_HEADER(code)                        \  if (PDEBUG_FLAGS_check(code)) { \    PDBG_PRINTF(fmt "\n" ,## args ); \  } \} while(0)#define PDEBUG_SIMPLECODE(code, fmt, args...) do { \  if (PDEBUG_FLAGS_check(code)) { \    PDBG_PRINTF(fmt , ## args ); \  } \} while(0)/* define the PDEBUG macro here */#ifdef DEBUG_PT#  define PDEBUG(code, fmt, args...) PDEBUG_CODE(code, fmt, ## args)#else#  define PDEBUG(code, fmt, args...) do { } while(0) /* debug switched off */#endif#define PDBG_FNCALL 1#define PDBG_INIT  (1<<1)#define PDBG_ALLOC (1<<2)#define PDBG_STACK (1<<3)#define PDBG_RUN   (1<<4)#define PDBG_START (1<<5)#define PDBG_SCHED (1<<6)#define PDBG_QUEUE (1<<7)#define PDBG_TIMER (1<<8)#define PDBG_ERROR (1<<9)#define PDBG_TIMEOUT (1<<10)#define PDBG_ASSERT (1<<11)#define PDBG_SIGNAL (1<<12)#define PDBG_LIBC (1<<13)#define PDBG_MUTEX (1<<14)#define PDBG_RESCHED (1<<15)#define PTRACEIN PDEBUG(PDBG_FNCALL,"->");#define PTRACEOUT PDEBUG(PDBG_FNCALL,"<-");#define PDEBUG_PTQUEUE(code,q)                         \  if ((q) && (q)->tqh_name) {                          \    PDEBUG_SIMPLECODE(code, "%s: [",(q)->tqh_name);    \  } else {                                             \    PDEBUG_SIMPLECODE(code, "0x%08x: [",(q));          \  }                                                    #define PDEBUG_PTQUEUELIST(code,q,index) do {          \  pthread_t p = 0;                                     \  PDEBUG_PTQUEUE(code,q)                               \  TAILQ_FOREACH(p, (q), pt_qelem[index]) {             \    if (p != TAILQ_FIRST(q)) {                         \      PDEBUG_SIMPLECODE(code, " ");                    \    }                                                  \    PDEBUG_PTNAME(code,p)                              \  }                                                    \  PDEBUG_SIMPLECODE(code, "]\n");                      \} while(0)#define PTRACE_QUEUE(code,q,index) do {                \  PDEBUG_HEADER(code)                                  \  PDEBUG_PTQUEUELIST(code,q,index);                    \} while(0)#define PTRACE_READYQUEUE PTRACE_QUEUE(PDBG_QUEUE,&ready,PRIMARY_QUEUE)#define PTRACE_ALLQUEUE PTRACE_QUEUE(PDBG_QUEUE,&all,K_QUEUES_ALL)#define PTRACE_SUSPENDQUEUE PTRACE_QUEUE(PDBG_QUEUE,&suspend_q,PRIMARY_QUEUE)#define PTRACE_TIMEOUTQUEUE PTRACE_QUEUE(PDBG_QUEUE,&pthread_timeout_q,K_QUEUES_TIMEOUT)#define PTRACE_QUEUES  \   PTRACE_READYQUEUE;  \   PTRACE_ALLQUEUE;    \   PTRACE_SUSPENDQUEUE;#define PDEBUG_PTCOND(code,c)                          \  if ((c) && (c)->dbgname) {                           \    PDEBUG_SIMPLECODE(code, "%s: ",(c)->dbgname);      \  } else {                                             \    PDEBUG_SIMPLECODE(code, "0x%08x: ",(q));           \  }                                                    #define PDEBUG_COND(code,c)                            \  PDEBUG_PTCOND(code,c);                               \  PDEBUG_SIMPLECODE(code, "\n queue: ",(c)->dbgname);  \  PDEBUG_PTQUEUELIST(code,&((c)->queue),PRIMARY_QUEUE);  #define PDEBUG_PTMUTEX(code,m)                         \  if ((m) && (m)->dbgname) {                           \    PDEBUG_SIMPLECODE(code, "%s: ",(m)->dbgname);      \  } else {                                             \    PDEBUG_SIMPLECODE(code, "0x%08x: ",(m));           \  }                                                    #define PDEBUG_MUTEX(code,m)                           \  PDEBUG_PTMUTEX(code,m);                              \  PDEBUG_SIMPLECODE(code, "\n owner: ");               \  PDEBUG_PTNAME(code,(m)->owner);                      \  PDEBUG_SIMPLECODE(code, "\n queue: ");               \  PDEBUG_PTQUEUELIST(code,&((c)->queue),PRIMARY_QUEUE);/* Define ASSERT to stop/warn. Should be void in production code */#ifdef PDEBUG_DO_ASSERT#  define PASSERT(x) if (!(x)) { PDEBUG(PDBG_ASSERT,"#### assertion failed "); while(1); }#else#  define PASSERT(x) do { } while(0)#endif#endif /* _PT_DEBUG_H */

⌨️ 快捷键说明

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