- 博客(24)
- 收藏
- 关注
原创 使用gdb查看调式程序,IDE集成编程环境是如何使用gdb展示堆栈和监视变量
最直观的当属于vscode配置c/c++的debug环境了,在vscode中有个.vscode文件夹,里面有一个lanuch.json文件,里面就可以配置gdb,gcc的文件位置,还有传入的命令参数,让vscode能够直接像visual studio那样直接把程序跑起来,并且配备了直观,好用的互动debug界面包含但不限于调用堆栈的显示,局部变量自动监视,全局变量监视等功能。但是我很好奇这个gdb是如何规整地查看这些变量的数据的,这个工具是怎么样调用底层的gdb来完成这一个过程的,于是就自己琢磨了一下。
2025-12-03 23:00:02
616
原创 Linux环境下登陆shell的执行流程
了解这一个过程,你可以自己在.bashrc或者该profile文件添加shell命令完成环境变量的添加,文件的移动,添加多个执行脚本,完成多个编译环境的隔离等操作。上述提及到的shell初始化流程在Linux环境下也是一致的,不信的话可以在虚拟机里面测试。上面的图是AI给的,但是AI给的我认为还是要保留怀疑的眼光,毕竟现在有很多AI会自己编造东西。我的做法就是去验证这个流程,我在本地的Cygwin的安装目录中的/etc/找到了profile脚本文件,里面有注释写着。原本该目录是一无所有的。
2025-11-29 10:11:30
400
原创 Linux中,管道命令的搭档:xargs
粗俗讲:xargs就是把管道命令的上一步执行结构收集为一个同一个的参数集合(有点像python里面的可变列表),通过管道搭配xargs可以连着实现linux的操作步骤。今天刚好又想到有用的地方,然后工作时候用了一下还是觉得挺好用,毕竟使用习惯之后,相较于每次都去目录点击打开,复制还是终端中操作比较快,记录一下。像上面那句是把target_file复制到前面所有的目录中。这个占位符可以用多次,多个地方。2.xargs -n 1 把上一个命令的结果一个一个喂给下一步命令(上次使用过,记录过)
2025-11-29 10:06:01
205
原创 利用git上传代码gitee,管理保存自己的文件
工作时候都是在用svn,svn在windows下面使用一般都是利用小乌龟的图形化界面,有了gui,使用管理代码工具也是方便许多。但是用习惯了带有gui的svn,最近在本地写自己代码的时候忘记怎么使用git了(PS:git也有很多图形化工具例如sourceTree工具,很好用!!!都是没有养好烂笔头的习惯,早先时候在学校就已经学过使用过了,但是没有做什么笔记,一下子都忘记怎么把本地的代码上传到远程仓库中保存,进行代码管理了。所以今天索性记录一下,随便拿个代码工程记录一下。
2025-11-23 23:15:25
368
原创 C语言实现:顺序表SeqList
工作使用的SDK(software delvelopment Kit)里面不像其他项目,有封装好的数据结构以及对应数据结构操作函数使用,想着等工作闲下来自己弄一份用得趁手的代码,有需要就添加到工程里面给自己用,不要反复去造轮子(至少我认为完成比完美更加重要)。难得今天闲暇,就自己做了份顺序表的代码。(AI确实恐怖啊,,,再一次感叹,现在的程序员一定要多用AI拓展自己的知识能力面,有这么好的一个免费老师,不用,淘汰的只会是自己)ps:为了给自己做工具用,不会讲太多原理和实现。
2025-10-30 15:47:39
268
原创 使用pkg-config查找库的包含目录还有gcc的传递参数
网上很多优秀的开源库,还有以前学习网络编程时候有使用到libevent的库。但是有时候有一种苦恼就是:我不知道它们在哪里,并且如何正确在代码里面写使用它们,以前都是查问题,有部分使用代码,我可以参考。但不是所有的库,头文件都能记住在哪里,什么名字,makefile中写什么包含命令的。(虽然我知道在/usr/lib /usr/include)。有没有什么工具能帮忙找呢?
2025-10-21 21:17:33
261
原创 初次体验下载安装glib库:gnome实现的数据结构库
工作时想使用一下数据结构处理一下工作内容,发现SDK里面没有封装好的内容。没工作之前没想到真的有一天要自己造轮子,还以为只是面试的八股文而已。但是也不能老造轮子对吧,而且还有可能健壮性不足,导致后面难追踪死机问题。所以就上网了解了一下linux环境有没有支持已经实现的C语言标准的数据结构库,可以直接拿来用。glib库广泛应用于桌面环境、嵌入式系统、GNOME等项目中。它提供了完整的面向对象编程模型(GObject)、信号/槽机制、内存管理等高级功能。主要我是想要一套能够好用的轮子,不讲那么多。
2025-10-21 20:51:39
331
原创 用C语言复习一下Linux网络编程
socket通信是建立在传输层TCP协议上的,TCP是一个面向连接的,安全的,流式传输协议,这个协议是一个传输层协议。如果有N个客户端和服务器建立了新的连接,通信的文件描述符就有N个,每个客户端和服务器都对应一个通信的文件描述符。只需要一个,不需要和用户端通信,负责检测客户端的连接请求,检测之后调用accept就可以建立新的连接了。4.等待并且接受用户端的连接请求,建立一个新的连接会得到一个新的文件描述符(通信用),没有新的连接请求就会阻塞。3.设置监听成功之后(成功之后开始监听,监听的是客户端的连接)
2025-10-19 17:25:34
344
原创 利用shell 临时环境变量和Makefile配置预编译宏管理代码工程:管理功能的开关按钮
产品有硬件部分和软件部分,而软件部分和硬件部分则由驱动来联动。但是大型的产品中驱动要负责很多的代码例如屏幕驱动,喇叭,声卡,按键,陀螺仪等,MCU也有很多模块;等驱动代码管理好了,上层的应用也有很多功能模块。这么重大的代码功能出来问题是很难排查的,所有才需要代码管理。C/C++语言对于管理代理有着很高的便利性,因为C/C++有宏定义!宏定义有一个应用就是条件编译。//utils.h#define UTILS_H //防止重复包含,导致链接时候有多份数据实体而报错。
2025-10-19 15:58:50
468
原创 关于windows下,visual studio如何添加预编译宏来模拟芯片上的软件执行为
在工作开发中遇到一个疑问:我实际在芯片上面跑的二进制执行文件,不是通过我用visual studio编译出来的文件。芯片厂商给的sdk(软件开发套件)中,包含了利用visual studio项目。这是一个利用mfc写的可以模拟芯片片上系统互动的界面,我们称之为模拟器。
2025-10-17 19:36:30
698
原创 使用cp和管道命令,复制文件到多个指定目录下
使用Linux环境开发,免不了这个对文件的编辑,复制等操作。但是很多时候,未必工作就能够让你用到那个带gui的环境。所以还是要熟练使用管道,基础命令。我的需求是有3级目录,第一级目录有5个指定目录,第二级有5个,第三级有多个目录,总共大概要复制文件到一百多个目录下。不可能敲一百次cp命令,想起管道命令。上网查了一下,故此记录。
2025-10-13 17:39:03
287
原创 大数据编程踩坑:Spark streaming连接不上kafka
工作了才发现自己在学校时候随手写的博客没有通过审核。这是当时自己在暑假自学spark大数据编程的时候,在hadoop生态组件的安装配置过程遇到了很多奇奇怪怪的问题,大致都是来自于自己的组件版本号不一致导致的。
2025-10-10 23:04:25
212
原创 c语言中,void* 空指针的妙用
本文介绍了void*指针在C语言中的三个实用场景:1)作为通用函数参数,通过类型转换实现多类型数据接收;2)作为malloc等内存分配函数的返回值,允许存储任意数据类型;3)在数据结构中实现通用容器,如链表节点存储不同类型数据。作者通过示例代码展示了具体实现方式,并建议多阅读优秀代码(如MSVC标准库)来学习优雅的实现方式。文章强调这类技巧在实际嵌入式开发和工作中的实用性,鼓励读者尝试实现自己的通用数据结构库。
2025-10-10 21:57:38
414
原创 C语言编译报错 multiple definition” / “redefinition
工作同事都习惯在C源文件声明全局变量,在其他模块使用的时候都是extern出去。我自己修改问题时候实在忍受不了这么乱了,大家都在extern,后续代码臃肿,不规范,而且很乱。于是我自己修改维护一下代码,把变量声明放在头文件,然后其他地方include头文件(这也是初学者应该做的规范。但是我们开发有数十个模块,没法跨模块include,所以才extern)。就是这样简单的操作,想不到犯了基础错误。编译时候总是报错multiple definition(很低级的错误,但是就是因为经常extern,不去遵循规范的
2025-09-30 16:06:43
237
原创 Linux下的常用sed命令。快速上手。
众所周知,Linux系统具有很多强大的命令行工具,还是优秀的管道设计。工作时候有需要特定的软件需要修改特定的文件来分配内存,当时用了sed命令觉得很便捷所以想要记录一下。今天要记录的是我工作中编写脚本要使用到的一个处理文本内容的sed命令。 下面给出8个复制到Linux终端就可以看到效果的命令: -i 直接保存; g 表示 行内所有匹配都替换。2.只替换第一次出现 每行只改第 1 个 "apple" → "orange" sed -i 's/apple/orange
2025-09-24 19:49:52
418
原创 c语言中的宏定义##黏贴使用
后来通过网上查找资料学习到了这是在宏定义中添加##是可以将特定字符黏贴在一起的用法。掌握这个用法,其实无论在上位还是单片机开发中,都能把一些重复性操作的代码写的更加优雅,而且简单。例如重复性的每个模块的初始化,pin引脚的输入输出,配置定时器等;可以减少冗余的函数名称修改和调用,而且增加了可复用的代码部分。我以前没见过这样宏定义使用的函数,于是抱着好奇的心挖掘了一下c语言的这个宏的使用方法。在工作的时候遇到c源代码中在某个实际操作的函数中出现了这样一句时,我整个人都有点反应不过来。
2025-09-21 21:39:06
222
原创 Visual studio编译软件报错:LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
应该是vs调用的文件调用错误了,没有找到自己的对应的cvtres.exe。平时都是使用的2017以上的版本,2010的visual studio还是没怎么用过。我在公司电脑删除的是自己安装vs的目录中的一个..\Microsoft Visual Studio 10.0\vc\bin\cvtres.exe。原来coff就是文件编译产生的obj文件,然后链接这些文件组成我们使用的程序都是要依靠visual studio中的cvtres.exe文件。上网查找资料,检查什么是链接到coff(AI询问就可以)。
2025-09-21 20:01:08
271
原创 kafka创建消费topic报错zookeeper is not a recognized option
上面的命令可以改为kafka-topics.sh --list --bootstrap-server localhost:2181。这是因为高版本的kafka已经舍弃了zookeeper这个选项词了,而是改为了–bootstrap。
2024-11-20 10:28:57
797
原创 创建生产者时候报错bootstrap-server is not a recognized option
注意:kafka的版本问题导致参数不一样,如果使用的是–zookeeper 一般后面就是接的某个机器的zookeeper的默认端口号2181,例如。报错了zookeeper is not a recognized option。上csdn解决了一下,这是因为kafka的版本号问题。也是报了类似的错误。
2024-11-20 10:12:46
825
原创 使用keil5中的debug调试模式时,遇到“bp cannot be set”和变量在watch窗口中“not in the scope”
这两天上班,带我的嵌入式师傅叫我帮他写程序,把霍尔板通过spi读取回来的数据转化为距离。真是有点吃力,对这个spi还有调试的这个软件都不是那么的熟悉。在编写过程中,需要debug查看变量,但是打断点遇到这两个琐碎问题。针对“bp can not be set”,这个就是真如提示信息所说,断点打多了,最好就是打四个,成功截断程序之后就取消没用的那个,这样就不会有这个问题。对于‘not in scope "这个问题是因为编译器会优化局部变量,把要查看的变量改为静态全局变量或者加volite 关键字可以解决。
2024-07-30 18:02:57
759
原创 QTcreator打开github别人的项目,构建运行报错一大堆语法错误以及未申明的标识符号等错误
QTcreator打开github别人的项目,构建运行报错一大堆语法错误以及未申明的标识符号等错误
2024-04-10 14:29:34
1409
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅