By Bryan Wu, on 六月 4th, 2009, Category: CodeLite IDE
Tags: accelerator, CodeLite IDE, compiler, Debugging, GDB, IDE Family, Programming, 调试
CBForge.com站内已经有好几篇关于CodeBlocks调试的文章,今天转载并部分翻译一篇关于CodeLite的Debugging文章供大家参考。因为在CodeInsight中不打算支持Compiler/GDB等编译、调试相关的功能,所以不打算后续再写关于这部分的代码分析文章了。如果哪位朋友有兴趣的话,可以继续供稿。
这一篇中主要包括了:CodeLite GDB设置;Attach到进程;Debugger UI和Debugger Shortcut几部分。CodeLite在GDB之上封装了一层,但是它并没有使用GDB的命令行模式,而是使用了MI模式。所以调试的输出可能看起来不像你平时知道的那样。这儿有一篇关于GDB/MI的语法说明的文章可以参考:GDB/MI command syntax
Continue reading Debugging With CodeLite - CodeLite调试简介 - 全文阅读
By Bryan Wu, on 六月 1st, 2009, Category: C++ Programming, CodeLite IDE, wxWidgets
Tags: CodeLite IDE, IPlugin, plugin, wxDynamicLibrary, wxWidgets, 动态链接库, 插件, 源代码
上回书说到IPlugin接口和众插件之间的关系,这里讲讲插件加载的过程。加载点在系统初始化时Framezhong 调用,上次也说过。这里主要是从PluginManager::Load() 说起。首先读取插件配置文件 config/plugins.xml,并将信息保存到std::map<wxString, PluginInfo> m_pluginsInfo中,这个成员m_pluginsInfo是属于PluginManager,这个map保存了插件名称和Pluginfo的映射关系。接着TagManagerST和LanguageST互相赋值。
现在进入重点循环,针对插件目录下的每个.dll/.so文件,会进行1)加载动态库;2)读插件信息;3)加载插件;4)调用插件相关创建toolbar和menu的函数。下面一一详述:
Continue reading CodeLite Plugin Internal(2)-Load: 插件加载分析 - 全文阅读
By Bryan Wu, on 五月 27th, 2009, Category: C++ Programming, CodeLite IDE, wxWidgets
Tags: CodeLite IDE, IPlugin, plugin, pure virtual method, 代码分析, 接口, 插件
所有的CodeLite插件都以动态库的形式(.dll or .so)保存在/plugins下,通过程序初始化时调用Frame::LoadPlugins加载[CodeLite的初始化分析在另外一篇文章中已有详述,请在ide.cbforge.com站内参阅]。插件相关的配置保存在/config/plugins.xml文件。文件为XML格式,每一插件项都保存有以下几项:SerializedObject Name,Plugin Name,Author,Description and Version。关于插件的实现我们会分几篇文章分析,这个第一篇主要关注IPlugin接口的实现。
IPlugin is the interface that defines a plugin for CodeLite. Each plugin must implement the pure virtual methods of this interface. The plugin gains access to CodeLite data by using the m_mgr member.
Continue reading CodeLite Plugin Internal(1) – IPlugin interface - 全文阅读
By Bryan Wu, on 五月 25th, 2009, Category: C++ Programming, CodeLite IDE, wxWidgets
Tags: accelerator, CodeLite IDE, GUI, plugin, Singleton Pattern, Splash Screen, wxApp, wxFrame, wxGTK, 代码分析, 插件
转载请注明出处,该文章来源于cbforge.com by Bryan Wu. CodeLite IDE的主应用程序类实现在文件 /liteeditor/app.cpp中,系统初始化时,从wxApp继承的App类会调用OnInit成员函数,bool App::OnInit()
- If it is Linux or MAC system, block signal pipe first;
- wxSocketBase::Initialize();
- 打开fatal exception handler,假如系统crash,会调用wxApp::OnFatalException,在此处可以采集一些调试信息;
- InitXmlResource:通过wxMemoryFSHandler加载资源文件到内存,包括很多PNG文件和xml文件;
- 调用wxCmdLineParser解析命令行参数,命令行描述如下:
假如是h,会打印帮助并推出,如果有b,重新设置basedir。static const wxCmdLineEntryDesc cmdLineDesc[] = {
{wxCMD_LINE_SWITCH, “v“, “version”, “Print current version”, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
{wxCMD_LINE_SWITCH, “h“, “help”, “Print usage”, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
{wxCMD_LINE_OPTION, “l“, “line”, “Open the file at a given line number”, wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL },
{wxCMD_LINE_OPTION, “b“, “basedir”, “The base directory of CodeLite”, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
{wxCMD_LINE_PARAM, NULL, NULL, “Input file”, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE|wxCMD_LINE_PARAM_OPTIONAL },
{wxCMD_LINE_NONE }
};
- 设置各种目录,包括homeDir,installPath,CurDir,StartupDir等;
- Load Menu resource, rc/menu.xrc
- Initialize the configuration file locater,ConfFileLocator::Instance()->Initialize
- 初始化Manager类,该类从Singleton Pattern template而来;
- read the last frame size from the configuration file and initialise editor configuration files;
- 加入SingleInstance为真,我们需要通过调用wxSingleInstanceChecker来检查CodeLite运行实例是否唯一;
- Update PATH environment variable with the install directory and MinGW default installation (if exists)
- 显示splash screen,图片存储在 /images/splashscreen.png(可选,配置在GeneralInfo中)
- 重头戏来了,Frame::Initialize,初始化Frame中会包括很多内容,下面详述;
- update the accelerators table;
- 显示由第14步初始化的Frame并置为top window;
- 刚才第5步中解析的结果中如果有line,和input file,会依次打开并跳转至line-1行;
- 最后一步:通过wxLogMessage打印Install path和Startup Path信息,Over。
Continue reading CodeLite Initializaion analysis - 初始化流程分析(1) - 全文阅读
By Bryan Wu, on 五月 22nd, 2009, Category: C++ Programming, CodeLite IDE
Tags: C++, CodeLite IDE, Singleton Pattern, Template, 单件模式, 模板, 编程
CodeLite中实现了一个简单的Singleton Pattern模板并有10个模块使用了它,通过源码我们可以看到它并没有考虑多线程安全和垃圾回收等。
Singleton Pattern的作用是保证一个类仅有一个实例,并提供一个访问它的全局访问点。Singleton模式其实是对全局静态变量的一个取代策略,上面提到的Singleton模式的两个作用在C++中是通过如下的机制实现的:1)仅有一个实例,提供一个类的静态成员变量,大家知道类的静态成员变量对于一个类的所有对象而言是惟一的 2)提供一个访问它的全局访问点,也就是提供对应的访问这个静态成员变量的静态成员函数,对类的所有对象而言也是惟一的.在C++中,可以直接使用类域进行访问而不必初始化一个类的对象。
Continue reading Codelite代码分析之 Singleton Pattern Template实现及应用 - 全文阅读
通过点击菜单Workspace->Create New Project,系统会 1)调用:Frame::OnProjectNewProject
2) 该函数中将创建对话框 NewProjectDlg,其中会读取 templates/projects目录下所有项目模板文件和编译器列表
3) 读取从第二步对话框中得到的数据并调用Manager::CreateProject ( ProjectData &data )创建项目。
所有的项目模板文件都是XML格式的,所以如果我们有新模板需求的话,可以定制自己的模板文件供用户使用。
Continue reading CodeLite代码分析之 – Create New Project流程 - 全文阅读
By Bryan Wu, on 五月 20th, 2009, Category: Code Insight, CodeLite IDE, wxWidgets
Tags: Code Insight, CodeLite IDE, Internationalization, wxWidgets, 中文, 国际化
在Codelite BBS上可以看到短时间内他们没有支持多语言的计划,所以只能自己动手啦。
第一步想支持中文的话,需要做3件事:
1)将所有需要支持翻译的字符串(包括在菜单、messagebox等等中的)从现有的wxT()替换成_();
2) 在程序初始化时支持读入和解析;
3)提供附加配置项以供用户选择。
下面是一篇网上转载的关于利用wxwidgets实现国际化支持的技术文章以供参考。
Continue reading CodeLite to CodeInsight task 1: Internationalization - 全文阅读
以下是我在Window XP下利用CodeLite编译CodeLite源代码的Log。
删除掉很多编译.o的记录(用省略号代替),我们通过以下可以看到CodeLite的主要dll(.so)和可执行文件的依赖关系和生成过程。
其中如果需要缩减为一个codeinsight,我们通过修改.mk文件就可以很快瘦身。第二步阅读源代码再修改和改进其他部分。
Continue reading CodeLite 编译解析(with Compile log) - 全文阅读
By Bryan Wu, on 五月 15th, 2009, Category: Code::Blocks, CodeLite IDE
Tags: code blocks, CodeLite IDE, cross platform, cscope, GPL, Open Source, Source Insight
Bryan Wu: cbforge at Gmail dot com.
一直受困于Source Insight平台限制,也一直希望实现一个替代品。之前一直在阅读Code Blocks IDE的代码并且也移植了Cscope 进去以希望可以逐步实现这个目标。但是现在发现其实CodeLite更加接近这个目标,通过做减法可以很快实现一个简洁版本的开源Source Insight,关键是跨平台。试用和通过一些修改,我想第一个试用版本的 Open source “Source Insight”会很快和大家见面,不知道是不是会有人喜欢用?
工欲善其事,必先利其器也,我相信编程的朋友一定或多或少的通过Source Insight受益,如果您也有同样的想法和时间,可以加入一起把这个想法实现并定制一些高级功能供大家使用。
Continue reading 加法?减法:CodeLite or Code::Blocks just for another sourceinsight - 全文阅读
|
|
|