首页 > 其他分享 >调试的学习

调试的学习

时间:2024-11-09 08:48:38浏览次数:3  
标签:arr int 学习 地址 报错 断点 调试

调试的进一步学习

补充:调用堆栈

例:

#include<stdio.h>
void test2()
{
	printf("This is duizhai.\n");
}
void test1()
{
test2();
}
void test(){
	test1();
}
int main()
{
	test();
	return 0;
}

以上的函数可以用调用堆栈进行理解,(调用堆栈 同样是一种调试手段)。

这种方式可以为我们反馈函数的调用逻辑,所以当我们在面对多个函数调用和嵌套时,这会是一个不错的理解方法。

接下来,我将讲解更加有具体的方法和个别有意思的案例

一.如何将断点设置在循环语句的内部

鼠标右键点击断点处,找到"条件"选项,设置条件断点。

二.如何解决实际遇到的运行错误

1.首先要对代码运行的结果有个预期,通过调试,我们一旦发现结果与预期不一致,这可能就是我们代码出错的地方

2.举例

int main()

{

int i;

int arr[10]={1,2,3,4,5,6,7,8,9,10};

//定义i和arr这个变量和数组

for(i=0;i<=12;i++) //显然这里发生了越界访问,程序肯定是运行出错,结果是这样的吗?

{

arr[i]=0;

printf(“陷阱.\n”);

} //执行循环语句.

return 0;

}

猜一猜代码结果会是什么?

可能报错,也可能一直循环进行…

为什么会一直循环的进行?这是一种有一定逻辑的巧合。

首先,我们定义了i和arr这俩个局部变量。局部变量是存放在栈区的,根据栈区内存的使用习惯,先使用高地址再使用低地址空间。 所以我们可以自己画一副草图。

栈区

高地址 i的地址在这
arr[7]
低地址 arr[4]
arr[0]

再根据数组随着下标的增加,地址会由低到高变化

所以在我们定义这两个局部变量的时候,有可能arr[12]的地址和i的地址是一样的。 因为我们越界访问arr[10],arr[11],arr[12]。我们无法保证i的地址不会和arr[12]是一致,如果一致,那么程序就会进入死循环中。

那么如果我先定义arr再定义i,是不会存在地址重合,可是由于数组越界使用,程序会直接报错。可是为什么上面例子,程序不会报错,而是一直运行呢?这是因为如果程序无法终止,那么它也就不会有时间来向你报错,因为它运行无法结束。

以上就是我的第一次补充和完善,感谢观看。

标签:arr,int,学习,地址,报错,断点,调试
From: https://blog.csdn.net/x_zavier/article/details/143639386

相关文章

  • 学习笔记(三十):ArkUi-UIContext.getPromptAction(弹窗)
    概述:基于promptAction弹窗演进而来,支持全局自定义弹窗,不依赖UI组件,依赖UIContext,支持在非页面文件中使用,弹窗内容支持动态修改,支持自定义弹窗圆角半径、大小和位置,适合在与页面解耦的全局弹窗、自定义弹窗显示和退出动画等场景下使用。注意:需先使用UIContext中的getPromptAct......
  • 2024-2025-1 20241311 《计算机基础与程序设计》第七周学习总结
    学期2024-2025-1学号20241311《计算机基础与程序设计》第七周学习总结作业信息这个作业属于哪个课程<班级的链接>(2024-2025-1-计算机基础与程序设计(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP))这个作业要求在哪里<作业要求的链接>(2024-2025-1计算机......
  • 工作学习笔记(四)枚举
    在写代码的时候,有的时候在判断的时候会粗暴的直接写a=1,b=2之类的,虽然这样代码也能正常实现运转,但是时间一长,就会忘记数字所代表的意义,即使有备注作为提示,也会给维护的人带来不小的麻烦。这时候就要用到枚举来增强代码的可读性了,就好比写了一个游戏,里面角色的状态的,比如:“存活”......
  • D61【python 接口自动化学习】- python基础之数据库
    day61数据库定义学习日期:20241107学习目标:MySQL数据库--130:MySQL入门使用学习笔记:在命令提示符内先试用MySQL使用图形化工具操作MySQLDBeaver安装DBeaver连接MySQL总结MySQL安装成功后,可以使用命令提示符查看数据库安装使用图形化工具DBeaver操作MySQL......
  • .NET学习笔记
    1.学习.NETWebAPI首先要知道和理解html四种基本请求    //get     使用GET命令只能取回信息并且不能对该信息做出一定的修改,通常GET命令对于Web是最安全的命令,因为不会改变资源的任何状态。对于任何httpgetapi,如果资源服务器上被发现,必须返回xml或者jso......
  • 大数据新视界 -- 大数据大厂之 Impala 性能优化:融合机器学习的未来之路(上 (2-1))(11/30)
           ......
  • 2024-2025-1 20241312 《计算机基础与程序设计》第7周学习总结
    |这个作业属于哪个课程|2024-2025-1-计算机基础与程序设计||这个作业要求在哪里|2024-2025-1计算机基础与程序设计第七周作业||这个作业的目标|①数组与链表②基于数组和基于链表实现数据结构③无序表与有序表④树⑤图⑥子程序与参数||作业正文|https://www.cnblogs.com/s......
  • c语言学习9选择结构
    结构化编程1选择结构九条语句顺序结构:选择结构: Ifelse switchcase循环结构:While for dowhile跳转结构:Break continue gotoreturn顺序结构:体现CPU执行程序运行规则(路径)①程序从上到下执行②程序逐条执行选择结构 ifelse和switchcase  第......
  • c语言学习10循环结构
    循环结构让程序多次执行,反复执行Whiledowhile for1While循环格式While(表达式){循环体;}当表达式为真时,while执行。另:非0即真死循环while(1)例:水仙花数在100-999中找到所有水仙花数,并打印;个位的三次方+十位的三次方+百位的三次方=本身1将数据遍历inta=10......
  • VTK知识学习(3)-显示圆柱
    1、添加显示控件前台界面<WindowsFormsHostx:Name="windowHost"Grid.Row="1"/>构造函数中添加。privateRenderWindowControlrenderWindowControl=newRenderWindowControl();publicMainWindow(){InitializeComponent();......