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

📄 tuisourcewin.c

📁 gdb-6.0 linux 下的调试工具
💻 C
📖 第 1 页 / 共 2 页
字号:
	}      winInfo->detail.sourceInfo.horizontalOffset = offset;      tuiUpdateSourceWindowAsIs (				  winInfo,				  s,				  ((TuiWinElementPtr)				   winInfo->generic.content[0])->whichElement.source.lineOrAddr,				  FALSE);    }  return;}				/* tuiHorizontalSourceScroll *//* Set or clear the hasBreak flag in the line whose line is lineNo.  */voidtuiSetIsExecPointAt (TuiLineOrAddress l, TuiWinInfoPtr winInfo){  int changed = 0;  int i;  TuiWinContent content = (TuiWinContent) winInfo->generic.content;  i = 0;  while (i < winInfo->generic.contentSize)    {      int newState;      if (content[i]->whichElement.source.lineOrAddr.addr == l.addr)        newState = TRUE;      else	newState = FALSE;      if (newState != content[i]->whichElement.source.isExecPoint)        {          changed++;          content[i]->whichElement.source.isExecPoint = newState;          tui_show_source_line (winInfo, i + 1);        }      i++;    }  if (changed)    tuiRefreshWin (&winInfo->generic);}/* Update the execution windows to show the active breakpoints.   This is called whenever a breakpoint is inserted, removed or   has its state changed.  */voidtui_update_all_breakpoint_info (){  TuiList* list = sourceWindows ();  int i;  for (i = 0; i < list->count; i++)    {      TuiWinInfoPtr win = (TuiWinInfoPtr) list->list[i];      if (tui_update_breakpoint_info (win, FALSE))        {          tuiUpdateExecInfo (win);        }    }}/* Scan the source window and the breakpoints to update the   hasBreak information for each line.   Returns 1 if something changed and the execution window   must be refreshed.  */inttui_update_breakpoint_info (TuiWinInfoPtr win, int current_only){  int i;  int need_refresh = 0;  TuiSourceInfoPtr src = &win->detail.sourceInfo;  for (i = 0; i < win->generic.contentSize; i++)    {      struct breakpoint *bp;      extern struct breakpoint *breakpoint_chain;      int mode;      TuiSourceElement* line;      line = &((TuiWinElementPtr) win->generic.content[i])->whichElement.source;      if (current_only && !line->isExecPoint)         continue;      /* Scan each breakpoint to see if the current line has something to         do with it.  Identify enable/disabled breakpoints as well as         those that we already hit.  */      mode = 0;      for (bp = breakpoint_chain;           bp != (struct breakpoint *) NULL;           bp = bp->next)        {          if ((win == srcWin               && bp->source_file               && (strcmp (src->filename, bp->source_file) == 0)               && bp->line_number == line->lineOrAddr.lineNo)              || (win == disassemWin                  && bp->address == line->lineOrAddr.addr))            {              if (bp->enable_state == bp_disabled)                mode |= TUI_BP_DISABLED;              else                mode |= TUI_BP_ENABLED;              if (bp->hit_count)                mode |= TUI_BP_HIT;              if (bp->cond)                mode |= TUI_BP_CONDITIONAL;              if (bp->type == bp_hardware_breakpoint)                mode |= TUI_BP_HARDWARE;            }        }      if (line->hasBreak != mode)        {          line->hasBreak = mode;          need_refresh = 1;        }    }  return need_refresh;}/*   ** tuiSetExecInfoContent().   **      Function to initialize the content of the execution info window,   **      based upon the input window which is either the source or   **      disassembly window. */TuiStatustuiSetExecInfoContent (TuiWinInfoPtr winInfo){  TuiStatus ret = TUI_SUCCESS;  if (winInfo->detail.sourceInfo.executionInfo != (TuiGenWinInfoPtr) NULL)    {      TuiGenWinInfoPtr execInfoPtr = winInfo->detail.sourceInfo.executionInfo;      if (execInfoPtr->content == (OpaquePtr) NULL)	execInfoPtr->content =	  (OpaquePtr) allocContent (winInfo->generic.height,				    execInfoPtr->type);      if (execInfoPtr->content != (OpaquePtr) NULL)	{	  int i;          tui_update_breakpoint_info (winInfo, 1);	  for (i = 0; i < winInfo->generic.contentSize; i++)	    {	      TuiWinElementPtr element;	      TuiWinElementPtr srcElement;              int mode;	      element = (TuiWinElementPtr) execInfoPtr->content[i];	      srcElement = (TuiWinElementPtr) winInfo->generic.content[i];              memset(element->whichElement.simpleString, ' ',                     sizeof(element->whichElement.simpleString));              element->whichElement.simpleString[TUI_EXECINFO_SIZE - 1] = 0;	      /* Now update the exec info content based upon the state                 of each line as indicated by the source content.  */              mode = srcElement->whichElement.source.hasBreak;              if (mode & TUI_BP_HIT)                element->whichElement.simpleString[TUI_BP_HIT_POS] =                  (mode & TUI_BP_HARDWARE) ? 'H' : 'B';              else if (mode & (TUI_BP_ENABLED | TUI_BP_DISABLED))                element->whichElement.simpleString[TUI_BP_HIT_POS] =                  (mode & TUI_BP_HARDWARE) ? 'h' : 'b';              if (mode & TUI_BP_ENABLED)                element->whichElement.simpleString[TUI_BP_BREAK_POS] = '+';              else if (mode & TUI_BP_DISABLED)                element->whichElement.simpleString[TUI_BP_BREAK_POS] = '-';              if (srcElement->whichElement.source.isExecPoint)                element->whichElement.simpleString[TUI_EXEC_POS] = '>';	    }	  execInfoPtr->contentSize = winInfo->generic.contentSize;	}      else	ret = TUI_FAILURE;    }  return ret;}/*   ** tuiShowExecInfoContent(). */voidtuiShowExecInfoContent (TuiWinInfoPtr winInfo){  TuiGenWinInfoPtr execInfo = winInfo->detail.sourceInfo.executionInfo;  int curLine;  werase (execInfo->handle);  tuiRefreshWin (execInfo);  for (curLine = 1; (curLine <= execInfo->contentSize); curLine++)    mvwaddstr (execInfo->handle,	       curLine,	       0,	       ((TuiWinElementPtr)		execInfo->content[curLine - 1])->whichElement.simpleString);  tuiRefreshWin (execInfo);  execInfo->contentInUse = TRUE;  return;}				/* tuiShowExecInfoContent *//*   ** tuiEraseExecInfoContent(). */voidtuiEraseExecInfoContent (TuiWinInfoPtr winInfo){  TuiGenWinInfoPtr execInfo = winInfo->detail.sourceInfo.executionInfo;  werase (execInfo->handle);  tuiRefreshWin (execInfo);  return;}				/* tuiEraseExecInfoContent *//*   ** tuiClearExecInfoContent(). */voidtuiClearExecInfoContent (TuiWinInfoPtr winInfo){  winInfo->detail.sourceInfo.executionInfo->contentInUse = FALSE;  tuiEraseExecInfoContent (winInfo);  return;}				/* tuiClearExecInfoContent *//*   ** tuiUpdateExecInfo().   **        Function to update the execution info window */voidtuiUpdateExecInfo (TuiWinInfoPtr winInfo){  tuiSetExecInfoContent (winInfo);  tuiShowExecInfoContent (winInfo);}				/* tuiUpdateExecInfo */TuiStatustuiAllocSourceBuffer (TuiWinInfoPtr winInfo){  register char *srcLineBuf;  register int i, lineWidth, maxLines;  TuiStatus ret = TUI_FAILURE;  maxLines = winInfo->generic.height;	/* less the highlight box */  lineWidth = winInfo->generic.width - 1;  /*     ** Allocate the buffer for the source lines.  Do this only once since they     ** will be re-used for all source displays.  The only other time this will     ** be done is when a window's size changes.   */  if (winInfo->generic.content == (OpaquePtr) NULL)    {      srcLineBuf = (char *) xmalloc ((maxLines * lineWidth) * sizeof (char));      if (srcLineBuf == (char *) NULL)	fputs_unfiltered (	   "Unable to Allocate Memory for Source or Disassembly Display.\n",			   gdb_stderr);      else	{	  /* allocate the content list */	  if ((winInfo->generic.content =	  (OpaquePtr) allocContent (maxLines, SRC_WIN)) == (OpaquePtr) NULL)	    {	      tuiFree (srcLineBuf);	      srcLineBuf = (char *) NULL;	      fputs_unfiltered (				 "Unable to Allocate Memory for Source or Disassembly Display.\n",				 gdb_stderr);	    }	}      for (i = 0; i < maxLines; i++)	((TuiWinElementPtr)	 winInfo->generic.content[i])->whichElement.source.line =	  srcLineBuf + (lineWidth * i);      ret = TUI_SUCCESS;    }  else    ret = TUI_SUCCESS;  return ret;}				/* tuiAllocSourceBuffer *//*   ** tuiLineIsDisplayed().   **      Answer whether the a particular line number or address is displayed   **      in the current source window. */inttuiLineIsDisplayed (int line, TuiWinInfoPtr winInfo,                    int checkThreshold){  int isDisplayed = FALSE;  int i, threshold;  if (checkThreshold)    threshold = SCROLL_THRESHOLD;  else    threshold = 0;  i = 0;  while (i < winInfo->generic.contentSize - threshold && !isDisplayed)    {      isDisplayed = (((TuiWinElementPtr)		      winInfo->generic.content[i])->whichElement.source.lineOrAddr.lineNo		     == (int) line);      i++;    }  return isDisplayed;}				/* tuiLineIsDisplayed *//*   ** tuiLineIsDisplayed().   **      Answer whether the a particular line number or address is displayed   **      in the current source window. */inttuiAddrIsDisplayed (CORE_ADDR addr, TuiWinInfoPtr winInfo,		    int checkThreshold){  int isDisplayed = FALSE;  int i, threshold;  if (checkThreshold)    threshold = SCROLL_THRESHOLD;  else    threshold = 0;  i = 0;  while (i < winInfo->generic.contentSize - threshold && !isDisplayed)    {      isDisplayed = (((TuiWinElementPtr)		      winInfo->generic.content[i])->whichElement.source.lineOrAddr.addr		     == addr);      i++;    }  return isDisplayed;}/******************************************* STATIC LOCAL FUNCTIONS               ********************************************/

⌨️ 快捷键说明

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