Serial md code
#ifndef DEBUG_H
#define DEBUG_H
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#ifndef NDEBUG
#ifndef ATTACHCHECKUBUNTU
#define ATTACHCHECKUBUNTU {char blockingfile[]="/proc/sys/kernel/yama/ptrace_scope"; FILE* f=fopen(blockingfile,"r"); if (f) { char c=getc(f); if (c=='1') fprintf(stderr,"sudo sh -c 'echo 0 > %s'\n",blockingfile); fclose(f);} }
#endif
#ifndef EMACSDEBUG
#define EMACSDEBUG {ATTACHCHECKUBUNTU; int i=0;fprintf(stderr,"\nemacs -q -fn 6x12 -T rank%d --eval '(gdb \"gdb --annotate=1 -q -i=mi -ex finish -ex finish -ex \\\"set var i=1\\\" -ex next ./pardy -p %d\")'&\n",global_rank,getpid());while(0==i)sleep(5);}
#endif
#ifndef XTERMDEBUG
#define XTERMDEBUG {ATTACHCHECKUBUNTU; int i=0;fprintf(stderr,"\nxterm -fn 6x12 -geometry 100x25 -T rank%d -e 'gdb -tui -q -ex finish -ex finish -ex \"set var i=1\" -ex next ./pardy -p %d'&\n",global_rank,getpid());while(0==i)sleep(5);}
#endif
#else
#ifndef EMACSDEBUG
#define EMACSDEBUG do{;}while(0)
#endif
#ifndef XTERMDEBUG
#define XTERMDEBUG do{;}while(0)
#endif
#endif
#define ENTERDEBUGGER \
if (argc>1 && strncmp(argv[1],"-e", 3)==0) { \
argv++; argc--; EMACSDEBUG; \
} else if (argc>1 && strncmp(argv[1],"-x",3)==0) { \
argv++; argc--; XTERMDEBUG; \
}
#endif