65.9K
CodeProject 正在变化。 阅读更多。
Home

待办事项列表附加组件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (6投票s)

2001年5月15日

CPOL

3分钟阅读

viewsIcon

253442

downloadIcon

2910

一个Visual Studio插件,帮助导航到TODO:、TASK:等注释,并在调试模式下显示STL容器,例如std::string、std::list等。

插件查找对话框

To-do缓存插件旨在简化开发人员的任务,例如调试和代码管理。我的工作成果是一个Visual Studio插件组件。它使某些事情更容易。

调试功能

调试的主要功能是展开STL容器。此插件支持调试以下STL容器:

  •      std::vector
  •      std::list
  •      std::map
  •      std::multimap
  •      std::set
  •      std::multiset

此外,还添加了特殊的调试功能,它们为Visual C++调试器添加了对超长字符串的支持。插件修复了Visual C++调试器对字符串输出的限制。(Visual C++调试器只能显示字符串的242个字符)。此插件可以展开超长字符串(超过65536个字符)

  •      CString (MFC类)
  •      std::string
  •      BSTR 和 WCHAR*
  •      bstr_t (COM支持 )
  •      char *
  •      CComBSTR (ATL类)

插件还可以显示格式化/缩进友好的XML长字符串。它还支持通过简单的字符串或正则表达式 (RegExp) 快速查找。在查找对话框中,任何部分字符串都可以复制到系统剪贴板,供开发人员将来使用。

代码管理功能

插件具有可用于管理Visual C++项目源代码的特殊功能。简单来说,它就像这样:

开发人员添加带有特殊签名的注释,例如: // TODO: 在此关键字之后可以编写任务描述。插件可以支持开发人员想要的任意多个关键字。此Visual C++插件的主要优点是它解析注释。插件解析源代码中的所有注释,检查注释的字符串中是否存在所需的关键字,并显示结果。插件能够区分两种类型的注释 // - 单行注释和 /* - 多行注释。插件中使用的每个关键字必须以 '//' 或 '/*' 符号开头 - 如果你只想解析注释,以及任何其他符号,如果你想解析完整的源代码。

所有解析结果都缓存在开发人员保存对文件的更改时更新。这就是为什么插件名为 To-Do Cached。其工作结果将打印到输出窗口的选项卡中。在输出窗口中查找所需的字符串,并双击它以转到源代码中的该字符串。插件还理解写成单行注释列表的多行注释,例如:

// TODO: -- start -- write code which do something special and with context and
// and continue work -- end --

插件会将此注释解释为一个长注释,并将其显示为一行。工作结果可以排序和过滤。

工具栏外观如下:


显示结果 这是工具栏中的第一个按钮(从左到右)。按下此按钮可在输出窗口的选项卡中显示关键字搜索的结果。很遗憾,我仍然不知道如何在按下按钮时设置活动的选项卡。因此,按下后必须手动将选项卡更改为
重新解析工作区

按下此按钮可释放插件的缓存。仅当工作区中文件过多时才需要。之后不要打开“选项”对话框——根据插件逻辑,它将不得不再次解析工作区才能显示统计信息。

选项对话框

可以使用“选项”对话框配置插件的某些功能。

将所有文件制表化

按下后,插件将自动打开活动项目中的所有文件,并将文件中的所有空格更改为制表符。

取消所有文件的制表化

“制表化”操作的反向过程。插件将打开活动项目的所有文件,并将所有制表符更改为空格。

STL 调试对话框

打开插件的STL调试对话框。按下按钮后,插件将尝试通过选择或光标位置在当前打开的源文件中找到变量。

使用STL和C++类数据类型测试的应用程序示例。

#pragma warning( disable : 4786 )

#include <string>
#include <vector>
#include <map>
#include <list>
#include <set>
#include <queue>
#include <deque>
#include <stack>

#include <comutil.h>
#include <atlbase.h>

typedef std::string string;

// map types
typedef std::map<long, string>    TLongStr;
typedef std::map<string, string > TStrStr;
typedef std::map<long, long>      TLongLong;

// multimap types
typedef std::multimap<long, string>   TMLongStr;
typedef std::multimap<long, long>     TMLongLong;
typedef std::multimap<string, string> TMStrStr;

// vector types
typedef std::vector<string> TVStr;
typedef std::vector<long>   TVLong;

// list types
typedef std::list<string> TLStr;
typedef std::list<long>   TLLong;

// set
typedef std::set<long>        TSLong;
typedef std::set<string>      TSStr;
typedef std::multiset<long>   TMsLong;
typedef std::multiset<string> TMsStr;


#define DEF_TEST_STRING "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r\n\t\v\b"
#define STR_DEF_TEST  string( DEF_TEST_STRING )

int main( int argc, char* argv[] )
{
  char buffer[ 8192 ];
  
  // maps
  TLongLong   mapLL;  TLongStr    mapLS;  TStrStr     mapSS;
  TMLongLong  mmapLL; TMLongStr   mmapLS; TMStrStr    mmapSS;

  // list, vector
  TLLong      listL;  TLStr       listS;
  TVStr       vecS;   TVLong      vecL;

  // set, multiset
  TSLong      setL;   TSStr      setS;
  TMsLong     msetL;  TMsStr      msetS;

  string    strValue = DEF_TEST_STRING;

  for( int j=0; j<10; j++ )
    strValue += strValue;

  const char * czBuffTestLongVariableNamesWithSomething = strValue.c_str( );
  CString   cstrClass = czBuffTestLongVariableNamesWithSomething;
  CComBSTR  combstr = cstrClass;  
  BSTR      bstr = combstr;
  bstr_t    TBstr = bstr;

  for( long i = 0; i<4000; i++ )
  {
    sprintf( buffer, "%04d - ABCDEFGHIJKLMNOPQRSTUVWXYZ" , i );
    string temp = buffer;

    mapLL.insert( TLongLong::value_type( i, i+1 ) );
    mapLS.insert( TLongStr::value_type( i, temp ) );
    mapSS.insert( TStrStr::value_type( temp, temp ) );

    mmapLL.insert( TMLongLong::value_type( i, i+1 ) );
    mmapLL.insert( TMLongLong::value_type( i, i ) );
    mmapLS.insert( TMLongStr::value_type( i, temp ) );
    mmapLS.insert( TMLongStr::value_type( i, temp ) );
    mmapSS.insert( TMStrStr::value_type( temp, temp ) );
    mmapSS.insert( TMStrStr::value_type( temp, temp ) );

    listL.push_back( i );
    listS.push_back( temp );
    vecL.push_back( i );
    vecS.push_back( temp );
    
    setL.insert( i );
    setS.insert( temp );
    
    msetL.insert( i );
    msetL.insert( i );

    msetS.insert( temp );
    msetS.insert( temp );
  }

  return 0;
}

历史

发布日期:2001年8月17日
第一篇文章发布到 CodeProject
从那时起,许多事情都发生了变化,并添加了新功能。

更新:2001年9月7日
大量更改。

更新:2002年1月20日
更多更改。

更新:2002年4月21日
更新下载包

© . All rights reserved.