
codeblocks设置断点和单步调试方法:
主要是建一个project;
而且project要放在英文目录下面;
程序项目的目录里不能有中文;
new project->console application->选择c or c++ ->filename->有个debug要钩上->写程序;
编译后使光标定位在程序某处,按F4使程序运行到光标处,再按F7就可以单步调试,按Shift+F7单步进入。
这种方式的话只能通过多线程来解决。
原因是如果你直接把当前程序直接停住,其实你是把当前程序的 UI 线程(主线程)给暂停了。也就是说程序根本就不会响应用户 *** 作,按钮单击也就自然不会响应了。
那么,为了能够使得新的线程被暂停后,只有在主线程按下按钮线程才会继续。我们得用 ManualResetEvent 类来解决这个方法。具体的还是看代码吧:
using SystemThreading;
ManualResetEvent mre = new ManualResetEvent(true);
Thread newThread = new Thread(() => {
while()
{
for(int i = 0; i < 5; i++)
{
mreWaitOne(); // 阻止新线程,直到 mre 对象被按钮单击事件处理方法调用其 Set() 方法
}
}
});
private void button对象_Click(object sender, EventArgs e)
{
mreSet(); // 调用 ManualResetEvent 对象的 Set 方法以让新线程继续执行
}
ManualResetEvent 的作用就是允许线程直接互相发送信号,指示对方线程是否应该被暂停(阻止)一段时间,直到当前线程执行好自己的任务并允许另一线程继续执行。
比方说,我新建了一个线程,负责输出 2 这个数字。然而我希望这个线程能够在主线程开始输出 1 这个数字前就开始执行,但是 2 这个数字却出现在 1 之后。代码如下:
ManualResetEvent mre = new ManualResetEvent(true);
Thread newThread = new Thread(() => {
mreWaitOne(); // 调用了 mre 的 WaitOne 方法使当前线程(根据上下文判断是新线程)阻止,直到其它线程对 mre 对象调用了其 Set 方法
ConsoleWriteLine("来自新线程的:2");
});
newThreadStart();
ConsoleWriteLine("来自主线程的:1");
newThreadSet();
输出结果如下:
来自主线程的:1
来自新线程的:2
我就说一下该程序的功能:
在数据段BLOCK变量下存放了二十个数,占据二十个字单元;
把第一个数赋给AX寄存器然后和下一个数比较,如果AX中的数大,就再和下下一个数比较;如果AX中的数较小,就把大数装入AX再和下个数比较。累计比较十九次,最后AX中装的就是最大的那个数,将此数传递给MAX变量。
你可能刚开始学汇编觉得难,没关系,先搞懂CPU、存储器、I/O以及总线之间的关系,再记住几个常用的CPU寄存器,至于汇编程序大部分时间都是装(MOV)来装去的,多读一些程序就熟了。
祝你好运。
在这个函数中按F9设断点,按F5进入调试,然后再F10或F11单步调试。这里我对F10和F11作个分析吧 F10是单步调试命令,但不进入一个函数。 F11是调试时跟踪进入函数里的一个命令。当你要进入的这个函数是API函数时,因为有的API函数没有提供源代码,只提供了lib库,所以你要进入这个函数内部时,先会提醒你给出源代码的路径,你没有给出,所以就只能显示这个函数的汇编指令了(lib的反汇编)。 调试时F11只是给你需要进入自己写的函数时用到的命令,遇到API函数时就不要用F11了,用F10就可以了。
1、设置断点
在程序里面放置一个断点,也就是双击需要放置断点的程序左边的栏目上。
2、调试
(1)点击"打开透视图"按钮,选择调试透视图,则打开调试透视图界面,然后先设置断点,按调试按钮则可以调试程序。
(2)或者直接点击调试按钮,那个虫子样子的按钮,然后就会进入调试透视图的界面。前提你需要是要在程序中设置好断点。
(3)或者右键单击该程序,选择debug as(调试方式) -> java application(Java应用程序),则可以调试程序了。前提需要是要在程序中设置好断点。
3、调试快捷键
以debug方式运行java程序后
(F5)单步执行程序,遇到方法时进入;
(F6)单步执行程序,遇到方法时跳过;
(F7)单步执行程序,从当前方法跳出;
(F8)直接执行程序。遇到断点时暂停;
按F5就是一层层深入的debug相当于剥葱样,会进入每个方法内部;
按F6就是在当前函数一步步debug,不理会深层次运作;
按F7就是如果当前进入了某个方法内部,都跳转到该方法的结尾代码处;
按F8就是如果后面还有断点,则运行到下一断点处,否则运行完程序;
另,在debug时,会有很多有用信息显示在debug框里,如堆栈信息,需要自己实践;在程序界面里,鼠标移到变量上时会有当前变量的属性值。
4、改变变量的值
在变量窗口中右击变量,在d出的菜单中选择[change value],d出修改画面。
改变其值后,按下ok按钮;这时变量的值就改为修改后的值了。
5、检查代码段执行结果
在程序运行的时候,想看看某段程序运行的结果是否正确,或者查看某个变量的值时:
选择一句或一段代码,右键单击在d出的菜单中选择Watch(创建查看表达式)项,此时,代码的执行结果将显示在Expressions(表达式)窗口中。
选择一句或一段代码,右键单击在d出的菜单中选择Inspect(检查)项,可以直接显示表达式的值。
1、写一个有bug的简单程序。
2、运行程序,产生错误,然后进行debug调试。可以按照图示进入调试,也可以直接按快捷键F10。
3、首先凭借直觉,设置断点。
4、观察变量值的变化,是否在要求的范围内,或者运行时程序是否产生内存溢出;最终发现在a=1出产生错误,改正后,再运行。
5、修改程序后重新编译,若无错误,即完成,若有错误,继续进行第三步和第四步,直至错误消除或者产生正确结果为止。
以上就是关于codeblocks怎么设置断点和单步执行全部的内容,包括:codeblocks怎么设置断点和单步执行、C#中,如何实现“单步执行”的按纽、给下面的汇编语言源程序加注释,分析程序的功能,画出程序流程图。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)