c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键

c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件


文章目录

  • c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
    • @[TOC](文章目录)
  • c/c++:windows平台下依赖的动态库
  • cpu内部结构与寄存器(了解一波)
  • 编译程序常见的错误
  • c语言代码还能反汇编??
  • 集成环境IDE,integrated development environment
  • vs常用的快捷键
  • 总结
  • 总结

c/c++:windows平台下依赖的动态库

下载一个软件:depend.exe
c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第1张图片
完事就可以查看hello.exe执行所依赖的第三方库了
直接打开hello.exe即可查看

c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第2张图片
现在我的depend.exe运行不了,卡死了
gg

反正了解一下即可

cpu内部结构与寄存器(了解一波)

我在计算机组成原理里面已经说过了
这里简单了解,拓展一下

c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第3张图片
寄存器在cpu内部,容量小,但是速度很快
位往往是cpu一次性处理位数的大小
c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第4张图片
运算的数的位数
c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第5张图片
内存中的数据是磁盘缓存中来
磁盘缓存从磁盘中来,硬盘

靠近cpu速度
c语言底层对内存时有封装的
我们不看寄存器
计算机发展是向着人类习惯来的,所以底层适应计算机的那些东东比较复杂,我们不咋看【汇编语言】

后来的python,c++,java,go都是底层用c封装的
反正我们后面的代码简单,但是最核心的还是c和c++

visual studio支持你写汇编语言
而且高级的工程师都会汇编语言,这样你能更好地调试代码,知道如何调试代码

#include
#include

int main(void)
{
	int a;
	int b;
	int c;//定义变量

	__asm
	{//高级c语言的工程师都会汇编语言的
		mov a, 3
		mov b, 4
		mov eax, a
		add eax, b//加法结果自动放入eax
		mov c, eax//将eax和放入c变量
	}

	printf("%d\n", c);
	return 0;
}

c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第6张图片
看来c语言中,有自动的内存使用区,需要计算时
将变量这些东西放入寄存器中

懂?

如果直接用c呢

#include

int main(void) 
{
	int a = 3;
	int b = 5;
	int c = a + b;
	printf("%d\n", c);//直接打印,c底层会搞成汇编语言,但是我们不管了
	//%d是格式匹配符,匹配整型数据。放双引号中,c就匹配c

}

c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第7张图片
看见了没,超级简单的代码
比汇编容易多了

美滋滋

%d是格式匹配符

`#include

int main(void)
{
int a = 3;
int b = 5;
int c = a + b;
printf(“%d\n”, c);//直接打印,c底层会搞成汇编语言,但是我们不管了
//%d是格式匹配符,匹配整型数据。放双引号中,c就匹配c
printf(“%d + %d = %d\n”, a, b, c);
}`c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第8张图片
这个c语言,当年学习的时候老费劲
其实很简单

现在用过了java,python,c++和汇编语言之后
终于明白,c原来真的挺溜的

编译程序常见的错误

你鼠标放到错误的地方,它会提示你,红色波浪线
c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第9张图片
c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第10张图片
visual studio的功能很强大的,它会提示你

反正逻辑错误不好查
其他的错误好说

实在不行,就断点调剂即可。
美滋滋
%x的代码好像也没问题
打个断点,程序会停止在这句代码,不执行
你按逐行执行,它就会执行这行代码

c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第11张图片
程序不是写出来的
而是调出来的

调试代码的过程远比写代码重要。

工具–选项里面找文本编辑器,c/c++,然后勾选行号,选中
然后就可以设置断点了

逐语句执行下一条指令
美滋滋

可以按调试,窗口,监视器,你看看那些变量会啥样
c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第12张图片
逐行运行
你看看c
c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第13张图片
变了,看见了么
美滋滋

要先启动调试,你才能添加窗口哦

一般f11是逐行执行,遇到函数,会进入这个函数去一步步执行
f10是执行本行,不会进去,直接执行,然后跳过本行

这种我们在其他的编程语言中依然也是这么玩的
python,java啥的,都这样

c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第14张图片

c语言代码还能反汇编??

调试-窗口-反汇编
美滋滋
c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第15张图片
就出来了反汇编的代码
c语言和汇编程序指令是一一对应的

好说,反正我们会汇编语言,你也能理解这玩意
不会汇编也无所谓

集成环境IDE,integrated development environment

c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第16张图片

Qt
c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第17张图片

visual studio
pycharm
idea

vs常用的快捷键

c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第18张图片
自动格式化代码
如果缩进出问题
咱们只需要一个快捷键,就搞定
ctrl+k同时还要追加ctrl+f

#include

int main(void)
{
	int a = 3;
	int b = 5;
	int c = a + b;
	printf("%d\n", c);//直接打印,c底层会搞成汇编语言,但是我们不管了
	//%d是格式匹配符,匹配整型数据。放双引号中,c就匹配c
	printf("%d + %d = %x\n", a, b, c);
}

排版缩进,和各种空格,都给你排版好了
非常非常nice的

整块注释
ctrl+k,追加ctrl+c

#include

int main(void)
{
	int a = 3;
	int b = 5;
	int c = a + b;
	//printf("%d\n", c);//直接打印,c底层会搞成汇编语言,但是我们不管了
	%d是格式匹配符,匹配整型数据。放双引号中,c就匹配c
	//printf("%d + %d = %x\n", a, b, c);
}

懂了吧

ctrl+k补加,ctrl+u取消注释

#include

int main(void)
{
	int a = 3;
	int b = 5;
	int c = a + b;
	printf("%d\n", c);//直接打印,c底层会搞成汇编语言,但是我们不管了
	//%d是格式匹配符,匹配整型数据。放双引号中,c就匹配c
	printf("%d + %d = %x\n", a, b, c);
}

f9设置断点
f5调试
ctrl+f5时运行
f10逐过程不进函数
f11逐行进函数

总结

复习课堂笔记,看看自己写的博客即可
很简单的

c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第19张图片
c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第20张图片
c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键_第21张图片
前面这几个博客,就是我复习的这些内容,这个课讲得很好的。


总结

提示:重要经验:

1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

你可能感兴趣的:(c++,c语言,c++,windows,调试代码,反汇编)