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

📄 valgrind_object.cpp

📁 Linux平台下的内核及程序调试器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   case EM_WARNS:   case GEN_SUPP:   case ERROR_LIMIT:   case DB_COMMAND:   case DB_ATTACH:      /* Note: gui option disabled, so only reaches here from cmdline */      errval = PERROR_BADOPT;      vkPrintErr("Option disabled '--%s'", opt->m_longFlag.latin1());      vkPrintErr(" - Valgrind presets these options for XML output.");      vkPrintErr(" - See valgrind/docs/internals/xml_output.txt.");      break;   case XML_COMMENT:      /* don't wan't xml in comment: escape '<','&',etc */      argval = escapeEntities( argval );      break;   case SUPPS_DIRS: {  /* not popt: only reaches here from gui */      /* check all entries are valid dirs */      QStringList dirs = QStringList::split(sep, argval);      QStringList::iterator it = dirs.begin();      for (; it != dirs.end(); ++it) {         /* check dirs ok */         *it = dirCheck( &errval, *it, true, false );         if ( errval != PARSED_OK )            break;      }      argval = dirs.join(sep);   } break;   case SUPPS_AVAIL:  /* not popt: only reaches here from gui */   case SUPPS_SEL: {  /* is popt: --suppressions */      QStringList files = QStringList::split(sep, argval);      QStringList::iterator it = files.begin();      for (; it != files.end(); ++it) {         /* check files ok & readable */         *it = fileCheck( &errval, *it, true, false );         if ( errval != PARSED_OK )            break;         /* TODO: do we care if it doesn't end in .supp?            - breaks the suppression widgets a little, as only lists those ending in .supp ... */         /* TODO: ? check valid suppression files */      }      argval = files.join(sep);   } break;   case TRACE_CH: {#if 0      if ( opt->isValidArg( &errval, argval ) ) {         if ( argval == "yes" ) {            if ( vkConfig->rdBool( "db-attach", "valgrind" ) )               errval = PERROR_DB_CONFLICT;         }      }#else      /* Disabled for now - can't deal with the multiple xml files this generates */      /* Note: Also disabled in ValgrindOptionsPage() */      errval = PERROR_BADOPT;      vkPrintErr("Option disabled '--%s'", opt->m_longFlag.latin1());      vkPrintErr(" - Valkyrie can't yet handle the multiple xml files this generates.");#endif   } break;   case XML_OUTPUT:      /* Note: gui option disabled, so only reaches here from cmdline */      errval = PERROR_BADOPT;      vkPrintErr("Option disabled '--%s'", opt->m_longFlag.latin1());      vkPrintErr(" - Valkyrie always requires xml output from Valgrind.");      break;#if 0 // TODO: Fix Valgrind to allow gdb attaching with XML output   case DB_COMMAND: {   /* gdb -nw %f %p */      int pos = argval.find( ' ' );      QString tmp = argval.left( pos );      argval = binaryCheck( &errval, tmp );      argval += tmp.right( tmp.length() - pos+1 );      // vkPrint("db_command: %s", argval.latin1() );   } break;   /* check for conflict with --trace-children */   case DB_ATTACH:      if ( opt->isValidArg( &errval, argval ) ) {         if ( argval == "yes" ) {            if ( vkConfig->rdBool( "trace-children","valgrind" ) )               errval = PERROR_DB_CONFLICT;         }      } break;#endif   case KERN_VAR:      break;   /* logging options */   /* for all tools we use --log-file-exactly=xyz.      this is set in Valkyrie::runTool(), and updated by the tool.      all logging options are therefore ignored */   case LOG_FILE:   case LOG_FD:   case LOG_PID:   case LOG_QUAL:   case LOG_SOCKET:      /* Note: gui options disabled, so only reaches here from cmdline */      errval = PERROR_BADOPT;      vkPrintErr("Option disabled '--%s'", opt->m_longFlag.latin1());      vkPrintErr(" - Valkyrie sets its own logging options to gather data from Valgrind.");      break;   /* Not yet implemented */   case INPUT_FD:      /* Note: gui option disabled, so only reaches here from cmdline */      errval = PERROR_BADOPT;      vkPrintErr("Option disabled '--%s'", opt->m_longFlag.latin1());      vkPrintErr(" - Not yet implemented.");      break;   default:      vk_assert_never_reached();   }   return errval;}/* valkyrie hijacks any log-to-file flags; these are not passed to   valgrind, but are used after parsing has finished to save to. */QStringList Valgrind::modifiedVgFlags( const ToolObject* tool_obj ){   QStringList modFlags;   QString defVal, cfgVal, flag;   for ( Option* opt = m_optList.first(); opt; opt = m_optList.next() ) {      flag = opt->m_longFlag.isEmpty() ? opt->m_shortFlag                                       : opt->m_longFlag;      defVal = opt->m_defaultValue;      cfgVal = vkConfig->rdEntry( opt->cfgKey(), name() );      switch ( (Valgrind::vgOpts)opt->m_key ) {      /* we never want these included */      case TOOL:            /* tool set by valkyrie */      case SUPPS_DIRS:      /* false option */      case SUPPS_AVAIL:     /* false option */         break;      /* only error-reporting tools have suppressions */      case SUPPS_SEL: {         if ( tool_obj->name() == "memcheck" ) {            /* we need '--suppressions=' before each and every filename */            QString optEntry = vkConfig->rdEntry( opt->cfgKey(), name() );            QStringList files = QStringList::split( ",", optEntry );            for ( unsigned int i=0; i<files.count(); i++ ) {               modFlags << "--" + opt->cfgKey() + "=" + files[i];            }         }      } break;      /* for memcheck we always need xml=yes */      case XML_OUTPUT:         if ( tool_obj->name() == "memcheck")            modFlags << "--" + opt->cfgKey() + "=yes";         else            if ( defVal != cfgVal )               modFlags << "--" + opt->cfgKey() + "=" + cfgVal;         break;      case VERBOSITY:      case TRACK_FDS:      case TIME_STAMP:      case EM_WARNS:      case GEN_SUPP:      case ERROR_LIMIT:      case DB_ATTACH:      case DB_COMMAND:         if ( defVal != cfgVal ) {            // disabled for now: /* gui options not disabled: other tools use these options */            if ( tool_obj->name() == "memcheck") {               /* memcheck presets/ignores these options for xml output                  - ignore these opts                  - see valgrind/docs/internals/xml_output.txt */            } else {               modFlags << "--" + opt->cfgKey() + "=" + cfgVal;            }         }         break;      /* for all tools we use --log-file-exactly=xyz.         this is set in Valkyrie::runTool(), and updated by the tool.         all logging options should therefore not be used */      case LOG_FILE:      case LOG_FD:      case LOG_PID:      case LOG_QUAL:      case LOG_SOCKET:         /* ignore these opts */         break;      default:         if ( defVal != cfgVal ) {            modFlags << "--" + opt->cfgKey() + "=" + cfgVal;         }         break;      }   }   return modFlags;}/* Register tools */void Valgrind::initToolObjects(){    int objId = VkObject::ID_TOOL0;   m_toolObjList.append( new Memcheck  ( objId++ ) );   // TODO: I need another lifetime!//   m_toolObjList.append( new Cachegrind( objId++ ) );//   m_toolObjList.append( new Massif    ( objId++ ) );}/* ToolObject access -------------------------------------------=---- */ /* Returns a list of all ptrs to ToolObjects */ToolObjList Valgrind::toolObjList(){   return m_toolObjList;}/* Returns a ToolObject's objectId based on its name */int Valgrind::toolObjId( const QString& name ){   return toolObj(name)->objId();}/* Returns a ToolObject based on its objectId */ToolObject* Valgrind::toolObj( int tid ){   //   vkPrint("Valgrind::toolObj( int tid=%d )", tid);   vk_assert( tid >= ID_TOOL0 );   ToolObject* tool = m_toolObjList.at( tid - ID_TOOL0 );   vk_assert( tool != 0 );   vk_assert( tool->objId() == tid );   return tool;}/* Returns a ToolObject based on its name */ToolObject* Valgrind::toolObj( const QString& name ) {   ToolObject* tool;   for ( tool = m_toolObjList.first(); tool; tool = m_toolObjList.next() ) {      if ( tool->name() == name )         return tool;   }   vk_assert_never_reached();   return NULL;}

⌨️ 快捷键说明

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