首页 > 其他分享 >调试技巧

调试技巧

时间:2023-01-30 18:36:29浏览次数:38  
标签:const 技巧 int destination char source 调试 指针

first actual case of bug being found

快捷键

f9:设置/取消断点

f5:启动调试,经常用于跳到下一个断点

f10:逐过程调试,一个过程可以是一个函数,或是一个语句

f11:逐语句调试,比f10更细腻,用于进入函数内部

ctrl+f5:直接运行

更多调试技巧

一个问题

#include <stdio.h>
int main()
{
	int i = 0;
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	for (i = 0; i <= 12; i++)
	{
		arr[i] = 0;
		printf("hello\n");
	}
}// 结果是死循环

书籍推荐

《明解c语言》
《c和指针》
《c陷阱和缺陷》
《c语言深度解剖》

模拟实现字符串函数

my_strcpy

// 第一版
void my_strcpy(char* destination, char* source)
{
	while (*source != '\0')
	{
		*destination++ = *source++;		// hello的拷贝
	}
	*destination = *source;			//‘\0’的拷贝
}

int main()
{
	char arr1[] = "xxxxxxxxxx";		
	char arr2[] = "hello";
	my_strcpy(arr1, arr2);
}
//第二版
void my_strcpy(char* destination, char* source)
{
	while (*destination++ = *source++)   // '/'的ascll码为0,0为假
	{
		;
	}
}

int main()
{
	char arr1[] = "xxxxxxxxxx";
	char arr2[] = "hello";
	my_strcpy(arr1, arr2);
}
// 第三版
char* my_strcpy(char* destination, const char* source)
{
	assert(destination != NULL); 
	assert(source != NULL);			// 断言
	char* ret = destination;
	while (*destination++ = *source++)
	{
		;
	}
	return ret;
}

int main()
{
	char arr1[] = "xxxxxxxxxx";
	char arr2[] = "hello";
	printf("%s\n",my_strcpy(arr1, arr2));
}

断言:如果为真,则无事发生,如果为假,则报错

const修饰指针

const 修饰变量,这个变量就被称为常变量,不能被修改,但本质上还是变量

const a = 20;
a = 10;   // erro

const 修饰指针变量的时候, 如果const 放在* 的左边,修饰的是 * p(即p指向的内容),表示指针指向的内容,是不能通过指针来改变的.

但是指针变量本本身是可以修改的

const a = 20;
int n = 100;

const int* p = &a;

*p = 20;	// no
p = &n;		// yes

const 修饰指针变量的时候, 如果const 放在* 的右边,修饰的是指针变量p,表示指针变量p是不能被修改的

但是指针所指向的内容是可以被修改的

const a = 20;
int n = 100;

int* const p = &a;

*p = 20;	// yes
p = &n;		// no

extern 关键字

视频链接

标签:const,技巧,int,destination,char,source,调试,指针
From: https://www.cnblogs.com/liuuu/p/17076930.html

相关文章

  • 使用GDB调试python调用的C++共享库
    目录1.首先编写python调用C++的demo2.gdb调试python程序3.全速运行程序4.查看堆栈信息当我们用Python调用C++的库,并且C++库中存在段错误崩溃时,首先想到的还是用gdb......
  • Python和C++联合调试
     python和c++分别在Linux和Windows下联合调试首先创建一个python测试项目和一个c++拓展项目一、在Windows下进行调试1.编译器安装2.C拓展模块安装3.调试......
  • python调用cpp 调试_python和C++联合调试
    python可以利用SO的方式去调用C++中的函数,但是需要一种调试方案来进行python和C++的联合调试,效果是直接在c++代码中打断点,然后python在进行c++so调用的时候,直接进入到断......
  • 一起调试 Python 和 C++
    大多数常规Python调试器支持仅调试Python代码。但是,实际上,Python结合C或C++一起使用时需要高性能或直接调用平台API的能力。(有关演练,请参阅创建适用于Pyth......
  • gdb同时调试python和c++
    说明:当我们的python程序的一些函数的后端实现为C++时(比如Pytorch,TensorFlow或tvm等)可以使用当前方法调试。有两种方式可以安装调试环境:一.搭建环境有两种方式搭建......
  • 深度学习基础课:重构并加入调试日志和测试代码
    大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序线上课程资料:本节课录像回放加QQ群,获得......
  • 小技巧
    Linux终端中使用命令:cat/proc/cmdline可以看到内核启动时U-boot传入参数。[root@oracle-linux7-9-5~]#cat/proc/cmdlineBOOT_IMAGE=/vmlinuz-5.4.17-2102.201.3.......
  • CAD怎么画3D模型?CAD画三维实体和曲面方法技巧
    大家都知道CAD主要用于二维绘图,但也提供了一些基本的三维设计功能。那么,CAD怎么画3D模型?本文小编就来给大家分享一下浩辰CAD软件中创建三维实体和曲面的几种方法吧!CAD画三......
  • 在Excel中vlookup使用技巧
    一、只需要用vlookup在一列中查找值,返回true或false(是或否),而不是返回匹配到的值。采用以下公式:=IF(ISNA(VLOOKUP(目标值,$D:$E,1,FALSE)),"否","是")原理是,VLOOKUP......
  • C#调用C++动态链接库dll之P/Invoke方式 — 2.在C#控制台程序中调试C++动态链接库
    很简单1.C#控制台项目右键-属性-生成-允许不安全代码-打勾;2.C#控制台项目右键-属性-调试-启用本地代码调试-打勾;......