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

📄 u.c

📁 一个很不错的程序切片工具,希望大家来讨论以下,对测试人员很有帮助
💻 C
📖 第 1 页 / 共 3 页
字号:
	for (i = 0; i < n_files; i++){		f[i].text = files[i].text;		t_lines += files[i].n_lines;		/*		printf ("file %d lines %d total %d\n",i,files[i].n_lines,			t_lines);		*/	}	if (t_lines == 0) {		fprintf (stderr,"Could not find source code, no lines found\n");		exit(1);	}	BuildSliceSrc (slicewin,n_files,f,t_lines);	make_line_map();	slice_pass_hook = continue_events;	MultiSliceSetHook(slicewin,active_hook);	XtAppMainLoop(ac);}strech (goal,w)	Widget	goal,w;{	Dimension		width,bw;	Position		x;	int				dist;	XtUnmanageChild(w);	XtVaGetValues (goal,		XtNdefaultDistance, &dist,		XtNwidth,&width,NULL);	XtVaGetValues (w,		XtNborderWidth,&bw,		XtNx,&x,		NULL);	XtVaSetValues (w,		XtNwidth,	(XtArgVal) (width-2*bw - dist - x),		NULL);	XtManageChild(w);}Widget create_widgets (top,file_name)	Widget	top;	char	*file_name;{	static Widget	frame,quit,file_button,file_menu;	static Widget	load,line,content;	static Widget	select_button,select_menu;	static Widget	proc,var,primary,secondary;	static Widget	op_button,op_menu;	static Widget	dicesp,dice,bb,merge;	static Widget	proc_state,selection_state;	static Widget	proc_popup,proc_port,proc_list;	static Widget	head_popup,head_port,head_list;	static Widget	var_popup,var_port,var_list;	static Widget	select_popup,select_port,select_list;	static Widget	help;	static Widget	interrupt,show_tree,show_proc;	static Widget	display_label;	static Widget	slicewin,clear,clear_slice,sliceframe;	static proc_state_rec	ps;	Dimension		www,ww,w,bw;	Position		cx,hx,x,y;	int				at,dist;	char			buff[1000];	static char			*plist[] = {"start","fetch","redactor",					"look_up_value_in_long_name_list",					"alpha","beta","OMEGA",					NULL};	static char		pbuff[500] = "<none>",sbuff[500] = "<none>";	static XtResource res[] = {		{XtNrunningFG,XtCBackground, XtRPixel, sizeof(Pixel),			XtOffsetOf(proc_state_rec,active_fg),XtRString,"red"},		{XtNrunningBG,XtCForeground, XtRPixel, sizeof(Pixel),			XtOffsetOf(proc_state_rec,active_bg),XtRString,"yellow"}};	XtGetApplicationResources (top,&ps,res,XtNumber(res),NULL,0);	ps.proc = NULL;	ps.var = NULL;	ps.state_label = &selection_state;	ps.root_file = file_name;	ps.ptext = pbuff;	ps.stext = sbuff;	/*	file_menu = XtVaCreatePopupShell ("fileMenu",simpleMenuWidgetClass,		top,		NULL);		*/	select_menu = XtVaCreatePopupShell ("selectMenu",		simpleMenuWidgetClass, top,		NULL);	/*	set_button_help (file_menu,"Quit to exit unravel");	*/	set_button_help (select_menu,		"Menu for selecting criteria variables or previous slices");	op_menu = XtVaCreatePopupShell ("opMenu",		simpleMenuWidgetClass, top,		NULL);	set_button_help (op_menu,		"Menu for combining primary and secondary slices");	select_popup = XtVaCreatePopupShell ("selectpop",		transientShellWidgetClass,top,		NULL);	select_port = XtVaCreateManagedWidget ("selectport",		viewportWidgetClass,select_popup,			XtNforceBars,	(XtArgVal) True,			XtNallowVert,	(XtArgVal) True,		NULL);	select_list = XtVaCreateManagedWidget ("selectlist",		listWidgetClass,select_port,			XtNdefaultColumns, (XtArgVal) 1,		NULL);	set_button_help (select_list,"list of already computed slices");	ps.history_list = select_list;	head_popup = XtVaCreatePopupShell ("headpop",		transientShellWidgetClass,top,		NULL);	head_port = XtVaCreateManagedWidget ("headport",		viewportWidgetClass,head_popup,			XtNforceBars,	(XtArgVal) True,			XtNallowVert,	(XtArgVal) True,		NULL);	proc_popup = XtVaCreatePopupShell ("procpop",		transientShellWidgetClass,top,		NULL);	proc_port = XtVaCreateManagedWidget ("procport",		viewportWidgetClass,proc_popup,			XtNforceBars,	(XtArgVal) True,			XtNallowVert,	(XtArgVal) True,		NULL);	var_popup = XtVaCreatePopupShell ("varpop",		transientShellWidgetClass,top,		NULL);	ps.var_popup = var_popup;	var_port = XtVaCreateManagedWidget ("varport",		viewportWidgetClass,var_popup,			XtNforceBars,	(XtArgVal) True,			XtNallowVert,	(XtArgVal) True,		NULL);	current_proc = n_procs;	make_proc_list();	make_head_list();	head_list = XtVaCreateManagedWidget ("headlist",		listWidgetClass,head_port,			XtNlist,		(XtArgVal) file_name_list,			XtNdefaultColumns, (XtArgVal) 1,		NULL);	adjust_popup_list (head_list);	set_button_help (head_list,"File containing global variable");	proc_list = XtVaCreateManagedWidget ("proclist",		listWidgetClass,proc_port,			XtNlist,		(XtArgVal) proc_name_list,			XtNdefaultColumns, (XtArgVal) 1,		NULL);	adjust_popup_list (proc_list);	set_button_help (proc_list,"Select a proc to see list of local variables");	var_list = XtVaCreateManagedWidget ("varlist",		listWidgetClass,var_port,			/*			XtNlist,		(XtArgVal) global_names,			*/			XtNdefaultColumns, (XtArgVal) 1,		NULL);	set_button_help (var_list,"Select a variable for a slicing criterion");	ps.var_list = var_list;	XtAddCallback (head_list,XtNcallback,head_select,&ps);	XtAddCallback (proc_list,XtNcallback,proc_select,&ps);	XtAddCallback (var_list,XtNcallback,var_select,&ps);	XtAddCallback (select_list,XtNcallback,slice_select,&ps);	frame = XtVaCreateManagedWidget ("frame",formWidgetClass,top,		NULL);	set_button_help (frame,". . .");	/*	file_button = XtVaCreateManagedWidget ("File",		menuButtonWidgetClass,frame,			XtNtop,			(XtArgVal) XtChainTop,			XtNbottom,		(XtArgVal) XtChainTop,			XtNborderWidth,	(XtArgVal) 2,			XtNmenuName,	(XtArgVal) "fileMenu",			XtNright,		(XtArgVal) XtChainLeft,			XtNleft,		(XtArgVal) XtChainLeft,			NULL);	set_button_help (file_button,"Quit button is in this menu");	load = XtVaCreateManagedWidget ("load",smeBSBObjectClass,file_menu,			XtNlabel,		(XtArgVal) "load",			XtNsensitive,	(XtArgVal) False,		NULL);	line = XtVaCreateManagedWidget ("line",smeLineObjectClass,file_menu,			XtNlineWidth,		(XtArgVal) 4,		NULL);	quit = XtVaCreateManagedWidget ("quit",smeBSBObjectClass,file_menu,			XtNlabel,		(XtArgVal) "Exit",		NULL);	*/	quit = XtVaCreateManagedWidget ("quit",commandWidgetClass,frame,			XtNlabel,		(XtArgVal) "Exit",			XtNtop,			(XtArgVal) XtChainTop,			XtNbottom,		(XtArgVal) XtChainTop,			XtNright,		(XtArgVal) XtChainLeft,			XtNleft,		(XtArgVal) XtChainLeft,		NULL);	XtAddCallback (quit,XtNcallback,quitB,NULL);	set_button_help (quit,"Click quit to exit slicer");	select_button = XtVaCreateManagedWidget ("Select",		menuButtonWidgetClass,frame,			XtNtop,			(XtArgVal) XtChainTop,			XtNbottom,		(XtArgVal) XtChainTop,			XtNborderWidth,	(XtArgVal) 2,			XtNmenuName,	(XtArgVal) "selectMenu",			XtNfromHoriz,	(XtArgVal) quit,			XtNright,		(XtArgVal) XtChainLeft,			XtNleft,		(XtArgVal) XtChainLeft,			NULL);	set_button_help (select_button,		"Menu for selecting criteria variables or previous slices");	proc = XtVaCreateManagedWidget ("Procedure",		smeBSBObjectClass,select_menu,			XtNlabel,		(XtArgVal) "Local Variable",		NULL);	XtAddCallback (proc,XtNcallback,proc_pop,proc_popup);	var = XtVaCreateManagedWidget ("Variable",		smeBSBObjectClass,select_menu,			XtNlabel,		(XtArgVal) "Global Variable",		NULL);	XtAddCallback (var,XtNcallback,proc_pop,head_popup);	show_proc = XtVaCreateManagedWidget ("Markproc",		smeBSBObjectClass,select_menu,		XtNlabel,	"Mark proc",		NULL);	show_tree = XtVaCreateManagedWidget ("ShowCallTree",		smeBSBObjectClass,select_menu,		XtNlabel,	"Show call tree",		NULL);	primary = XtVaCreateManagedWidget ("Primary",		smeBSBObjectClass,select_menu,		NULL);	secondary = XtVaCreateManagedWidget ("Secondary",		smeBSBObjectClass,select_menu,		NULL);	ps.proc_popup = proc_popup;	XtAddCallback (primary,XtNcallback,popup_selection,&ps);	XtAddCallback (secondary,XtNcallback,popup_selection,&ps);	XtAddCallback (show_proc,XtNcallback,show_pop,&ps);	XtAddCallback (show_tree,XtNcallback,tree_pop,&ps);	op_button = XtVaCreateManagedWidget ("Operation",		menuButtonWidgetClass,frame,			XtNtop,			(XtArgVal) XtChainTop,			XtNbottom,		(XtArgVal) XtChainTop,			XtNborderWidth,	(XtArgVal) 2,			XtNmenuName,	(XtArgVal) "opMenu",			XtNfromHoriz,	(XtArgVal) select_button,			XtNright,		(XtArgVal) XtChainLeft,			XtNleft,		(XtArgVal) XtChainLeft,			NULL);	set_button_help (op_button,"Popup menu of operations on slices");	dice = XtVaCreateManagedWidget ("Dice",		smeBSBObjectClass,op_menu,		NULL);	dicesp = XtVaCreateManagedWidget ("Dicesp",		smeBSBObjectClass,op_menu,			XtNlabel,		(XtArgVal) "Dice S-P",		NULL);	bb = XtVaCreateManagedWidget ("Backbone",		smeBSBObjectClass,op_menu,			XtNlabel,		(XtArgVal) "Intersection",		NULL);	merge = XtVaCreateManagedWidget ("Union",		smeBSBObjectClass,op_menu,		NULL);    clear = XtCreateManagedWidget("Clear", smeBSBObjectClass,			   op_menu, NULL, 0);    clear_slice = XtVaCreateManagedWidget("ClearSlice",		smeBSBObjectClass, op_menu,			XtNlabel,		(XtArgVal) "Clear Slice History",			   NULL);	XtVaGetValues (op_button,		XtNwidth,&w,		XtNborderWidth,&bw,		XtNx,&x,		NULL);	interrupt = XtVaCreateManagedWidget ("interrupt",		commandWidgetClass,frame,		XtNlabel,			(XtArgVal) "Interrupt",		XtNfromHoriz,		(XtArgVal) op_button,		XtNright,			(XtArgVal) XtChainLeft,		XtNleft,			(XtArgVal) XtChainLeft,		XtNtop,				(XtArgVal) XtChainTop,		XtNbottom,			(XtArgVal) XtChainTop,		NULL);	set_button_help (interrupt,		"Abandon computing slice, show partial result");	XtAddCallback (interrupt,XtNcallback,stop_slicing,NULL);	progress = XtVaCreateManagedWidget ("progress",		labelWidgetClass,frame,		XtNlabel,			(XtArgVal) "      nodes",		XtNfromHoriz,		(XtArgVal) interrupt,		XtNright,			(XtArgVal) XtChainLeft,		XtNleft,			(XtArgVal) XtChainLeft,		XtNtop,				(XtArgVal) XtChainTop,		XtNbottom,			(XtArgVal) XtChainTop,		NULL);	set_button_help (progress,"Give feedback on progress by display of \	# of statements in slice");	at = WIDTH;	help = XtVaCreateManagedWidget ("Help",commandWidgetClass,frame,		/*		XtNhorizDistance,	(XtArgVal) at,		*/		XtNfromHoriz,		(XtArgVal) progress,		XtNright,			(XtArgVal) XtChainRight,		XtNleft,			(XtArgVal) XtChainRight,		XtNtop,				(XtArgVal) XtChainTop,		XtNbottom,			(XtArgVal) XtChainTop,		NULL);	set_button_help (help,"Pop up display of general help");	XtAddCallback (help,XtNcallback,helpB,NULL);	sprintf (buff,"%s %s",		"File: <none> Proc: <none>","Var: <none>");	XtVaGetValues (frame,		XtNwidth,&w,		NULL);	selection_state = XtVaCreateWidget ("state",		labelWidgetClass,frame,		XtNfromVert,		(XtArgVal) help,		XtNleft,			(XtArgVal) XtChainLeft,		XtNright,			(XtArgVal) XtChainRight,		XtNlabel,			(XtArgVal) buff,		XtNwidth,			(XtArgVal) w,		XtNtop,				(XtArgVal) XtChainTop,		XtNbottom,			(XtArgVal) XtChainTop,		XtNjustify,			(XtArgVal) XtJustifyLeft,		NULL);	set_button_help (selection_state,"Show variable selected for slicing criterion");	XtManageChild(selection_state);	sprintf (buff,"%s %s",		"Primary: <none>","Secondary: <none>");	proc_state = XtVaCreateManagedWidget ("pstate",		labelWidgetClass,frame,		XtNfromVert,		(XtArgVal) selection_state,		XtNleft,			(XtArgVal) XtChainLeft,		XtNright,			(XtArgVal) XtChainRight,		XtNlabel,			(XtArgVal) buff,		XtNwidth,			(XtArgVal) w,		XtNtop,				(XtArgVal) XtChainTop,		XtNbottom,			(XtArgVal) XtChainTop,		XtNjustify,			(XtArgVal) XtJustifyLeft,		NULL);	set_button_help (proc_state,		"Show the criteria of the primary and secondary slices");	ps.slice_label = proc_state;	sprintf (buff,"Source text for: %sc",ps.root_file);	display_label = XtVaCreateManagedWidget ("criterion",		labelWidgetClass,frame,		XtNfromVert,		(XtArgVal) proc_state,		XtNleft,			(XtArgVal) XtChainLeft,		XtNright,			(XtArgVal) XtChainRight,		XtNlabel,			(XtArgVal) buff,		XtNtop,				(XtArgVal) XtChainTop,		XtNbottom,			(XtArgVal) XtChainTop,		NULL);	ps.display_label = display_label;	set_button_help (display_label,"Describe current display");	QQQ = slicewin = CreateSliceBox("slicebox",frame);	sprintf (buff,"Describe object under mouse pointer");	content = XtVaCreateManagedWidget ("info",		labelWidgetClass,frame,		XtNfromVert,		(XtArgVal) XtParent(slicewin),		XtNright,			(XtArgVal) XtChainRight,		XtNleft,			(XtArgVal) XtChainLeft,		XtNtop,				(XtArgVal) XtChainBottom,		XtNbottom,			(XtArgVal) XtChainBottom,		XtNjustify,			(XtArgVal) XtJustifyCenter,		XtNlabel,			(XtArgVal) buff,		NULL);	help_label = content;	XtAddEventHandler (content,EnterWindowMask,False,button_help,		"Describe object under mouse pointer");	ps.slicewin = slicewin;	set_button_help (slicewin,"Select slice location via mouse");	XtAddCallback (clear,XtNcallback,clearB,&ps);	XtAddCallback (clear_slice,XtNcallback,clear_sliceB,&ps);	XtAddCallback (slicewin,XtNcallback,slicecall,&ps);	XtAddCallback (bb,XtNcallback,bbcall,&ps);	XtAddCallback (merge,XtNcallback,unioncall,&ps);	XtAddCallback (dice,XtNcallback,dicecall,&ps);	XtAddCallback (dicesp,XtNcallback,dicecallsp,&ps);	sliceframe = XtParent(slicewin);	set_button_help (XtNameToWidget(sliceframe,"bar"),		"Scroll bar to navigate through source text");	set_button_help (XtNameToWidget(sliceframe,"up"),		"Click left mouse button to back up source text by one line");	set_button_help (XtNameToWidget(sliceframe,"dn"),		"Click left mouse button to advance source text by one line");	XtUnmanageChild(sliceframe);	XtVaSetValues(sliceframe,		XtNfromVert,		(XtArgVal) display_label,		XtNtop,				(XtArgVal) XtChainTop,		XtNbottom,			(XtArgVal) XtChainBottom,		NULL);	XtManageChild(sliceframe);	XtInstallAccelerators (frame,help);	XtInstallAccelerators (frame,quit);	XtRealizeWidget (top);	XtVaGetValues (frame,		XtNwidth,&w,		XtNdefaultDistance, &dist,		NULL);	XtVaGetValues (help,		XtNwidth,&www,		XtNborderWidth,&bw,		XtNx,&hx,		NULL);	XtVaGetValues (progress,		XtNwidth,&ww,		XtNx,&cx,		NULL);	ww = w - (cx + ww + 4*bw + dist + www);	XtVaGetValues (selection_state,		XtNborderWidth,&bw,		NULL);	XtUnmanageChild(help);	XtUnmanageChild(selection_state);	XtUnmanageChild(proc_state);	XtVaSetValues (selection_state,		XtNwidth,			(XtArgVal) (w-2*(dist + bw)),		NULL);	XtVaSetValues (proc_state,		XtNwidth,			(XtArgVal) (w-2*(dist + bw)),		NULL);	XtVaSetValues (help,		XtNhorizDistance, ww,		NULL);	XtManageChild(selection_state);	XtManageChild(proc_state);	XtManageChild(help);	strech (frame,content);	strech (frame,display_label);	XtTranslateCoords(top,		(Position) 30,		(Position) 60,		&x,&y);	/*	XtVaSetValues (proc_popup,		XtNx,	(XtArgVal) x,		XtNy,	(XtArgVal) y,		NULL);		*/	ps.slicewin = slicewin;	ps.is_primary = 1;	return slicewin;}

⌨️ 快捷键说明

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