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

📄 mdb.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
字号:
#line 155 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"#include "mal_config.h"#include "gdk.h"#include <stdarg.h>#include <time.h>#include "mal_resolve.h"#include "mal_client.h"#include "mal_exception.h"#include "mal_debugger.h"#include "mal_interpreter.h"#include "mal_namespace.h"#ifdef WIN32#ifndef LIBMDB#define mdb_export extern __declspec(dllimport)#else#define mdb_export extern __declspec(dllexport)#endif#else#define mdb_export extern#endifmdb_export str MDBstart(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mdb_export str MDBstop(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mdb_export str MDBinspect(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mdb_export str MDBsetTrace(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mdb_export str MDBgetDebug(int *ret);mdb_export str MDBsetDebug(int *ret, int *flg);mdb_export str MDBsetCatch(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mdb_export str MDBsetTimer(int *ret, bit *flag);mdb_export str MDBsetFlow(int *ret, bit *flag);mdb_export str MDBsetMemory(int *ret, bit *flag);mdb_export str MDBsetIO(int *ret, bit *flag);mdb_export str MDBgetExceptionVariable(str *ret, str *msg);mdb_export str MDBgetExceptionReason(str *ret, str *msg);mdb_export str MDBgetExceptionContext(str *ret, str *msg);mdb_export str MDBlist(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mdb_export str MDBshowFlowGraph(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mdb_export str MDBlist3(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mdb_export str MDBlistDetail(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mdb_export str MDBlist3Detail(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mdb_export str MDBvar(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mdb_export str MDBvar3(MalBlkPtr mb, MalStkPtr stk, InstrPtr p);mdb_export str MDBStkDepth(MalBlkPtr mb, MalStkPtr s, InstrPtr p);mdb_export str MDBgetStackFrameN(MalBlkPtr m, MalStkPtr s, InstrPtr p);mdb_export str MDBgetStackFrame(MalBlkPtr m, MalStkPtr s, InstrPtr p);mdb_export str MDBStkTrace(MalBlkPtr m, MalStkPtr s, InstrPtr p);mdb_export str MDBgetDefinition(MalBlkPtr m, MalStkPtr stk, InstrPtr p);#line 206 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"#define MDBstatus(X) \	if( stk->cmd && X==0 ) \		stream_printf(cntxt->fdout,"#Monet Debugger off\n"); \	else if(stk->cmd==0 && X) \		stream_printf(cntxt->fdout,"#Monet Debugger on\n");strMDBtoggle(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	Client cntxt = MCgetClient();	int b = 0;	(void) mb;		/* still unused */	if (p->argc == 1) {		/* Toggle */		stk->cmd = stk->cmd ? 0 : 's';		cntxt->itrace = cntxt->itrace ? 0 : 's';		if (stk->cmd)			MDBdelay = 1;	/* wait for real command */		if (stk->up)			stk->up->cmd = 0;		return MAL_SUCCEED;	}	if (p->argc > 1) {		b = *(int *) getArgReference(stk, p, 1);	} else		b = stk->cmd;	if (b)		MDBdelay = 1;	/* wait for real command */	MDBstatus(b);	stk->cmd = b ? 'n' : 0;	if (stk->up)		stk->up->cmd = b ? 'n' : 0;	cntxt->itrace = b ? 'n' : 0;	return MAL_SUCCEED;}strMDBstart(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	Client cntxt = MCgetClient();	stk->cmd = 'n';	cntxt->itrace = 'n';	cntxt->debugOptimizer= TRUE;	(void) mb;	(void) p;	return MAL_SUCCEED;}strMDBstop(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	Client cntxt = MCgetClient();	stk->cmd = 0;	cntxt->itrace = 0;	cntxt->debugOptimizer= FALSE;	(void) mb;	(void) p;	return MAL_SUCCEED;}voidMDBtraceFlag(Client cntxt, MalStkPtr stk, int b){	if (b) {		cntxt->timer = GDKusec();		stk->cmd = b;		cntxt->itrace = b;	} else {		cntxt->timer = 0;		stk->cmd = 0;		cntxt->itrace = 0;	}}strMDBsetTrace(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	int b;	(void) mb;		/* still unused */	b = *(chr *) getArgReference(stk, p, 1);	MDBtraceFlag(MCgetClient(), stk, (b? (int) 't':0));	return MAL_SUCCEED;}strMDBgetDebug(int *ret){    *ret = GDKdebug;    return MAL_SUCCEED;}strMDBsetDebug(int *ret, int *flg){    *ret = GDKdebug;    GDKdebug = *flg;    return MAL_SUCCEED;}strMDBsetCatch(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	int b;	Client cntxt= MCgetClient();	(void) mb;		/* still unused */	b = *(chr *) getArgReference(stk, p, 1);	stk->cmd = cntxt->itrace = (b? (int) 'C':0);	return MAL_SUCCEED;}strMDBsetTimer(int *ret, bit *flag){	Client cntxt = MCgetClient();	(void) ret;	if( *flag)		cntxt->flags |= timerFlag;	else		cntxt->flags &= ~timerFlag;	cntxt->timer= GDKusec();	return MAL_SUCCEED;}strMDBsetFlow(int *ret, bit *flag){	Client cntxt = MCgetClient();	(void) ret;	if( *flag)		cntxt->flags |= flowFlag;	else		cntxt->flags &= ~flowFlag;	return MAL_SUCCEED;}strMDBsetMemory(int *ret, bit *flag){	Client cntxt = MCgetClient();	(void) ret;	if( *flag)		cntxt->flags |= memoryFlag;	else		cntxt->flags &= ~memoryFlag;	return MAL_SUCCEED;}strMDBsetIO(int *ret, bit *flag){	Client cntxt = MCgetClient();	(void) ret;	if( *flag)		cntxt->flags |= ioFlag;	else		cntxt->flags &= ~ioFlag;	return MAL_SUCCEED;}strMDBinspect(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	str modnme;	str fcnnme;	Module scope = NULL;	Symbol s = NULL;	Client c = MCgetClient();	if (stk != 0) {		modnme = (str) getArgValue(stk, p, 1);		fcnnme = (str) getArgValue(stk, p, 2);	} else {		modnme = getArgDefault(mb, p, 1);		fcnnme = getArgDefault(mb, p, 2);	}	scope = findModule(c->nspace, putName(modnme, strlen(modnme)));	if (scope)		s = findSymbolInModule(scope, putName(fcnnme, strlen(fcnnme)));	if (s == NULL)		throw(MAL, "mdb.inspect", "Could not find function");	return runMALDebugger(s);}#line 404 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"static intgetStkDepth(MalStkPtr s){	int i = 0;	while (s != 0) {		i++;		s = s->up;	}	return i;}strMDBStkDepth(MalBlkPtr mb, MalStkPtr s, InstrPtr p){	int *ret = (int *) getArgReference(s, p, 0);	(void) mb;		/* fool compiler */	*ret = getStkDepth(s);	return MAL_SUCCEED;}strMDBgetFrame(BAT *b, MalBlkPtr mb, MalStkPtr s, int depth){	ValPtr v;	int i;	char *buf = 0;	if (depth > 0)		return MDBgetFrame(b, mb, s->up, depth - 1);	if (s != 0)		for (i = 0; i < s->stktop; i++, v++) {			v = &s->stk[i];			ATOMformat(v->vtype, VALget(v), &buf);			BUNins(b, getVarName(mb, i), buf, FALSE);		}	return MAL_SUCCEED;}strMDBgetStackFrame(MalBlkPtr m, MalStkPtr s, InstrPtr p){	int *ret = (int *) getArgReference(s, p, 0);	BAT *b = BATnew(TYPE_str, TYPE_str, 256);	if (b == 0)		throw(MAL, "mdb.getStackFrame", "Failed to create BAT");	#line 152 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"	if (BBPindex("view_stk_frame") <= 0)		BATname(b, "view_stk_frame");	BATroles(b,"view","stk");	BATmode(b,TRANSIENT);	BATfakeCommit(b);	*ret = b->batCacheid;	BBPkeepref(*ret);#line 453 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"	return MDBgetFrame(b, m, s, 0);}strMDBgetStackFrameN(MalBlkPtr m, MalStkPtr s, InstrPtr p){	int n, *ret = (int *) getArgReference(s, p, 0);	BAT *b = BATnew(TYPE_str, TYPE_str, 256);	n = *(int *) getArgReference(s, p, 1);	if (n < 0 || n >= getStkDepth(s))		throw(MAL, "mdb.getStackFrame", "Illegal depth.");	#line 152 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"	if (BBPindex("view_stk_frame") <= 0)		BATname(b, "view_stk_frame");	BATroles(b,"view","stk");	BATmode(b,TRANSIENT);	BATfakeCommit(b);	*ret = b->batCacheid;	BBPkeepref(*ret);#line 466 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"	return MDBgetFrame(b, m, s, n);}strMDBStkTrace(MalBlkPtr m, MalStkPtr s, InstrPtr p){	BAT *b = BATnew(TYPE_int, TYPE_str, 256);	str msg;	char buf[8192];	int *ret = (int *) getArgReference(s, p, 0);	int k = 0,pc;	msg = call2str(MCgetClient(),s->blk, s, pc=getPC(m, p));	snprintf(buf,8192,"%s at %s.%s[%d]", msg+5,		getModuleId(getInstrPtr(m,0)),		getFunctionId(getInstrPtr(m,0)), pc);	BUNins(b, &k, buf, FALSE);	GDKfree(msg);	for (s = s->up, k++; s != NULL; s = s->up, k++) {		msg = call2str(MCgetClient(),s->blk, s, s->pcup);		snprintf(buf,8192,"%s at %s.%s[%d]", msg+5,			getModuleId(getInstrPtr(s->blk,0)),			getFunctionId(getInstrPtr(s->blk,0)), s->pcup);		BUNins(b, &k, buf, FALSE);		GDKfree(msg);	}	if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ);	#line 152 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"	if (BBPindex("view_stk_trace") <= 0)		BATname(b, "view_stk_trace");	BATroles(b,"view","stk");	BATmode(b,TRANSIENT);	BATfakeCommit(b);	*ret = b->batCacheid;	BBPkeepref(*ret);#line 495 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"	return MAL_SUCCEED;}#line 501 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"strMDBlist(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	Client c = MCgetClient();	(void) p;	(void) stk;	printFunction(c->fdout, mb, LIST_MAL_INSTR | LIST_MAL_PROPS);	return MAL_SUCCEED;}strMDBlist3(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	str modnme = (str) getArgValue(stk, p, 1);	str fcnnme = (str) getArgValue(stk, p, 2);	Symbol s = NULL;	Client c = MCgetClient();	s = findMALSymbol(putName(modnme, strlen(modnme)), putName(fcnnme, strlen(fcnnme)));	if (s == NULL)		showException(MAL,"mdb.list","Could not find %s.%s", modnme, fcnnme);	else		printFunction(c->fdout, s->def, LIST_MAL_INSTR | LIST_MAL_PROPS);	(void) mb;		/* fool compiler */	return NULL;}strMDBlistDetail(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	Client c = MCgetClient();	(void) p;	(void) stk;	printFunction(c->fdout, mb, LIST_MAL_ALL);	return MAL_SUCCEED;}strMDBlist3Detail(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	str modnme = (str) getArgValue(stk, p, 1);	str fcnnme = (str) getArgValue(stk, p, 2);	Symbol s = NULL;	Client c = MCgetClient();	s = findMALSymbol(putName(modnme, strlen(modnme)), putName(fcnnme, strlen(fcnnme)));	if (s == NULL)		showException(MAL,"mdb.list","Could not find %s.%s", modnme, fcnnme);	else		printFunction(c->fdout, s->def, LIST_MAL_ALL);	(void) mb;		/* fool compiler */	return NULL;}strMDBvar(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	Client c = MCgetClient();	(void) p;	(void) stk;	printStack(c->fdout, mb, stk,0);	return MAL_SUCCEED;}strMDBvar3(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	str modnme = (str) getArgValue(stk, p, 1);	str fcnnme = (str) getArgValue(stk, p, 2);	Symbol s = NULL;	Client c = MCgetClient();	s = findMALSymbol(putName(modnme, strlen(modnme)), putName(fcnnme, strlen(fcnnme)));	if (s == NULL)		showException(MAL,"mdb.var","Could not find %s.%s", modnme, fcnnme);	else		printStack(c->fdout, s->def, (s->def == mb ? stk : 0),0);	(void) mb;	return NULL;}#line 589 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"strMDBgetDefinition(MalBlkPtr m, MalStkPtr stk, InstrPtr p){	int i, *ret = (int *) getArgReference(stk, p, 0);	str ps;	BAT *b = BATnew(TYPE_int, TYPE_str, 256);	if (b == 0)		throw(MAL, "mdb.getDefinition", "Failed to create BAT");	for (i = 0; i < m->stop; i++) {		ps = instruction2str(m, getInstrPtr(m, i), 1);		BUNins(b, &i, ps, FALSE);		GDKfree(ps);	}	if (!(b->batDirty&2)) b = BATsetaccess(b, BAT_READ);	#line 152 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"	if (BBPindex("view_fcn_stmt") <= 0)		BATname(b, "view_fcn_stmt");	BATroles(b,"view","fcn");	BATmode(b,TRANSIENT);	BATfakeCommit(b);	*ret = b->batCacheid;	BBPkeepref(*ret);#line 605 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"	return MAL_SUCCEED;}strMDBgetExceptionVariable(str *ret, str *msg){	str tail;	tail = strchr(*msg, ':');	if (tail == 0)		throw(MAL, "mdb.getExceptionVariable", "Could not find it");	*tail = 0;	*ret = GDKstrdup(*msg);	*tail = ':';	return MAL_SUCCEED;}strMDBgetExceptionContext(str *ret, str *msg){	str tail, tail2;	tail = strchr(*msg, ':');	if (tail == 0)		throw(MAL, "mdb.getExceptionContext", "Could not find it");	tail2 = strchr(tail + 1, ':');	if (tail2 == 0)		throw(MAL, "mdb.getExceptionContext", "Could not find it");	*tail2 = 0;	*ret = GDKstrdup(tail + 1);	*tail2 = ':';	return MAL_SUCCEED;}strMDBgetExceptionReason(str *ret, str *msg){	str tail;	tail = strchr(*msg, ':');	if (tail == 0)		throw(MAL, "mdb.getExceptionReason", "Could not find it");	tail = strchr(tail + 1, ':');	if (tail == 0)		throw(MAL, "mdb.getExceptionReason", "Could not find it");	*ret = GDKstrdup(tail + 1);	return MAL_SUCCEED;}strMDBshowFlowGraph(MalBlkPtr mb, MalStkPtr stk, InstrPtr p){	str fname;	str modnme;	str fcnnme;	Module scope = NULL;	Symbol s = NULL;	Client c = MCgetClient();	if (stk != 0) {		modnme = (str) getArgValue(stk, p, 1);		fcnnme = (str) getArgValue(stk, p, 2);		fname = (str) getArgValue(stk, p, 3);	} else {		modnme = getArgDefault(mb, p, 1);		fcnnme = getArgDefault(mb, p, 2);		fname = getArgDefault(mb, p, 3);	}	scope = findModule(c->nspace, putName(modnme, strlen(modnme)));	if (scope)		s = findSymbolInModule(scope, putName(fcnnme, strlen(fcnnme)));	if (s == NULL) {		char buf[1024];		snprintf(buf,1024, "Could not find %s.%s\n", modnme, fcnnme);		throw(MAL, "mdb.dot", buf);	}	showFlowGraph(s->def, stk, fname);	return MAL_SUCCEED;}#line 694 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/mdb.mx"

⌨️ 快捷键说明

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