简介
当使用传统的IDE开发软件,你的工作被局限在编码工具,不能把设计和代码有效地关联。EA可以让你把设计和开发一起完成。可以让你设计模型、从模型开发代码,然后进行测试和分析。
本文介绍如下方面:
第一部分:编码、构建和调试。
EA提供如下能力:
代码编辑
包括标准的代码编辑,例如语法高亮显示和智能提示。自动识别、goto定义和goto声明。
连接到编译器
可以连接到外部编编译器,进行编译和捕获编译错误。
调试功能
可以设置断点,通过视图检查执行的数据
第二部分:记录、分析和细化。
记录、分析和细化的目的是为了提高代码的正确性和效率,以便满足功能和性能需求。这包括监视顺序流、执行时间和资源的使用。EA提供这些功能在他的调试菜单里。分析工具提供:
代码如何执行的质量评估
代码性能的质量评估
可视化执行工具可以创建顺序图。这有助于确定逻辑错误,暴露不期望出现的系统行为,发现数据流的不一致性。
Profiling和Workbench可以提供质量评估。这对见识运行中的系统很有用。 |
1.编码、构建和调试
本文描述如何在EA中连接到进行代码编译和调试。
基于模型的开发过程一般如下:
- 进行设计建模
- 基于模型生成代码
- 配置代码编译的环境
- 编辑代码
- 编译代码
- 设置断点和监视的变量
- 执行调试,并监视变量、内存
如下是EA中的编码、构建、和调试过程工作流图:
1.1 EA连接到编译器
EA允许用户在建模环境中连接到编译器和自动化编译过程。也可以使用内部调试器运行应用。这些设施包括标准调试选项,例如断点设置、执行和单步执行代码。选项视图“上下文数据”可以查看上下文数据,例如“变量和堆栈视图。”
1.2 代码构建和调试的前置条件
为了使用集成开发选项在EA中如下过程已经完成:
- 类在模型中定义。
- 在EA中的类关联到他们的代码文件(看第二节)。
- 正确的设置了外部编译器(即java和 VS.net)(更多信息请看第三节)。
确认如下已经完成:
- 连接到编译器是有效的。
- 任何操作系统环境变量,(例如 java的CLASSPATH),需要被设置。
本节也包括如何连接EA到编译器,以及在编码和调试之前需要什么前置条件被设置。如下的章节讨论如何使用内部的编辑工具。
2. 工作于代码
EA提供编辑代码、构建应用和调试代码的功能。本章包括如何设置编辑、构建和调试工具的视图。
2.1 建立自己的代码
有两个方法在模型中连接代码:建摸类的结构,然后生成框架代码。或者对一个已经存在的代码进行逆向工程。
适用于独立于平台的类。使用MDA Transform 生成特定平台的模型,如果勾选了Generate
Code on result ,则转换为特定平台模型后,自动生成该平台代码。
2.2 逆向工程
如果代码已经存在,可以导入代码到EA项目、逆向出模型。
2.3 代码编辑
代码和模型可以一起编辑的好处是能够快读确定代码是否符合模型的规则。并可以在模型中快速调试应用。
在代码编辑器中的功能和变量的上下文引用
上下文菜单-goto declaration /
goto definition /search
代码编辑器和调试视图
3. 配置构建和调试
EA中可以配置自动化构建的环境。
3.1 设置一个分析脚本
在EA中使用分析脚本,可以使用.net 和java编译器进行自动化编译,也可以直接连接到php解释器,本章包括如何设置这些链接。
连接EA和外部编译器
3.2 分析脚本
在任何模型中有可能有多个不同的应用在开发。为每个应用定义一个独立的编译脚本可以。这些可以被创建和访问从
执行分析器视图(Execution Analyzer view)。可以通过主菜单:Analyzer|Execution
Analyzer。
选择一个包含构建脚本的分析脚本。
双击分析脚本可以打开包含脚本细节的对话框。
这些脚本包括设置为构建(编译)、运行、调试、运行单元和测试点测试,生成顺序图。在本章,你可以聚焦到构建和调试选项。
3.3 设置到构建/编译器的连接
如下为添加一个新的构建脚本的方法:
1. 在 Execution Analyzer 视图 选择
New script icon
2. 显示包的选择视图 让您可以选择package tree-
包含具有代码的类
3. 选一个包,ok
4. 在 Execution Analyzer 对话框定义构建编译器的位置和缺省的代码目录
5. 点击ok,保存脚本,然后返回到Execution Analyzer视图
更多的有关设置构建脚本的细节请参见帮助Execution Analysis下的“Add
Commands”主题。
可以使用
执行构建。这将启动编译器 并且记录在EA输出窗口列出的日志。如下是一个日志的示例-使用Visual
Studio 编译。
提示:
当设置多个构建脚本,简化的方法是使用一个 local path 为同一个编译器目录,为了设置
local path 在主菜单选择Settings| Local Ptahs。
设置好后,就可以在构建脚本中使用local path 定义编译器的路径。
这个local path 可以被用于多个构建脚本,可以带来如下方便: 创建新的构建脚本包含相同编译器
编译器版本升级。这设置了一个单一的路径点需要被更新。 |
3.4 在代码中定位编译错误
如果编译器返回在代码中的错误,会列出在输出时图上,并且可以连接到代码。
3.5 设置调试
设置好构建脚本后,你可以配置调试代码的设置。EA支持如下的调试:
- 微软原生代码应用(C++,原生C和 VB)
- .Net 应用
- Java应用
- PHP
每一个都需要不同的配置。
下图显示微软原生C++的配置
下图给出一个过程概览:代码编辑、编译和调试。
4. 基于模型调试
EA中还可以进行调试,包括:设置断点、观察变量、检查堆栈调用和内存,以及搜索代码和跟踪功能到代码。
4.1 为调试而编译
调试的关键是编译过程(构建),修改代码后,必须重新编译才能调试。为了运行一个构建从执行分析器,请使用图标
或者(Ctrl+ Shift + F12)。
4.2 设置断点
设置断点的界面如下:
断点管理的界面如下:
断点条件:可以为断点设置条件,当条件发生的时候,断点才发挥作用。例如:值变更断点(Value
Change Breakpoints),由一个值的变更引起的断点称之为 值变更断点。在Locals
View设置变量为值变更断点。如下图
4.3 调试代码视图
调试界面如下所示:
调试功能也能够通过Debug工具栏访问。
5. 如何使用调试视图
5.1 本地视图(Locals View)
步进代码的时候,Local view 显示 当前代码行的
值、变量类型和局部变量的地址。如下是局部变量的监视视图:Local Variables view
Local View 支持多种有用的功能,包括定义断点(基于变量值的改变),查看长字符串和比较变量快照。
局部变量也可以通过在代码编辑器中查看(移动鼠标到一个变量上面)。如下图所示:
也可以通过上下文菜单查看变量 ,如下图:
在Local View中,可以查看选中变量的详细信息,如下图:
5.2 调用堆栈视图(Call Stack View)
调用堆栈列出在堆栈上的线程。如下是调用堆栈视图(Call
Stack View)
如果有多个线程,则都可以被探测到。选择一个线程,你可以使用堆栈视图检查代码上下文(代表当前的指针或它者调用的代码)。
双击任何编译过代码的线程-在堆栈视图。代码编辑器视图和本地视图被更新以反映选择的线程的当前代码行的调用和变量。这样就提供了一个有力的工具跟踪调试中的执行历史。
5.3 观察视图(Watches View)
观察视图支持查看持久变量,也就是全局变量(超出了局部变量视图)。
可以通过在代码中选择一个变量或者输入变量, 然后选择【Display
variable】,则可以打开变量查看属性框【Watches view】。
如下是在【Watches view】 中的一个全局变量
The Network的细节显示。
Watches view 也可以显示在其他范围的特定变量,使用语法:Module
! Class :: VarName , 例如下图
5.4 搜索(Search)
搜索文件选项反馈在当前目录下的所有可能结构,每个输入显示行号和文件名的位置。
可以选择一个输入(打开在编辑器上)定位到具体的行。
5.5 模块视图(Modules View)
模块视图显示执行代码的时候装载的模块,如下图所示:
5.6 内存视图(Memory View)
内存视图显示执行代码的时候的内存内容,如下图:
5.7 输出视图(Output View)
输出视图显示编译、调试、运行中的系统的消息的输出。
5.8 调试视图(Debug View)
调试视图中可以对程序进行步进控制,如下图:
5.9 提示-关于使用视图
你可以根据自己的需要设置视图组。例如:
1. 断点跟踪可以使用如下视图跟踪 :Break Points
View、Locals和Call Stack views:
2. 检查变量-在内存里,可以同时查看 Locals
和 内存视图:
3. 你也可以把Local watch和 Memory
Viewr组织到一个属性框里:
4. 其他提示:
Debug view 、Execution Analyzer
和Profiler View 是独立的视图、可以作为一个窗口的标签视图。
注意:调试、测试点 或者 Profile的执行都可以从相关的独立视图开始,即:Debug、Profiler、TestPoints,
但是任何输出都将显示在 Debug View。所以要让 Debug View保持随时可见。
6. 可视化执行分析(Visual Execution
Analysis)
当构建一个复杂的系统,需要不断精化代码,这需要分析系统、验证代码符合设计,同时评估代码的性能。再整个过程中,如果能够在模型驱动的开发环境中进行分析、设计和代码重构,将是很好的工作方式。
EA提供多个工具进行程序的执行分析,包括如下:
选项:
有多个编译器和不同的分析工具,如下的表格列出了兼容性-在分析工具和编译工具之间。
表:执行分析工具支持的编译器
6.1 顺序图分析
当你执行一个应用-在调试模式-使用EA,事件流可以被记录在
Recording History 窗口。记录器数据包括:参数-发给功能、调用-发给外部模块和状态转移-基于任何给定的约束。
使用顺序图生成,记录历史可以简化和清晰化为图形的形式。历史也就能被使用-基于图表报告的方式。如下是顺序图的生成过程示意图:
顺序图可以帮助程序员:
- 可视化功能调用的结构
- 识别逻辑中的错误
- 优化代码的执行
- 确定数据流的不一致性
6.2函数的递归调用分析示例
如下是个顺序图的例子-来自于递归调用。左边的图是初始的分析,右边的图显示了顺序-在检查和优化代码后-为了最小化不必要的调用。
6.3 控制流程分析示例
这里有一个叫做“City Loop”的实例,如下是执行的时候的图像,使用3个并行线程-对应到3个火车。
说明:三个train 运行在于给子循环中。
如下的顺序图描述了抵达车站后的调用顺序。
说明:顺序图显示了三个实例的过程调用。
通过在状态转移设置一个组条件可以控制生成的顺序图。
6.4 设置顺序图的产生流程
核心步骤必须在记录前设置好:
1. 打开构建脚本-在 执行分析器视图(Execution
Analyzer view)
2. 配置记录选项
3. 在代码中,设置记录标记-为至少一个开始点
这些步骤中的细节:
1. 可以在Recorder中设置过滤器,只记录关注的对象或者方法。可以在recorder中设置跟踪的深度。
2. 可以标记记录的开始点和结束点。
使用类标记选项,设置开始点。一旦一个类被标记为开始点,就有一个新的标记集被创建,这个标记集可以在标记集合的下拉框中选择。如下图:
注意:生成顺序图需要至少一个标记(或者一个断点)被设置。
注意:可以新建一个标记集合,使用如下的菜单项(在Breakpoints
&marker view 或者 debug view)
3. 打开调试(Debug)视图(Alt+8),选择调试开始(Start
)按钮.
4. 如果还没有设置断点标记(Breakpoint-Marker),
不想选择Debug Stop 按钮,这时会弹出一个对话框以便你生成一个顺序图。
如下是从模型样例中的 Ctrain Class 作为标记开始点生成的顺序图。
6.5生成的顺序图显示状态转移
顺序图生成也支持显示在哪里发生了状态的变化,显示为状态,意味着一个代码的变量值的状态变化。下图显示了在生成的顺序图中的对象的状态变化:
在执行分析中使用的状态图必须放置在一个类的下面,这样状态才能够被分析,
你可以在状态转椅上设置约束。图中有一组状态-每个都定义了一个约束,约束被用来作为状态的变化的条件。
在执行分析的时候,需要定义一个标记在代码行中-以便作为顺序图定义记录的开始点
为了记录顺序图-具有状态转移,在Record&Analyze视图中使用Record
按钮。
>如果您希望了解更多信息:
下载 pdf版:
基于模型的Code执行分析(使用EA)
本文使用的建模工具为EA,可以下载试用版http://tool.uml.com.cn/ToolsEA/download.asp
作者简介:
俎涛,火龙果软件工程创始人,2001年创立了火龙果软件工程,2004年创立了IBM Rational用户组。1998年,曾作为骨干参与国家重点研究课题《面向特定领域基于组件的软件复用》,有幸比较深入的学习和使用的UML进行领域建模、提炼可复用组件和架构。在后来的研发项目中,一直采用模型进行分析设计,积累了一些心得和经验。20年来一直专注于MBSE,熟悉
UML、Sys ML、ArchiMate、BPMN、UPDM、DataModel等建模语言和规范,在以往的经历中,最大的感触是汇聚了很多精英人才的软件工程和系统工程领域居然几十年都是一种凌乱迷蒙的状态,从自己的经历所得,觉得清晰的模型,才是拨开工程迷雾的关键所在,所以不断研究和应用各种建模技术,并从自己的工程实践中提炼经验,形成对于自己可持续的方法论,例如《MBSE
从方法到实践指南》 《基于模型的三维研发管理》 《基于模型的需求管理》 《模型驱动的架构设计》
《基于模型的质量管理》 《基于模型的人员能力管理》 《iProcess过程改进方法》,目前正在作为产品经理和架构师,进行MBSE(基于模型的系统工程)平台的研发,希望建立要给基于模型的工程解决方案,后续会不断写些文章,希望能给同行一些借鉴。 |
后记
希望您读了此文后有所受益。
如果您有经验乐于分享,欢迎投稿给我们。
如果您对我们的培训、咨询和工具感兴趣:
|