CCS工程文件的建立与调试(以Volume为例)

CCS工程文件的建立与调试(以Volume为例)
CCS工程文件的建立与调试(以Volume为例)

实验名称工程文件的建立与调试(以V olume为例)指导教师赵成

实验时间2011/04/30 实验教室东实B404

实验类型设计实验学时2h

一、实验目的

1.掌握CCS集成开发环境下工程的建立方法

2.掌握DSP工程中文件的添加方法

3.掌握CCS集成开发环境下代码的查看方法

4.掌握CCS集成开发环境下工程的编译与运行

5.能够修改程序选项和纠正语法错误

6.学会使用观察窗口观察structure变量

7.掌握为I/O文件增加探针的方法

8.学会使用显示图形工具,能够执行程序并绘制图形

二、实验设备

硬件:微型计算机Pentium V以上

EL-DSP-EXPIV DSP教学实验系统(可选)

软件:操作系统Windows XP

Code Composer Studio集成开发环境

三、实验过程及关键步骤记录

一、创建工程文件

(1)启动Code Composer Studio v2.20。双击桌面上的CCS 2(‘C2000)快捷方式,

启动CCS集成开发环境。

(2)在c:\ti\myprojects目录下建立文件夹volume。

(3)将c:\ti\tutorial\sim28xx\volume1目录中的volume.c文件、volume.h文件、

volume.cmd文件、volume.gel文件、load.asm文件、sine.dat文件及vectors.asm文

件拷贝到上述新文件夹。

(4)选择菜单“Project”的“New…”项,弹出如下图所示的创建工程文件的对

话框,并依照如下步骤创建工程。

步骤:①工程命名为volume

②单击此按钮,选择工程所在目录为c:\ti\myprojects\volume

③单击完成设置

二、向工程添加文件

(1)选择菜单“Project”的“Add Files to Project…”项;在“Add Files to Project”

对话框中选择文件目录为c:\ti\myprojects\volume,选择显示出来的文件“volume.c”

并点击“打开”按钮。

(2)选择菜单“Project”的“Add Files to Project…”项,在文件类型框中选择“Asm Source Files (*.a*;*.s*)”,选择显示出来的文件“vectors.asm”与“load.asm”,并点击“打开”按钮。Vectors.asm文件包含了设置跳转到该程序的C入口点的RESET 中断(c_int00)所需的汇编指令。(对于更复杂的程序,可在vector.asm文件定义附加的中断向量。)

(3)选择菜单“Project”的“Add Files to Project…”项,在文件类型框中选择“Linker Command File (*.cmd;*.lcf)”,选择显示出来的文件“volume.cmd”并点击“打开”按钮。volume.cmd文件包含程序段到存储器的映射。

(4)选择菜单“Project”的“Add Files to Project…”项,进入编译库文件夹(C:\ti\c2000\cgtools\lib)。在文件类型框中选择“Object and Library Files (*.o*;*.l*)”,选择显示出来的文件“rts2800_ml.lib”并点击“打开”按钮。该库文件对目标系统DSP提供运行支持。

(5)点击紧挨着Project、volume.pjt、Libraries和Source旁边的符号+展开Project 表,它称之为“工程管理窗口(Project View)”,如下图所示

三、查看源代码

在Project View窗口中双击volume.c文件,源程序就显示在CCS窗口的右边。

源代码如下表所示:

#include

#include "volume.h"

/* 全局变量声明*/

int inp_buffer[BUFSIZE]; /* 数据缓冲*/

int out_buffer[BUFSIZE];

int gain = MINGAIN; /* 音量控制增益*/

unsigned int processingLoad = BASELOAD; /* 当前处理程序加载值*/

struct PARMS str =

{

2934,

9432,

213,

9432,

&str

};

/* 函数原型声明*/

extern void load(unsigned int loadValue);

static int processing(int *input, int *output);

static void dataIO(void);

/* ======== main ======== */

void main()

{

int *input = &inp_buffer[0];

int *output = &out_buffer[0];

puts("volume example started\n");

/* 无限循环*/

while(TRUE)

{

/* 使用探针断点从外部主机文件上读取数据并显示输出数据的图形*/ dataIO();

#ifdef FILEIO

puts("begin processing") /* 故意设置的语法错误*/

#endif

/* 应用增益处理*/

processing(input, output);

}

}

/* ======== processing ======== */

static int processing(int *input, int *output)

{

int size = BUFSIZE;

while(size--){

*output++ = *input++ * gain;

}

/* additional processing load */

load(processingLoad);

return(TRUE);

}

/* ======== dataIO ======== */

static void dataIO()

{

/* 数据I/O */

return;

}

四、编译和运行程序

(1)编译链接工程。选择菜单“Project”的“Rebuild All”项,或单击工具条中的按钮。编译过程中CCS主窗口下部“Build”提示窗中显示编译信息并给出错误

和警告的统计数。

(2)下载程序。执行File→Load Program,在随后打开的对话框中选择刚刚建立的C:\ti\myprojects\volume\Debug\volume.out文件,点击“打开”按钮。

(3)点击Disassembly窗口中一条汇编指令(点击指令,而不是点击指令的地址或空白区域)。按F1键,CCS将搜索有关那条指令的帮助信息,这使用用户便于获得不熟悉汇编指令帮助信息。

(4)运行程序。在执行C语言的程序时,为了快速地运行到主函数调试自己的代码,可以先使用Debug→Go main命令,然后点击工具栏按钮或选择Debug→Run。

出现如右图所示信息:。

五、修改程序选项和纠正语法错误

(1)点击选择“Project→Build Options…”。

(2)从“Build Options for volume.pjt”窗口的Compiler栏的Category列表中选择Preprocessor。在“Define Symbles”框中键入FILEIO并按Tab键。如下图所示

(3)点击(Rebuild All) 工具栏按钮或选择“Project→Rebuild All”。

(4)窗口底部的编译信息输出区出现一条编译错误的消息,大致意思是提示在volume.c文件中的第68行有语法错误。如下图所示

(5)双击描述语法错误位置的红色文字。光标会落在volume.c源文件的第68行上,查看附近代码,发现“puts("begin processing")”句末少了分号。

(6)修改语法错误

(7)将所作的改变存入volume.c文件中。

(8)点击(Incremental Build))工具栏按钮或选择“Project→Build”,CCS重新编译已被更新的文件。

六、使用观察窗口观察structure变量

(1)执行“View Watch Window”打开观察窗口。

(2)在volume.c中,用鼠标双击一个变量(比如gain),再单击鼠标右键,选择“Quick Watch”,CCS将打开Quick Watch窗口并显示选中的变量。

(3)在volume.c中,选中变量gain,单击鼠标右键,选择“Add to Watch Window”,CCS将把变量添加到观察窗口并显示选中的变量值。

(4)在观察窗口中双击变量,则弹出修改变量窗口。此时,可以在这个窗口中改变变量的值。

(5)把str变量加到观察窗口中,显示着+str={…}的一行出现在观察窗口中,如下图所示,“+”符号表示这是一个结构。类型为PARMS的结构被声明为全局变量,并在volume.c文件中初始化。结构类型在volume.h中定义。

(6)点击变量左边的“+”,观察窗口可以展开结构变量,并且显示结构变量的所有元素以及它们的值。

七、为I/O文件增加探针(测试点)

(1)点击工具栏按钮或选择“Project→Rebuild All”。

(2)选择“File→Lode Program…”并选取“volume.out”,然后点击Open。

(3)在Project View窗口中,双击“volume.c”文件。

(4)将光标置于主函数中的dataIO( )这一行上。

(5)单击工具按钮(Toggle Probe Point),选择边区标出一个菱形小蓝点,标示探针已经设置。

(6)从File菜单选择“File I/O…”,在弹出的File I/O对话窗中可选择输入和输出文件。

(7)在File Input标签下,单击“Add File”。

(8)浏览到建立的volume工程文件夹并选择sine.dat,单击“Open”按钮。(可在文件类型项目下选择数据文件格式。sine.dat文件包含了一个正弦波形的16进制数值)接着出现了sine.dat的控制窗口。当执行程序时,可利用该控制窗口来在数据文件中作开始、停止、回卷、快进操作。如下图所示

(9)在File I/O对话框中,改变“Address”为“inp_buffer”,修改“Length”为100,并选中“Wrap Around”框,如下图所示。

(10)单击“Add Probe Point”按钮,使得Break/Probe Points对话框中的Probe Points 标签出现。

(11)在Probe Point列表中,单击“volume.c line 61→No Connection”行使之高亮显示。

(12)在Connect To域,单击下拉箭头并从列表中文件选择sine.dat。

(13)单击Replace,这样Probe Point列表将显示为探针与文件sine.dat已经连接。单击“确定”。

(14)在File I/O对话框,单击“确定”退出File I/O对话框。

八、显示图形

(1)选菜单View→Graph→Time/Frequency。

(2)在Graph Property Dialog对话框中,修改Graph Title为Input Buffer,Start Address为inp_buffer,Acquisition Buffer Size为100,Display Data Size为100,DSP Data Type为16-bit signed integer,Autoscale为Off,Maximum Y-value为1000。

(3)单击“OK”按钮,显示Input Buffer数据的一个图形窗口就出现了。

(4)在上述窗中右击鼠标,从弹出的菜单中选择Clear Display。

(5)再次选菜单View→Graph→Time/Frequency。将Graph Title修改为Output Buffer,并将Start Address修改为out_buffer,其余的设置都不变。

(6)点击“OK”按钮,又出现一个图形窗,在该图形窗内右击鼠标,从弹出的菜单中选择Clear Display。

九、执行程序和绘制图形

(1)在C源程序volume.c窗口中,将光标放置在dataIO行。

(2)点击(Toggle Breakpoint)工具栏按钮或按F9,该行显示为红色和蓝色

高亮,表明在这一行已经设置了断点和探针。

(3)重新安排窗口以便能同时能看到这两个图形。

(4)按F12运行程序。结果如下图所示。

(5)注意每个图形包含2.5个周期的正弦波形,且在程序运行过程中两个图形反

向。每次到达探测点时,CCS从sine.dat文件中得到100个值,再将这100个值写

入inp_buffer地址。

四、实验分析及心得体会

1.学习并掌握了CCS集成开发环境下工程的建立方法。

2.学会了向DSP工程添加文件的方法。

3.了解并掌握了如何在CCS集成开发环境下查看程序源代码。

4.掌握了CCS集成开发环境下工程的编译与运行形式,学会了使用显示图形工具,执

行程序,绘制图形。

5.学会了如何修改程序选项、纠正语法错误,如何使用观察窗口观察structure变量。

6. 掌握了为I/O文件增加探针的方法。

https://www.360docs.net/doc/0e7445038.html,S集成开发环境使用复杂,根据《实验手册》指导,一步步得出实验结果获得一定

的成就感。理论知识在仿真模拟中得到验证激发了自己对DSPs芯片的开发与应用过程的兴趣

五、思考题

1.在调试程序时,要使用Debug菜单下的哪些工具?

Debug菜单的“Probe Points…”,“Run”,“Animate”,“Go Main”等一些工具。

2.如何添加断点?

将光标放置在需要加断点的那一行,点击(Toggle Breakpoint)工具栏按钮或按F9添加断点。

3.在单步调试时,F8与F12键的作用有什么不同?

F12(Animate)使目标系统应用程序一直运行到断点,随后目标系统应用程序暂停并刷新窗口。Animate命令恢复目标系统应用程序运行到下一个断点,而且此过程是连续的,直到目标系统被人工停止。F8(Step Into)在人工的控制下单步运行。

成绩批阅人日期

嵌入式软件动态测试工具Tessy

嵌入式软件动态测试工具Tessy Tessy是一个专门针对嵌入式软件的C/C++代码进行单元、集成测试的工具,它可以自动化地执行测试、评估测试结果并生成测试报告。Tessy的目标就是:通过自动化整个测试周期,在所有测试阶段完美支持针对C语言的单元测试,当然,Tessy也同样关注测试组织和测试管理。 Tessy软件源自戴姆勒-奔驰公司的软件技术实验室。从1997年,Tessy就在戴姆勒-奔驰公司得到广泛的使用,之后独立成为专业的软件测试工具公司Razorcat,由德国Hitex负责全球销售及技术支持服务。北汇信息作为Hitex/Razorcat公司的中国合作伙伴,将为中国汽车客户提供Tessy软件及优秀的软件测试服务。 Tessy的应用 在以V模型为例的开发模式中,Tessy主要处理右半部分验证和确认中单元/模块测试,集成/组件测试以及系统测试的内容。在V模型的开发模式中,单元测试是第一个测试活动。它阻止了每一类错误,比如算法错误,在V模式的右边向上蔓延,这样可以尽可能早得发现Bug,防止直到后面的测试过程或者直到最终用户那里才被发现,单元测试有经济效益,越早发现bug越好。 另外,Tessy也可以满足各类标准(ISO26262、IEC 61508、EN 50128/50129、DO-178B、汽车SPiCE 或FDA的软件验证通用原则)对测试的需求,比如ISO26262中各个测试等级中对模块测试的要求可以使用Tessy来满足,当然Tessy本身也通过了TUeV的认证,被证明是安全可靠的,可以在安全相关性的软

件研发过程中被使用。 Tessy的特性 自动生成测试环境: Tessy可以自动生成测试环境驱动,选择自动或者手动打桩以及自动生成测试用例模板,帮助客户提高测试用例设计效率。 多种测试用例确定方式: 除了从Excel中导入测试用例,手动地设计测试用例外,Tessy里集成了CTE软件,根据分类树的方法通过Tessy自动化地关联测试用例。

软件调试技巧

软件调试技巧 一、软件调试方法 软件调试有很多种方法。常用的有4种,即强行排错法、回溯排错法、归纳排错法和演绎排错法。 1.强行排错法 这种方法需要动脑筋动的地方比较少,因此叫强行排错。通常有以下3种表现形式: ●打印内存变量的值。在执行程序时,通过打印内存变量的数值,将该数值同预期的数值进行比较,判 断程序是否执行出错。对于小程序,这种方法很有效。但程序较大时,由于数据量大,逻辑关系复杂,效果较差。 ●在程序关键分支处设置断点,如弹出提示框。这种方法对于弄清多分支程序的流向很有帮助,可以很 快锁定程序出错发生的大概位置范围。 ●使用编程软件的调试工具。通常编程软件的IDE集成开发环境都有调试功能,使用最多的就是单步调 试功能。它可以一步一步地跟踪程序的执行流程,以便发现错误所在。 2.回溯排错法 这是在小程序中常用的一种有效的调试方法。一旦发现了错误,可以先分析错误现象,确定最先发现该错误的位置。然后,人工沿程序的控制流程,追踪源程序代码,直到找到错误根源或确定错误产生的范围。 3.归纳排错法 归纳法是一种从特殊推断一般的系统化思考方法。归纳法调试的基本思想是,从一些线索(错误的现象)着手,通过分析它们之间的关系来找出错误,为此可能需要列出一系列相关的输入,然后看哪些输入数据的运行结果是正确的,哪些输入数据的运行结果有错误,然后加以分析、归纳,最终得出错误原因。 4.演绎排错法 演绎法是一种从一般原理或前提出发,经过排除和精化的过程来推导出结论的思考方法。调试时,首先根据错误现象,设想及枚举出所有可能出错的原因作为假设。然后再使用相关数据进行测试,从中逐个排除不可能正确的假设。最后,再用测试数据验证余下的假设是否是出错的原因。 二、调试的原则 调试能否成功一方面在于方法,另一方面很大程度上取决于个人的经验。但在调试时,通常应该遵循以下一些原则。 1.确定错误的性质和位置的原则 用头脑去分析思考与错误征兆有关的信息,避开死胡同。调试工具只是一种辅助手段。利用调试工具可以帮助思考,但不能代替思考。通常避免使用试探法,最多只能将它当作最后的手段,毕竟小概率事件有时也会发生。 2.修改错误的原则 在出现错误的地方,很可能还有别的错误。修改错误的一个常见失误是只修改了这个错误的征兆或这个错误的表现,而没有修改错误本身。当新修正一个错误的同时又引入新的错误。 三、有效减少调试时间 1.绘制程序流程图 一些程序员认为,绘制程序流程图是件繁琐的事,而且浪费时间。其实不然,当读者对着偌大的程序一筹莫展时,面对纷纭复杂的关系理不出头绪时,使用程序流程图绝对可以事半功倍。 因此建议在编制程序前先绘制流程图,这样编程的思路有条理,调试时同样会有条不紊。若编制程序之前没有绘制流程图,当排错没有进展时,可以马上编写流程图。你会发现,程序中某些分支或细节被忽略了,这些细节可能就是程序出错的地方。 2.不要过多地依赖单步调试 有些程序对时间很敏感。数据只在那么一瞬间有效,可谓稍纵即逝。所以等到单步执行到那里时,

两种“动态调试程序”的方法

两种“动态调试程序”的方法——写给编程的新人们 调试程序是一件苦差事,即使是经验老到的程序员,也会有焦头烂额的时候。对于大段大段的代码,找了几个钟头还没发现其中的错误,难免头昏眼花,这时我们就想到:既然眼睛没看出代码中的错误,那么,我们让错误在运行的时候暴露出来,然后顺藤摸瓜,找到代码中的错误处。这就是所谓的“动态调试”。相对的,不让程序运行,而是一行一行的看代码,找错误,可称为“静态调试”。 方法一:使用断言。 C和C++有一个很好用的东西:assert(即:断言),就是说程序员认为assert里面的东西必然成立。如果断言失败(程序员认为它必然成立,但事实上不成立),说明程序某个地方出了问题,程序将终止。 例如,我们希望求一个整数x的算术平方根的整数部分r,如果计算正确,则必然有r*r<=x, (r+1)*(r+1)>x,所以我们可以这样写: #include /*在C++中,用#include*/ int SquareRoot( int x ) { int r; /* 计算r */ assert( r*r <= x ); assert( (r+1)*(r+1) > x ); return r; } 如此一来,一旦计算发生错误,程序就会立即终止,并提醒程序员有错误发生,在哪一行。在写代码的时候插入一些assert,可以有效的帮助程序员找出错误。同时,也可以在错误时停止程序,避免错误的扩大。

方法二:在IDE中使用动态调试。 很多IDE(集成编辑环境)都带有动态调试功能,诸如:单步运行、变量监视等,有的甚至给出了寄 存器、反汇编、函数调用堆栈。但使用最频繁的应该是前两种。 单步运行和变量监视通常结合使用。以VC2003中文版为例,当程序编译以后,每按一次F10键,可执行一条语句,然后停下来。这时调试者可以看看哪些变量发生了改变,这种改变是否在自己预料之中。 监视变量的方法是,在单步运行的时候选择菜单中的“调试”->“窗口”->“监视”(VC的其他版本也比较类似),打开监视的窗口,在窗口左边输入需要监视的表达式(比如:要监视变量a,就输入“a”;要监视a+3的值,就输入a+3)。 除了F10以外,还有几个快捷键。如果正在被运行的行是一个函数,则按F11,可运行到函数的内部。按Shift+F11可以将所在的函数运行完,直到所在的函数返回才停下。按F5可一直运行直到程序结束。当然,遇到“断点”的话,程序也会停下。在编辑或调试的时候,按F9可以把所在的行设置/取消断点。 这样一行一行的执行,可以把诸如循环、if语句的处理都看得请清楚楚。甚至,通过监视“函数调用堆栈”,对学习递归也有一定的好处。 可能我说得不是很清楚,但初学编程的话一定要学调试。不然可能程序编译连接都通过,但运行起来错误一堆一堆的,用不了多久就没信心继续学下去了。 #include main() {int a=2,b; b=((++a)*(++a)*(++a)); printf("%d\n",a); printf("%d",b); } 这个分析很正确的我也上机调试过 结果是a=5 b=80 其实++,--运算符都属于单目运算符 它们都有两种方式:一种是前缀方式,一种是后缀方式。 前缀运算表达式的值为原来变量值加1,后缀表达式的值为原变量值 也就是说前缀形式是先增1,后被引用;后缀形式是先被引用,后增1 再一个就是运算符优先级的问题:小括号为最高优先级,应该先计算,计算方向为从左向右,单目运算符优先级次之,计算方向为从右向左

PLC程序现场调试的方法

P L C程序现场调试的方 法 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

PLC程序现场调试的方法——【非常重要】 02-04 16:42更新林慧玲分类:围观:625人次微信二维码 1、要查接线、核对地址 要逐点进行,要确保正确无误。可不带电核对,那就是查线,较麻烦。也可带电查,加上信号后,看电控系统的动作情况是否符合设计的目的。 2、检查模拟量输入输出 看输入输出模块是否正确,工作是否正常。必要时,还可用标准仪器检查输入输出的精度。 3、检查与测试指示灯 控制面板上如有指示灯,应先对应指示灯的显示进行检查。一方面,查看灯坏了没有,另一方面检查逻辑关系是否正确。指示灯是反映系统工作的一面镜子,先调好它,将对进一步调试提供方便。 4、检查手动动作及手动控制逻辑关系 完成了以上调试,继而可进行手动动作及手动控制逻辑关系调试。要查看各个手动控制的输出点,是否有相应的输出以及与输出对应的动作,然后再看,各个手动控制是否能够实现。如有问题,立即解决。 5、半自动工作 如系统可自动工作,那先调半自动工作能否实现。调试时可一步步推进。直至完成整个控制周期。哪个步骤或环节出现问题,就着手解决哪个步骤或环节的问题。 6、自动工作 在完成半自动调试后,可进一步调试自动工作。要多观察几个工作循环,以确保系统能正确无误地连续工作。 7、模拟量调试、参数确定 以上调试的都是逻辑控制的项目。这是系统调试时,首先要调通的。这些调试基本完成后,可着手调试模拟量、脉冲量控制。最主要的是选定合适控制参数。一般讲,这个过程是比较长的。要耐心调,参数也要作多种选择,再从中

VC动态调用DLL的调试方法

VC动态调用DLL的调试方法 学习各种高级外挂制作技术,马上去百度搜索"魔鬼作坊",点击第一个站进入,快速成为做挂达人。 很多初学DLL和COM编程的人都为DLL的调试方法发愁。我结合自己学习COM的体验,总结DLL程序的调试如下。 DLL是一个不可运行的程序,它必须有其它程序的加载才可运行。故要调试DLL程序,需要一个测试程序。根据测试程序的不同,我将DLL调试分三种请况。 1.测试程序有源码。 2.测试程序无源码,只有可执行(exe)文件。 3.对DLLRegisterServer函数和DLLUnregisterServer函数的调试。 一:测试程序有源码 对于这种情况,我们可将测试程序的工程(dllCall)和dll程序的工程(dllTest)建立在同一个工作区下。 编译链接dllCall文件,确保生成了dllCall.exe,然后我们将dllTest设置为活动工程。因dllTest需要有测试程序,我们可按如下方法设置。 选择Project->Settings->Debug->Executable for Debug session: 在其文本框中填入dllCall.exe的路径。 按以上操作设置好后,编译,链接dllTest没错后,开始调试。 在dllCall中设置断点。 在dllTest中设置断点。 断点设置好后,在确保dllTest为活动工程的前提下,开始调试,程序将在断点处停下。 二:测试程序无源码 如果测试程序无源码,则不能将测试程序和dll程序联合调试,但可以只调试dll文件。在这种情况下,dllCall.exe的路径要填对,确定dllCall.exe的确调用了dllTest工程下的dllTest.dll文件。

实验一-Keil软件的使用及简单程序的调试方法

实验一Keil软件的使用及简单程序的调试方法 一、实验目的 掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。 二、实验器材 计算机1台 三、实验内容 1.Keil的使用方法。 2.建立一个单片机汇编语言程序的调试过程及方法 四、实验步骤 1.Keil的使用方法。Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。启动Keil 后的界面如下:

几秒钟后即进入Keil的编辑界面。用户便可建立项目及应用程序。 2.简单程序的调试方法 Keil是通过项目工程来管理汇编程序的。因此在调试程序前必须建立一个工程,工程名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。 (1)建立一工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项。并在弹出的对话框中确定保存的位置及工程名称。 又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。选择Atmel公司的AT89C51单片机。如下图所示

单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。 (2)建一文件 单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。如下图所示。 (3)将文件添加到工程中 单击“T arget 1”前的“+”号则展开后变成“-”号,并右键单击“Source Group 1”在弹出的下拉菜单中执行“Add Files to Group ‘Source Group 1’”命令并弹出对话框在该对话框中的“文件类型”下拉列表中选择“Asm source file”后找到要添加的文件名并选中,单击“Add”即可。

PLC程序的调试方法及步骤(精)

PLC程序的调试方法及步骤 PLC程序的调试可以分为模拟调试和现场调试两个调试过程,在此之前首先对PLC外部接线作仔细检查,这一个环节很重要。外部接线一定要准确无误。也可以用事先编写好的试验程序对外部接线做扫描通电检查来查找接线故障。不过,为了安全考虑,最好将主电路断开。当确认接线无误后再连接主电路,将模拟调试好的程序送入用户存储器进行调试,直到各部分的功能都正常,并能协调一致地完成整体的控制功能为止。 1.程序的模拟调试 将设计好的程序写入PLC后,首先逐条仔细检查,并改正写入时出现的错误。用户程序一般先在实验室模拟调试,实际的输入信号可以用钮子开关和按钮来模拟,各输出量的通/断状态用PLC上有关的发光二极管来显示,一般不用接PLC实际的负载(如接触器、电磁阀等)。可以根据功能表图,在适当的时候用开关或按钮来模拟实际的反馈信号,如限位开关触点的接通和断开。对于顺序控制程序,调试程序的主要任务是检查程序的运行是否符合功能表图的规定,即在某一转换条件实现时,是否发生步的活动状态的正确变化,即该转换所有的前级步是否变为不活动步,所有的后续步是否变为活动步,以及各步被驱动的负载是否发生相应的变化。 在调试时应充分考虑各种可能的情况,对系统各种不同的工作方式、有选择序列的功能表图中的每一条支路、各种可能的进展路线,都应逐一检查,不能遗漏。发现问题后应及时修改梯形图和PLC中的程序,直到在各种可能的情况下输入量与输出量之间的关系完全符合要求。 如果程序中某些定时器或计数器的设定值过大,为了缩短调试时间,可以在调试时将它们减小,模拟测试结束后再写入它们的实际设定值。 在设计和模拟调试程序的同时,可以设计、制作控制台或控制柜,PLC之外的其他硬件的安装、接线工作也可以同时进行。 2.程序的现场调试 完成上述的工作后,将PLC安装在控制现场进行联机总调试,在调试过程中将暴露出系统中可能存在的传感器、执行器和硬接线等方面的问题,以及PLC的外部接线图和梯形图程序设计中的问题,应对出现的问题及时加以解决。如果调试达不到指标要求,则对相应硬件和软件部分作适当调整,通常只

C#代码动态编译、动态执行、动态调试

C#代码动态编译、动态执行、动态调试 前几天看到一篇关于.net动态编译的文章.NET中的动态编译,很受启发。在此基础上我做了一些封装,为使调用更加简单,并增加了对动态代码调试的支持,相同代码只编译一次的支持,代码改动自动重新编译,代码引用文件的自动加载和手工加载等功能。 如上图,我封装的类CSharpProvider很简单,下面说明一下一些公共成员的用法。 公共属性 AssemblyFileName:这个属性指定动态编译后生成的配件名称。 CompilerParameters:这个属性指定编译的参数

References:这个属性指定被编译代码中的引用。调用者只要调用 References.Add("xxx.dll"),就可以加入自己的引用,对于System命名空间的所有引用,不需要手工加入,该类会自动加载。对于用户自己的组件,如果不手工指定引用文件,该类会自动根据名字空间名进行猜测。 SourceCodeFileEncoding:如果以文件形式编译,指定文件的编码类型。 公共方法 public bool Compile(string code) 输入代码字符串,并编译 public bool CompileFromFile(string sourceCodeFileName) 编译输入的代码文件 public object CreateInstance(string code, string typeFullName) 创建类的实例 如下面代码,可以输入CreateInstance(code, "MyInterface.IHelloWorld"),也可以输入CreateInstance(code, "HelloWorld"),程序会根据 类型名称来自动找到符合条件的类并实例化。如果代码中有多个指定类型的类,将实例化第一个。 using System; using MyInterface; [Serializable] public class HelloWorld : MarshalByRefObject, IHelloWorld { public string Say()

3-2节 程序调试的方法

3-2节程序调试的方法 编程是一件需要认真和细心的工作。通过让学生从李明同学学习程序设计时所遇到的困难和他情感上所表现出来的“窘态”故事开始,道出程序调试不但需要技巧、更需要有耐心和毅力的道理,从而激发学生学习程序调试的兴趣和热情,拉开了本节的充幕。 接着,布置任务,让学生输入课本P83四段有错误的程序,要求学生自己探究,并改正程序。 最后分析程序运行的情况,总结出程序运行出错的四种类型: 一、拼写错误 1)在工程窗口中,看到红色文字显示的程序是有拼写错误的。 2)同时还要检查其它的拼写错误 Pring改为print Integr改为integer 2、编译时出现的错误 S应该改为a 3、运行时出现的错误 运行时的错误是指编译通过后,在执行程序时出现的错误,如用0作除数等。

例如:a=0的时候,将会出现0作除数的情形 4、逻辑错误 程序运行后,得出的结果不是正确的。这说明程序存在逻辑错误。逻辑错误产生 的原因很多,运算符使用不正确、语句次序不对、循环的设置不对等都可以产生 逻辑错误。 如这里的程序的出口应该是tree>=100 任务: P85 马上行动:

你和同学们能解决以上的问题吗?以合作、交流的方式大胆尝试一下,你会有意外的收获! 一、本节小结: 本节主要通过任务驱动、探究的形式,介绍了程序的错误类型,分析了产生错误的原因,程序的调试与排错的方法,让学生“从做中学”,进一步体验了程序调试的方法和技巧,培养了 学生调试程序的耐心和毅力,提高了学生程序设计的素养。 五、课外练习 编写一个程序,将从键盘输入的一个自然数进行因数分解,输出结果并上机验证。

交通信号灯程序调试步骤

交通信号灯调试 一、线路板的检测和调试 1.硬件调试 硬件调试是利用基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。其中硬件调试可分为静态调试与动态调试两步进行 1.1静态调试 静态调试是在用户系统未工作时的一种硬件检测。 第一步:目测: 检查外部的各种元件或者是电路是否有断点。 第二步:用万用表测试: 先用万用表测试目测中有疑问的连接点,再监测电源和地线是否正确、可靠连接已经他们之间是否有短路现象,发现问题后及时修改,以免通电试验后造成线路板和元器件的毁坏。 第三步:通电检测: 给焊接好的线路板通电,通电后先目测有无异常现象(冒烟,火花现象),然后用手背测试大功率器件和集成电路等有无温升,若出现以上现象,立即断电; 检测所有有插座的器件的电源和地是否符合要求; 在本项目中需要测试的有: U1-40=5V,U1-31=5V,U1-9=0V(S1没按下),U1-9=5V(S1按下),还有SB1—SB4 4个按键分别是按下时=0V,弹起时=5V; 利用导线分别把LED、蜂鸣器、数码管接到相应的低电平,测试线路和元器件是否正常工作。 1.2动态调试 动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件连接逻辑错误等的一种硬件检查。动态调试的一般方法是由近及远、由分到合。由分到合是指首先按逻辑功能将用户系统硬件电路分为若干

块,当调试电路时,与该元件无关的器件全部从用户系统中去掉,这样可以将故障范围限定在某个局部的电路上。当各块电路无故障后,将各电路逐块加入系统中,在对各块电路功能及各电路间可能存在的相互联系进行调试。由分到合的调试既告完成。由近及远是将信号流经的各器件按照距离单片机的逻辑距离进行由近及远的分层,然后分层调试。调试时,仍采用去掉无关元件的方法,逐层调试下去,就会定位故障元件了。 2软件调试 在本项目中,我们首先将教材《单片机应用技术》中的第二页的“信号灯的闪烁控制”的程序录入,并烧录到芯片中去,然后通电试验,这是合格的线路板的状态时所有发光二极管闪烁,按下复位按键S1,系统复位。 下面我详细介绍下程序录入、烧录的整个过程,在这个过程中需要一个编译软件和一个烧录器,在这儿我们的编译软件采用的是万利电子的“MedWin V2.39中文版”烧录器采用的是致远电子“EasyPRO 80B”。 2.1 编写程序 双击桌面的“MedWin V2.39中文版”图标,弹出对话框: 在这儿,我们不是选用的万利电子的仿真器,所以我们选择“模拟仿真”选项后,单击“模拟仿真”就会进入MedWin V2.39中文版的操作界面,在此时如果是第一次使用这个软件,他会首先弹出一个对话框:

VB程序调试技巧

一,如果遇到了一些逻辑性很强的问题比如有循环什么的我的方法是在关键地方加入 变量 这样可以比较好地找到问题 二,msgbox 三,监视窗口,如下面的例子 For i=1 to 10000 A=sqr(i) next i 你想再监视当i=799时A的值,就可以添加监视,方法:点调试,添加监视,选择“当监视值为真时中断”,上面表达式框中写上i=799, 这样你按F5,运行程序,程序会在i=799时中断。其他选项你可以自己去琢磨一下。 一个程序如何顺利的“脱产”,调试的过程是非常重要的。学过、钻研过程序设计的人都有同样的感受,很多情况下,调试程序的过程会比程序编写的过程更为困难。任何一个天才都不敢说,他编的程序是100%正确的。几乎每一个稍微复杂一点的程序都必须经过反复的调试、修改,最终才完成。所以说,程序的调试是编程中的一项重要技术。 程序中的典型错误类型 A类:语法错误。 B类:编译错误。

C类:属性设置错误。 D类:逻辑错误。 调试方法 方法一:利用“MSDN帮助菜单” “MSDN帮助菜单”是一个很好的自学工具,对于出现调试对话框的菜单来说,可以按下“帮助”按钮查看错误原因。 对于一些不是很清楚的函数格式、保留字的作用,也可以借助“帮助菜单”。 方法二:逐过程检查 主要检查代码是否写对,位置有没有错误,关键是要确定一段代码是在哪个事件控制下的。 不妨先在脑海中把整个程序过一边,想一想究竟会有哪些事件发生(有些事件是人机互动的,例如:鼠标点击;而有些是机器自己执行的,这时要想到计时器的作用);然后想一想每一件事发生后有什么效果。我们代码所编写的一般就是事件发生后的这个效果,那么以此事件来决定代码所写的位置。

实验一动态LED显示程序的编程与调试

实验一动态LED显示程序的编程与调试 一、实验目的 1、通过编程熟悉和掌握动态LED显示的工作原理; 2、熟悉Keil uVision4的使用方法; 3、了解和掌握C程序的编程与调试。 二、实验设备 计算机一台 单片机开发板一套 三、实验原理 本实验是利用AT89C51单片机的定时中断来实现动态LED显示的设计。该实验的硬件电路原理图如下图所示。该硬件主要包括AT89C51单片机,8位共阴极数码管,74573锁存器等电路。8位数码管在AT89C51单片机的控制下完成动态LED显示,74573锁存器用于锁存P0口的数据。

LED显示程序的流程图如下所示。该程序在定时中断中调用,每次显示一位LED,轮流进行, 实现动态LED显示。 四、实验步骤 1、连接试验相关模块的连线; a.J21跳线帽接左边

b.JP165断开 c.JP10(P0)接J12 d.JP16(右排)接JP8 注意:排线有金属触点的一面朝右。 连接完毕如下图所示: 2、根据流程图及已给出的附件来完成C语言源程序。 3、修改并完善实验程序。 4、用单片机开发板对所编程序进行调试。调试步骤如 下: a.双击桌面上的“PZISP自动下载软件”快捷键; b.在弹出的对话框中,芯片类型选择STC90C5XX系列; c.点击打开文件,找到你编写的C语言程序所产生的test1.hex 文件; d.打开单片机开发板上的开关键;

e.点击下载程序即可。 注意:出现下载失败的情况及修改方法: 1)擦除下载失败-------波特率调低一点 2) 波特率超时----------低速下载 5、把实验仪器恢复原状,本次实验结束。 五、注意事项 1、按要求连接计算机与单片机开发板并检查正确后再通 电开始操作。 2、用完后要关掉所有的电源,最后再拆排线。 六、实验报告及要求 1、总结用C语言编写动态LED显示的应用程序的原理与方 法。 2、本实验的中断程序初值是定时1ms所得到的,由于动 态显示就是利用人的视觉暂停作用使人看到多个数码管同时显示的效果,所以同学们可以把时间改为50ms,100ms观察数码管的显示有什么不同。 3、分析你所编写的程序,画出各个函数的流程图,并作 必要的说明。 4、写出你的心得体会。

C Free 5程序调试方法

C Free 5.0 程序的单步调试 创建一份新的代码文件 可直接点击“文件”下的白色图标,或点击“文件”选择“新建”,或按快捷键“Ctrl + N”(C Free 5.0默认情况下新建的代码文件为.cpp 格式,可在“工具”、“环境选项”、“新建文件类型”中更改,C语言标准格式为.c 格式) 基于实例的C程序调试介绍 一、查看变量的内容 # include int main(int argc, char* argv[]) { int i; int sum; sum=0; for(i=1;i<=10;i++) sum=sum+i; printf("sum=%d",sum); return 0; } 第一步,打开C Free 5.0,输入上面的代码。 第二步,把光标移到“sum=0;”这一行,按F10 它的作 用是设 一个断 点,程序 运行到 这里时, 会停下 来。也就 是说,接 下来,程 序必须 通过按 F7键单 步运行 了。 第三步: 按F9 (开始调试) 我们发现有一箭头停留在这句语句上,它指示程序停留的位置,而箭头所在的语句(“sum=0;”)还没有执行。事实上,我们可以通过看一下内存变量sum的内容来验证。方法是这样的: 打开“调试”下的“监视”,或者按快捷键“Alt + 3”。 在“监视”的空白处点击鼠标右键,选择“添加监视”。

输入需要监视的变量名,这里输入为sum 这时我们可以在监视窗口中看到sum的内容不为0,而是一个随机的值。 第四步,我们按一下F7(进入),我们发现sum的内容变为0了。这说明“sum=0;”这句语句被执行了。 我们还可以用同样的方法看一下i的内容。 只需要鼠标点 第六步,一步一步地按F7,我们可以发现在单步执行for循环语句的时候i和sum的内容在不断变化。当退出循环时,我们发现i的内容为11(因为变量i的内容为11,i<=10这个条件不满足,所以程序退出循环)。 附带提一下,当程序已经执行了“sum=0;”这一句语句后,如果我们直接把光标移到“printf("sum=%d",sum);”,然后按Ctrl+ F8,我们可以直接把上面的for循环都执行了,而不必一步一步地按F7。在实践中,为了查找程序的逻辑错误,我们往往要单步运行该程序好几遍。如果已经通过单步调试验证某一段语句(如一个for循环语句或者几个用户定义的函数)正确了,我们就可以用Ctrl+ F8跳过这段语句,直接运行到还未测试的语句。二、F7(进入)和F8(跳过)的区别 # include int add(int m,int n) { int s; s=m+n; return s; } int main(int argc, char* argv[]) { int i=1; int j=2;

PLC程序调试方法及步骤

来源:中国物资采购网时间:2010年5月6日11时20分【大中小】PLC程序的调试可以分为模拟调试和现场调试两个调试过程,在此之前首先对PLC外部接线作仔细检查,这一个环节很重要。外部接线一定要准确无误。也可以用事先编写好的试验程序对外部接线做扫描通电检查来查找接线故障。不过,为了安全考虑,最好将主电路断开。当确认接线无误后再连接主电路,将模拟调试好的程序送入用户存储器进行调试,直到各部分的功能都正常,并能协调一致地完成整体的控制功能为止。 1.程序的模拟调试 将设计好的程序写入PLC后,首先逐条仔细检查,并改正写入时出现的错误。用户程序一般先在实验室模拟调试,实际的输入信号可以用钮子开关和按钮来模拟,各输出量的通/断状态用PLC上有关的发光二极管来显示,一般不用接PLC实际的负载(如接触器、电磁阀等)。可以根据功能表图,在适当的时候用开关或按钮来模拟实际的反馈信号,如限位开关触点的接通和断开。对于顺序控制程序,调试程序的主要任务是检查程序的运行是否符合功能表图的规定,即在某一转换条件实现时,是否发生步的活动状态的正确变化,即该转换所有的前级步是否变为不活动步,所有的后续步是否变为活动步,以及各步被驱动的负载是否发生相应的变化。 在调试时应充分考虑各种可能的情况,对系统各种不同的工作方式、有选择序列的功能表图中的每一条支路、各种可能的进展路线,都应逐一检查,不能遗漏。发现问题后应及时修改梯形图和PLC中的程序,直到在各种可能的情况下输入量与输出量之间的关系完全符合要求。 如果程序中某些定时器或计数器的设定值过大,为了缩短调试时间,可以在调试时将它们减小,模拟调试结束后再写入它们的实际设定值。 在设计和模拟调试程序的同时,可以设计、制作控制台或控制柜,PLC之外的其他硬件的安装、接线工作也可以同时进行。 2.程序的现场调试 完成上述的工作后,将PLC安装在控制现场进行联机总调试,在调试过程中将暴露出系统中可能存在的传感器、执行器和硬接线等方面的问题,以及PLC的外部接线图和梯形图程序设计中的问题,应对出现的问题及时加以解决。如果调试达不到指标要求,则对相应硬件和软件部分作适当调整,通常只需要修改程序就可能达到调整的目的。全部调试通过后,经过一段时间的考验,系统就可以投入实际的运行了。 本文来自: 中国物资采购网https://www.360docs.net/doc/0e7445038.html, 详细出处参考:https://www.360docs.net/doc/0e7445038.html,/newsinfo/2010-5-6/201056-11200321719338297.html PLC程序现场调试指在工业现场,甩有设备都安装好后,所有连接线都接好后的实际调试。也是PLC程序的最后调试。现场调试的目的是,调试通过后,可交给用户使用,或试运行。现场调试参与的人员较多,要组织好,要有调试大纲。依大纲,按部就班地一步步推进。开始调试时,设备可先不运转,甚至了不要带电。可随着调试的进展逐步加电、开机、加载,直到按额定条件运转。具体过程大体是: 1)、要查接线、核对地址。要逐点进行,要确保正确无误。可不带电核对,那就是查线,较麻烦。也可带电查,加上信号后,看电控系统的动作情况是否符合设计的目的。 2)、检查模拟量输入输出。看输入输出模块是否正确,工作是否正常。必要时,还可用标准仪器检查输入输出的精度。 3)、检查与测试指示灯。控制面板上如有指示灯,应先对应指示灯的显示进行检查。一方面,查看灯坏了没有,另一方面检查逻辑关系是否正确。指示灯是反映系统工作的一面镜子,先调好它,将对进一步调试提供方便。 4)、检查手动动作及手动控制逻辑关系。完成了以上调试,继而可进行手动动作及手动

Android动态代码注入调试

目录 一、动态代码注入技术 (1) 二、动态分析工具jdb介绍 (2) 四、jdb动态分析Android实例应用程序 (10) 五、jdb动态分析第三方文件管理器应用程序 (17) 六、动态注入动态链接库 (20) 一、动态代码注入技术 Android动态代码注入即是不修改源程序只修改进程的寄存器、内存值等就能控制程序实现既定目标的一种方法。动态代码注入技术本质上就是一种调度技术,动态代码注入相比于普通的调试,最大的区别就是动态代码注入是一个“自动化调试并达到加载自定义动态链接库”的过程。所谓自动化,其实就是通过代码实现,在Linux上通过Ptrace就可以完成查看变量值、修改变量值、跟踪进程跳转、查看进程调试堆栈等待所有功能,当然,Ptrace功能是比较原始的,平时调试中的功能还需要很多高层逻辑封装才可以实现。一般而言,我们要对一个进程进行动态注入,主要有以下几个方便目的:增强目标进程的功能、修复目标进程缺陷、劫持目标进程函数、窃取目标进程数据、篡改目标进程数据。

如上图所示,进程A注入到进程B后,通过司改寄存器和内存,让进程B加载自定义的动态链接库a,当a被加载后,a会尝试加载其他模块,比如加载dex文件等等,具体的注入过程如下: ?ATTATCH,指定目标进程,开始调试; ?GETREGS,获取目标进程的寄存器,保存现场; ?SETREGS,修改PC等相关寄存器,使其指向mmap; ?POPETEXT,把so path写入mmap申请的地址空间; ?SETRESG,修改PC等相关寄存器,使其指向dlopen; ?SETREGS,恢复现场; ?DETACH,解除调试,使其恢复; 下面就介绍一些简单的进程注入方法: 二、动态分析工具jdb介绍 JDB是一个简单的Java命令行调试器,包含在JDK中。使用JDB

程序调试步骤

一、认识调试功能 在组建(build)菜单中,点击开始调试(start debug),在其下级子菜单中,包含了启动调试器运行的各项子命令(如图1所示) 图1 开始调试菜单 各子命令及其功能如下: ?Go:从程序中的当前语句开始执行,直到遇到断点(后面讲)或遇到程序结束。 ?Step Into:控制程序单步执行,并在遇到函数调用时进入函数内部。 ?Run to Cursor:在调试运行程序时,使程序运行到当前光标所在位置时停止,相当于设置了一个临时断点。 二、单步调试代码 利用图1菜单中的Step into功能或按F11键,进入单步调试状态,有一个箭头指向程序的第一行,每按一次F11键,程序再向前执行一行语句,如图2所示。

图2 开始调试后的界面 我们对图2的界面进行观察。 首先,菜单中增加一个调试(debug)菜单,如图中①处,下面是菜单中的部分功能(鼠标浮到上面时,会有提示,请试一试。) ?Step Into(F11):单步调试程序,遇到调用函数时,进入函数内部逐步执行; ?Step Over(F10):也是单步调试程序,遇到调用函数时,并不进入函数内容执行; ?Step Out:调试程序时,从正在执行的某个嵌套结构的内部跳到该结构的外部,常用于知道调用函数中不存在错误的情况; ?Run to Cursor(CTRL-F10):调试程序时,直接运行到插入点处。 其次,和当前正在执行的语句相关的变量,以及其当前的值显示在了②处。 再次,黄色箭头代表了正在执行的位置。 【练习1】 下面,针对求1+2+3+...+100的程序,体验单步执行。步骤: (1)编写如图所示求1+2+3+...+100的程序,排除编译错误; (2)按前述开始单步执行,用“Step Into(F11)”持续执行,在执行过程中,注意观察变量的变化。 ?调试中,要将自己的预期和计算机执行的结果进行比较,当发现不一致,恭喜,问题找到了。

实验二 汇编语言动态调试程序Debug的使用

实验二 Debug的使用(基础与验证型) 一、实验要求和目的 熟练掌握动态调试程序DEBUG的使用; 二、软硬件环境 1、硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存; 2、软件环境:装有MASM 5.0、Debug、LINK、EDIT、CREF.EXE和EXR2BIN.EXE等应用程序。 三、实验涉及的主要知识单元 通过编辑、汇编和连接后的程序是可以执行的程序。但是,一个程序特别是比较复杂的程序不能保证没有一点错误。因此,在投入正式运行前必须进行调试,以检查程序的正确性。调试程序Debug就是用来调试汇编语言程序的一种工具。Debug的主要功能有显示和修改寄存器及内存单元的内容;按指定地址启动并运行程序;设置断点使程序分段运行,以便检查程序运行过程中的中间结果或确定程序出错的位置;反汇编被调试程序,它将一个可执行文件中的指令机器码反汇编成助记符指令并同时给出指令所在的内存地址;单条追踪或多条追踪被调试程序,它可以逐条指令执行或几条指令执行被调试程序,每执行一条(或几条)指令后,Debug程序将中断程序的运行并提供有关结果信息;汇编一段程序,在Debug的汇编命令下可以直接输入助记符指令,并将其汇编成可运行程序段。此外,Debug还可以将磁盘指定区的内容或一个文件装入到内存或将内存的信息写到磁盘上等等。 启动Debug程序:在DOS状态下可以用下面的命令启动Debug程序: DEBUG [路径文件名.扩展名] Debug后面的文件名及路径是指被调试程序的文件名及路径,Debug后面的文件必须是程序的可执行文件,其扩展名可以是.EXE 或.COM。在此命令后,DOS将调试程序Debug 调入内存,Debug接着将被调程序送入内存。比如:DEBUG 123.EXE 调试程序Debug的主要命令如下: (一)显示内存单元内容的命令D 格式(1):-D 地址 从指定地址开始,显示128个字节的内容,每一行的左边显示段内偏移地址,接着显示16个单元的内容,最右边区域则显示这一行的16个单元所对应的可显示的字符。若无可显示的字符,则用圆点(小数点)填充。 D命令中的地址可为段内偏移量,也可为段基址和段内偏移量两部分,中间用冒号隔开,如1680:0110,即指段基址为1680H,段内偏移量为0110H。Debug中所显示的数据均为十六进制数,且省去了后面的H标志。 格式(2):-D 范围

汇编语言的编程步骤与调试方法

汇编语言的编程步骤与调试方法 一、汇编源程序的建立 1. 使用工具 (1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文 件; (2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件- 目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表; (3)Link连接程序,对使用的目标文件和库文件进行连接,生 成.exe文件,同时调试用.map-地址映像文件; 如果源程序无语法错误,上述三步将生成可运行的.exe文件, 如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存 在错误,需要进行调试。 (4)Debug调试程序,对.exe文件进行调试,修改,直到程序正 确。 图3 目标程序生成步骤图2. 编程过程 (1)用文本编辑软件,编写扩展名为.asm的源文程序文件。 (2)用汇编程序对编好的源文件进行汇编。 命令行:masm [*.asm] ↙ 如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。 使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。 *.obj-目标文件,用于连接生成可执行文件; *.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于

调试; *.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。 (3)目标文件的连接 命令行:link [*.obj] [*.obj] [*.lib] ↙ 连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。 *.map-地址映像文件,给出内存地址分配的有关信息。 下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe 文件。 (4)执行程序 执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。 二、汇编程序的调试

程序调试方法

程序调试方法 李应洪2005-8-12 一、CommConstants.java文件的写法,里面注意按模块写。‘是’和‘否’用‘1’、‘0’ 二、Tomcat无法启动,先查看log,也行是java文件未完全编译,也有可能是web.xml或者Config.xml 文件配置问题。 三、Java程序 1.在发生异常的时候,我们是先尽快定位到关键的地方,如找不到,先不要急于每个方法里面 去单步跟踪Step into,而是先在几个自认为可能出错的程序段上Step over,肯定会找出是某 个段出现问题,然后在逐渐细化。 2.调试主要看一下几个关键点:设置断点Breakpoints,查看变量Variables,添加表达式 Expressions,查看控制台console。 3.设置断点:一般是在关键地方设置断点,先找到关键点,然后将该关键点细化;再在关键点 里面设置断点,依次找出Bug。 4.查看变量Variables:在程序运行的当前java类里面,可以查看该类里面的任何属性(包括 Entity,Entity又有属性),这样一层一层的查看参数与变量的值。 5.单步跟踪到每个方法里面Step into,跟踪某个语句Step over,跟踪某方法侯返回Step return。 6.添加表达式:表达式其实是属于变量的一部分,当你想关注确定的变量的时候,可以通过添 加表达式来调试更为直观。 7.查看控制台:控制台是我们找出Bug关键点的平台。在控制台里面可以直接定位到某个文件 的某个具体的方法或者某个语句,而且可以在控制台直接链接到对应的语句去。 8.Java文件的错误除了了在控制台会出现外,在Jsp页面还会出现。在Jsp页面出现的Java文 件的错误,也会表现的页面,同时会指出出错的地方。定位到行代码。 9.Java程序出错频率最高的地方: 1)空指针NullPoint,当一个class或者变量为null的时候,如果你在调用它的方法,系统 会抛出空指针异常。一般会有: a)rkdBiz= (CC_RkdBiz) BaseObjectFactory.getBaseObject("https://www.360docs.net/doc/0e7445038.html,_RkdBiz"); 如果rkdBiz=null,再rkdBiz.insert();就会出现异常。因此,需要先再ClassFactory.xml 文件里面先配置实例化文件。 b)CC_RkdEntity rkdEntityTemp = this.selectRkd(conn, ryEntity, rkdEntity.getRkdID()); if (rkdEntityTemp != null) { // 组织数据 rkdEntityTemp.setGysMc(rkdEntity.getGysMc()); } c)for (int i = 0; i < rkdEntity.getRkdMxEntityArray().length; i++) { //需要加上rkdEntity.getRkdMxEntityArray()!=null的判断 } d)// 获得最大ID,转化为long型,赋值给实体对应的属性 SequenceNoSeeker sequenceNoSeeker = new SequenceNoSeeker(); rkdEntity.setRkdID(Long.valueOf(sequenceNoSeeker.nextSequenceNo(conn,

相关文档
最新文档