wm20的个人空间 https://blog.eetop.cn/413287 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

(转)codeWarrior试用教程(二)

已有 5126 次阅读| 2012-1-6 22:40 |个人分类:codeWarrior使用

天气: 冷
心情: 平静


目标文件和工程特定的调试器参数设置



    以下是关于被调试的目标文件和工程的设置项。当在 CodeWarrior 的工程窗口的目标文件标签中有一个目标文件被选中时,你再选择编辑菜单中的工程名设置(Project Name Settings)项即可看到这个设置窗口。

图 5-6: 目标文件和工程调试器设置

[size=+1]调试器设置 

重定位后的库...的位置(Location of Relocated Libraries, etc): 如果你正在调试的文件被移到其它位置了,或者你正在通过一个 TCP/IP 网络来进行远程调试,你就必须将这些文件所在的目录输入到这个文本框中;

在应用程序启动时在临时断点处停止(Stop at temp breakpoint on application launch): 默认情况下,这个选项在程序的起始位置中断调试器的运行。但你也可以设置为可在任何断点处中断;

自动查找目标库(Auto-target Libraries): 选中这个选项可以自动地访问库。此选项用于正在调试的代码是一个库的一部分时,当你调试这些代码时,调试器将“做应做的事”(例如装载库并调用任何初始化函数);

记录系统消息(Log System Messages): 这个选项用于强制将所有的系统消息写入一个记录文件中。当你遇到代码导致系统崩溃,并因系统崩溃又看不到屏幕显示时,就很有用了。当你重启机器后,你可以从记录文件中查看导致系统崩溃的消息。特别是今后你调试一些大型程序时,记录文件就很有用了,所以一定要学会读懂记录文件!

数据更新时间间隔(Data Update Interval): 选中这个选项并给它设置一个值,这样你就可以决定数据查看(data view)多长时间更新一次。数据查看更新得越频繁,调试器显示的数据值就越新;

缓存运行中的符号文件(Cache symbolics between runs): 在调试器运行时,符号文件(在编译过程中产生的一种文件)将被缓存起来。这可以提高调试的进程;

在观察点处停止(Stop at Watchpoints): 选中此项,当观察点值为真时就中断调试。观察点和断点一样是很有用的。不同的是,断点每次都是在一个特定的代码行处停止下来,而观察点是监视一个变量或内存的一块区域,当此被观察的对象发生改变时,它就中断调试过程。这和 VC 中的条件断点相似,都是在设定的条件被满足时中断调试过程的。这是一个很有用的调试工具。

x86 [size=+1]异常[size=+1](Exceptions)

图 5-7:  x86 出错信息面板

    当你调试有问题的代码时, CodeWarrior 调试器会截取到由程序的 bug 引起的某些奇怪的操作(即所谓的 异常——Exceptions)。 IDE 会将这些异常传递给一个特殊的代码——一个被称之为处理器的东西——由它来处理这些异常问题。

    但是,对于大多数的异常,调试器只是简单地中断它的工作而已。为什么会这样呢?

    如果你正在做一个高级开发,例如开发一个系统库或一个设备驱动程序,你可能想测试一下这些代码是如何处理这些异常的。只有调试器不截取这些异常时,你才能这么做。如果为了一些特定的原因,你希望调试器抓住某些特定异常发生时的控制("seize control of the moment" for specific exceptions) ,你就应该在这个设置面板上做一些设置。在该面板上显示的异常是 CodeWarrior 的集成开发环境可以处置的情况。点击那些你希望由调试器来处理的异常情况,然后点击“保存”按钮保存设置。就像前面提到的,这是很高级的编程设置,因此我们在这将不作详细讨论。总之,CodeWarrior 的调试器是一个非常先进的,而且很易于使用的附件。如果你学好了调试器的使用,它将会成为你开发软件的最重要的一个工具。

    另外还有“其它的可执行程序”和“远程调试”设置面板,它们是针对高级用户设置的,本课程不打算再作介绍。如果你需要同时调试多个可执行程序或通过 TCP/IP 网络来调试程序的话,你可以自行参看这几个设置面板。

CodeWarrior 使用教程

第六课    定     制

Translated from CodeWarriorU.COM

概   述        这将是最简单的一课,但它却能够帮助帮助你更好地组织你的思想和开展工作。    

   正如我们在第一课中学到的,可以有许多中方式来为手头某个特定的任务定制 CodeWarrior。你可以定制 CodeWarrior 的外观和许多设置项,以便使得编译、连接和调试你的程序变得更快、更简单。     

    下面我们来看看可用于帮助你更有效地使用 CodeWarrior 的定制选项。因为定制 CodeWarrior 会改变 IDE 的所有行为,所以我们可以想到在编辑菜单下找到这些设置项。在那儿你将找到选择、命令和键绑定(Key Bindings)等菜单。点击其中的命令项就会显示定制 IDE 命令设置的窗口。定制 IDE 命令的面板包含两个主标签页。命令标签页允许你很容易的定制出现在每个 CodeWarrior 菜单中的命令。通过该标签页你也可以修改在内置的文本编辑器中使用的命令,例如选择文本和移动光标等命令。在这个设置窗口中,你还可以创建任何用于触发某个菜单命令项的组合键(也称之为键绑定——key binding),以此来启动一个应用程序,或者执行一个脚本。当然,你也可以设定一个某个命令项是否出现在一个菜单中。     

    定制 IDE 命令的面板中的另一个标签页是工具条项目标签页,在这个标签页中你可以看到在 CodeWarrior 的工具条中显示的项目,例如显示在每个文本编辑器窗口上方(或下方,取决于你的参数设置)。     

    在工具条项目标签页中,你只需点击一个工具条图标然后把它拖到主菜单下面的工具条或者文本编辑器窗口的工具条中,就可以往相应的工具条中增加一个命令。还可以把工具条中的一个图标拉到工具条的最后。从 CodeWarrior 的窗口菜单中的工具条子菜单中选择重设窗口的工具条(Reset Window Toolbar) 或重设浮动工具条菜单项,还可以重新设置该工具条。     

    在大多数情况下,CodeWarrior 的默认设置就可以满足你的要求了。偶尔你也可能发现一个通过改变一个菜单或工具条的方式来自动完成一些任务。关于 Codewarrior 的定制,你可以参考它的在线文档获得更多的信息。


CodeWarrior 定制示例


    通过定制 CodeWarrior,你可以增强你的工作环境和提高工作效率。     除了对菜单和工具条的简单修改之外,你可能还想只需点击一个图标或键入一个组合键就可以执行一个脚本或启动一个应用程序。有时当你正在参与一个非常庞大的开发项目的时候,需要做一些定制工作来解决自动设置带来的混乱问题。例如,你可以创建一个脚本来完成以下这些工作: 

自动删除编译过程中产生的多余的文件;

将输出文件复制到一个本地或网络上的目录中以做备份;

为你的工程创建一个安装应用程序。

    对于 Windows 用户而言,可以通过 VBScript,Perl或其它使用通用对象模型(Common Object Model,COM)接口的脚本语言来驱动 CodeWarrior Pro 5 IDE 完成一系列复杂的操作。如果使用 VBscript,你还需要一个可以执行 VBScript. 的的应用程序(如 Internet Explorer 5),或者是一个 Scripting Host 工具——可以从以下网址下载 http://msdn.microsoft.com/scripting/windowshost/。 

   下面的 VBScript. 脚本用于指导 CodeWarrior IDE 删除当前工程中的所有目标(object)文件,以便执行一个“干净的构建(build)”,然后再执行构建工作(编译和连接操作)。该脚本还打开一个编辑器窗口来显示操作结果(成功或失败的)的总结。这个脚本是有点长,但设计得很好,因为其中包含了许多用于错误检查的代码。 

      ' 文件名:Build.vbs          ' 作者: Jim Trudeau, Metrowerks          ' 以及版权声明信息

          option explicit                     

           '所有的变量都必须进行声明

      dim CW 

           dim project                      '默认的工程

      dim textDocument           '用于保存报告的文本文档 

      dim textEngine                 '用于处理文本的对象

      dim eol                            '行尾字符格式

      dim result                        '返回的值

eol = chr(13)                     '设置行尾字符

'创建 CodeWarrior 的一个实例

set CW = CreateObject("CodeWarrior.CodeWarriorApp")

'创建一个文本文档并获得其引擎(Engine)

set textDocument = CW.OpenUntitledTextDocument()

set textEngine = textDocument.TextEngine

'得到默认的工程

set project = CW.DefaultProject'错误控制

if TypeName(project) = "Nothing" then 

textEngine.InsertText("Script. operates on default project." &eol)     textEngine.InsertText("There must be at least one open project." &eol) 

else 

dim target   '当前目标

dim buildmessages '错误和警告

'*** 获得当前目标

set target = project.GetCurrentTarget

textEngine.InsertText("Build Information" &eol)

'显示名字

result = target.nametextEngine.InsertText("Building target " &result &eol)'*** 删除所有的对象代码目标

RemoveObjectCode true'*** 获得构建代码后的消息

set buildMessages = target.BuildAndWaitToCompleteProcessMessages (buildMessages) 

end if'========================================================= ' ProcessMessages - get errors and warnings, process them ' receives build messages '=========================================================

sub ProcessMessages (messages)

dim result           '返回值

dim messageList '消息收集

'*** 获得错误的数量

result = messages.ErrorCountif result = 0 then textEngine.InsertText(eol &"Build Succeeded." &eol) 

else textEngine.InsertText(eol &"!!!BUILD FAILED!!!" &eol)'*** 显示错误的数量

textEngine.InsertText("Number of errors: " &result &eol)'*** 获得错误清单

set messageList = messages.Errors'*** 处理错误

ProcessMessageList (messageList) 

end if

'*** 检测是否有警告信息

result = messages.WarningCount'*** 显示数量

textEngine.InsertText("Number of warnings: " &result &eol)

'*** 取得警告信息并处理之

if result then 

'*** 获得警告信息清单

set messageList = messages.Warnings'*** 处理警告信息

ProcessMessageList (messageList) 

end if

end sub'========================================================= ' ProcessMessagelist - loop through messages, report info ' receives message collection, could be errors or warnings '=========================================================

sub ProcessMessageList (messageList)

dim result '返回值

dim index '循环计数器

dim message '个人信息

'*** 遍历消息清单

for index = 0 to messageList.Count-1 

'*** 获得个人信息

set message = messageList.Item(index)

'*** 获得消息文本

result = message.MessageText

'*** 显示消息文本

textEngine.InsertText(result &eol)

****在错误中忽略一行(skip a line between errors )

textEngine.InsertText(eol) 

next end sub

    因为使用了微软公司的 OLE/COM 查看器工具,这个 IDE 支持许多 COM 对象。一个脚本语言可以使用这些对象来与 CodeWarrior IDE 进行通信。关于 CodeWarrior 定制与脚本机制,还有很多优秀的功能,但在这里就不详述了,因为 CodeWarrior 把这些功能实现得非常好。打开上面所描述到得窗口自己看看吧!当你熟练使用了 CodeWarrior 的一些功能之后,你会发现它是非常的易用!

CodeWarrior 使用教程

第七课  库 和 Microsoft Foundation Classes (MFC)  

Translated from CodeWarriorU.COM

 

库     库是什么?这是一个你必须知道如何回答的问题!一个库就是一个包含了你程序运行时需要调用的函数的文件。在库中提供的典型函数有:文件和屏幕的 I/O 函数,内存管理服务,3-D 图形显示以及科学计算函数。使用库可以缩短你的开发时间并简化你的应用程序。在开发程序当中,你会经常地使用到库。以下是几种在编程中使用库的方法: 

将你需要用到的函数写在一个源文件中,然后把它编译成为一个库或 DLL;

使用别人提供的库;

使用一个其他人提供的共享库(或 DLL)。

[size=+1]编写你自己的库或[size=+1] [size=+1]DLL

    第一种使用库的方法很简单。你只需在一个 C 或 C++ 源文件中写入源代码,然后编译、连接并执行它。这是我们在本课程中早已学到的知识。就这样你就可以创建你自己的一个库,就这么简单!

[size=+1]使用别人的库

    使用别人提供的库稍稍有些不同。由第三方开发商提供的库通常包括以下几个文件:库文件(通常是以 .lib 为后缀名的文件),一个头文件(后缀名为 .h) 以及(我们希望有但不一定有)一些文档(后缀名为.doc)。头文件是用于让编译器将你的程序中使用的函数与库中的函数匹配起来的。你只需将头文件包括到你的源文件中,然后就可以象调用操作系统的函数一样来调用库函数了。在大多数情况下,通常将 .h 和 .lib 的文件放置于源文件目录中,就像 CodeWarrior 定义的一样。这个路径通常在你的工程文件所在的目录,或者其下的子目录中。需要注意的是,CodeWarrior 提供的某些特定的库,例如它的 MSL,就不是放在你的工程所在的目录中。实际上,CodeWarrior 有一个特定的存取路径,叫做 system paths, 它指向 CodeWarrior 自带的库和头文件存放的目录。

[size=+1]使用一个共享库

    第三方厂商将库函数与它们的产品打包起来发行,而不是以源文件的方式发行这些库。如果你是一个开发商,使用这样的方式来发行你的库会更安全一些,特别是你希望由此来保护你的知识产权时。但是这种方法也存在一个问题,就是如果在库中存在一个 bug 的话,用户是没办法对之进行修改的,只能从开发商那里取得一个修正后的版本。但是这做起来也有许多困难。

[size=+1]共享的[size=+1] [size=+1]DLL 

     DLL 和库文件非常相似,两者之间唯独的不同就是库文件通常都会被编译并连接到你的应用程序中,而 DLL 则是存放在你的系统目录下或者是在编译后的应用程序的目录下的一个独立的文件。当应用程序运行时,它会自己去找到该 DLL 并使用它的服务。DLL 文件的后缀名为 .dll。

[size=+1]使用共享的[size=+1]DLLs [size=+1]的好处

    DLL 的优点就是它能够被共享。那么,共享的好处在哪里呢?首先,可以让多个应用程序使用一个 DLL。当几个程序都使用一个占用很大磁盘和内存空间的 DLL 时,就很有用了。另外,如果一个 DLL 包含了一个 bug,然后被修正了,那么所有使用这个 DLL 的程序都会被自动更新,这样就可以大大地节约你的开发时间。那么哪种库应该由多个应用程序共享呢?比如操作系统中的每一个视窗就是使用共享的 DLL 得来的。

[size=+1]使用共享[size=+1] [size=+1]DLL [size=+1]需要注意的地方

    CodeWarrior IDE 的 CD-ROM 中有许多库,在因特网上还有成千上万的库。记住,当你使用第三方厂商的库时,千万要先查查毒。这就如同出门前要关门一样的有必要。

    CodeWarrior 自带的库分为两类。一个是 MSL,它提供 ANSI C/C++ 的标准函数。MSL 已经被移植到许多平台上了,因此可以在 Windows,Mac OS 和 Solaris 系统中使用它的函数。另一个是供特定平台使用的库。例如,在 Windows 版的光盘中,你可以发现提供了使用 Windows APIs 和 MFC 库的Windows 32 支持库,它提供了编写面向对象的 Windows 应用程序的框架。随着你的编程经验的增长,你将发现这些特定库的更多的用途。


MFC是什么?



    Microsoft Foundation Classes (MFC) 提供了快速开发 Windows 应用程序的函数集。虽然你已经可以自由地直接调用 Win32 APIs,但使用 MFC 会更简单一些,因为 MFC 提供了诸如创建一个窗口或者使用智能默认设置和错误检查代码来编写文件这样的基本服务。MFC 可以在 Windows 版的 CodeWarrior 光盘中找到,但不一定是最新的版本。你可以查看 Metrowerks 的帮助页面来获得相关信息,因为微软公司会为 CodeWarrior 的发行版本提供一些升级补丁。

    对于特定平台,比如Macintosh 的开发者可以使用 Metrowerks 自己的 PowerPlant 类库。PowerPlant 是为编写 Mac 应用程序而设计的面向对象的应用程序框架。我们在本课程中并不打算讨论 PowerPlant,但你应知道,它与 MFC 在许多方面是类似的。你在这里学到的知识也将帮助你理解 PowerPlant。我们讨论 MFC 时,其中的许多概念也可以应用到 PowerPlant 上。

注意: 在 Macintosh 版的 CodeWarrior 光盘中也有一个 MFC 的库文件,但不像 Windows 版的光盘,这里不包含源代码。使用 MFC,你可以编写跨平台的代码,还可以同时为 Macintosh(使用 PowerPlant) 和 PC(使用 MFC) 编译这个代码。是不是很酷?

[size=+1]应用程序框架

    就像前面提到过的一样,MFC 是一个应用程序框架。也就是说,MFC 是一个源代码或库格式的 C++ 类集。使用这个框架可以在较短时间内创建一个支持高级操作系统功能的完整的应用程序。此外,MFC 还包含了用以构造你的用户界面的工具。这些工具,特别是图象编辑器、对话框编辑器和资源编译器,能够帮助你构造用户界面中的图形元素(在本课最后一节中将解释如何安装这些有用的组件)。一个应用程序框架只涉及到应用程序的标准用户界面,而与该应用程序的特有的内容无关。换句话说,这个框架能够帮助你构造一个功能强大的用户界面,把你的时间节省下来以便让你有更多时间去编写实现应用程序目的的其它函数。因此你不必担心会花很多时间来创建一个和其它一些运行在操作系统环境中具有同样 Windows 化界面的应用程序,因为你只需去运用那些库就可以达到这些目的了。

图 7-1 MFC 的用户界面构造器

    应用程序框架还能处理分发消息(例如用户击键的动作、鼠标点击、绘画消息等等)到应用程序中的许多按钮、列表、窗口和控件上。这个功能帮助你能够集中注意力到实现应用程序的功能而不是界面上,把那些创建界面的工作留给应用程序框架吧。

    应用程序框架提供了许多超过老式风格的 roll-your-own 方法。首先,这些代码是成熟和经过严格测试的。每天都有成百上千的开发者使用 MFC 来开发应用程序。每当 Windows 操作系统增加了一些新的功能的时候,MFC 也会不断地被升级,你可以通过使用新版本的 MFC 来编译你的应用程序,以便获得所有新的功能特色,而且几乎不用对应用程序的源代码做任何修改。

    应用程序框架还提供可重用的代码。代码重用是象 C++ 这样的面向对象的编程方法得以发展的主要原因之一。通过将可重用的代码封装为类,你可以很容易地使用已经存在的类来添加需要的功能。代码重用使得你可以使用经过严格测试的代码来构造你的应用程序,并很容易获得预期的功能。而且你还可以很容易地将你编写的类与其它需要同样功能的人进行共享。

    与你自己创建所需框架而言,使用应用程序框架有时会使得你的程序稍大一些。因为现代计算机通常都配置了足够数量的内存,而且这个框架可以作为一个 DLL 来使用,所以增加这么一些程序体积还是很值得的。PowerPlant 和 MFC 是两个很值得你去熟练使用的高效的工具。   

[size=+1]如何安装和使用[size=+1] MFC [size=+1]接口工具

    MFC 接口工具(包括对话编辑器和图象编辑器)可以在 CodeWarrior 安装光盘上找到。但是,它们并不是作为 CodeWarrior 安装程序的一部分存在的,因此在完成了 CodeWarrior 的安装后,在硬盘上你还是找不到 MFC。为了安装这些工具,请按照以下步骤进行: 

找到 iTOOLS.Exe 文件。这是安装 MFC 接口工具必须的安装程序。iTools.Exe 文件可以在 C:\Program Files\Metrowerks\CodeWarrior\BinSDK\bin\ 目录下找到。如果在那儿找不到这个文件,那么就到 CodeWarrior 的安装光盘上去找。该文件应该在 Extras\SKDs\Win32\Microsoft Win32 SDK Tools\目录下。

注意: 该安装文件 (iTOOLS.Exe) 将会询问你想在哪里保存 MFC 接口工具。但不行的是,它却没有提供定位目录用的浏览(browser)按钮可用,因此你必须手工的输入一个路径。如果你并不能确定你输入的路径是否就是你想要保存这些工具的路径,你可以先在那个目录中找到一个文件,然后通过查看该文件的属性(在该文件上点击右键然后选择 Properties 项),从这个属性框上你可以复制到完整的路径,并把它填入到安装过程中提示要输入安装路径的编辑框中。

这些工具将要被安装到目的安装路径的 \bin\ 目录中。在这个路径中你将可以找到对话框编辑器(DlgEdit.Exe),图象编辑器(ImagEdit.Exe)和其它一些有用的工具;

如果你正在开发 Windows 95 或 Windows NT,需要的工具可以在 \bin\win95 和 \bin\winnt 目录中找到。

CodeWarrior 使用教程

第七课  库 和 Microsoft Foundation Classes (MFC)  

Translated from CodeWarriorU.COM

 

库     库是什么?这是一个你必须知道如何回答的问题!一个库就是一个包含了你程序运行时需要调用的函数的文件。在库中提供的典型函数有:文件和屏幕的 I/O 函数,内存管理服务,3-D 图形显示以及科学计算函数。使用库可以缩短你的开发时间并简化你的应用程序。在开发程序当中,你会经常地使用到库。以下是几种在编程中使用库的方法: 

将你需要用到的函数写在一个源文件中,然后把它编译成为一个库或 DLL;

使用别人提供的库;

使用一个其他人提供的共享库(或 DLL)。

[size=+1]编写你自己的库或[size=+1] [size=+1]DLL

    第一种使用库的方法很简单。你只需在一个 C 或 C++ 源文件中写入源代码,然后编译、连接并执行它。这是我们在本课程中早已学到的知识。就这样你就可以创建你自己的一个库,就这么简单!

[size=+1]使用别人的库

    使用别人提供的库稍稍有些不同。由第三方开发商提供的库通常包括以下几个文件:库文件(通常是以 .lib 为后缀名的文件),一个头文件(后缀名为 .h) 以及(我们希望有但不一定有)一些文档(后缀名为.doc)。头文件是用于让编译器将你的程序中使用的函数与库中的函数匹配起来的。你只需将头文件包括到你的源文件中,然后就可以象调用操作系统的函数一样来调用库函数了。在大多数情况下,通常将 .h 和 .lib 的文件放置于源文件目录中,就像 CodeWarrior 定义的一样。这个路径通常在你的工程文件所在的目录,或者其下的子目录中。需要注意的是,CodeWarrior 提供的某些特定的库,例如它的 MSL,就不是放在你的工程所在的目录中。实际上,CodeWarrior 有一个特定的存取路径,叫做 system paths, 它指向 CodeWarrior 自带的库和头文件存放的目录。

[size=+1]使用一个共享库

    第三方厂商将库函数与它们的产品打包起来发行,而不是以源文件的方式发行这些库。如果你是一个开发商,使用这样的方式来发行你的库会更安全一些,特别是你希望由此来保护你的知识产权时。但是这种方法也存在一个问题,就是如果在库中存在一个 bug 的话,用户是没办法对之进行修改的,只能从开发商那里取得一个修正后的版本。但是这做起来也有许多困难。


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 3

    评论
  • 307

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-26 22:01 , Processed in 0.031433 second(s), 15 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部