一个C++小程序调试过程记录

2024-05-02 15:44
文章标签 c++ 记录 过程 程序调试

本文主要是介绍一个C++小程序调试过程记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Top 20 C++ Projects With Source Code [2024 Update]icon-default.png?t=N7T8https://www.interviewbit.com/blog/cpp-projects/

这个网页有一些简单的C++程序的源码,闲来无事,把第一个程序(Bookshop Management System Using C++)的源码下载了下来。

源文件就只有一个.cpp文件,确实是简单,但是看了一下,明显是为windows平台写的呀,而我的环境是Linux,那就直接给改造成Linux下的吧。

头文件里windows.h肯定是不能包含的了,另一个conio.h也提示找不到,search了一下,这个应该也是windows下的,那也不要了。

大概浏览了一下代码,需要MySQL数据库,而我的系统里还没装,那第一步就是准备运行环境。

MySQL和对应的开发库安装

sudo apt install mysql-server libmysqlclient-dev

安装这两个包,其它需要的包会自动安装,比如命令行客户端mysql-client等。

安装好MySQL之后,发现登陆有问题,经过search,在mysql - ERROR 1698 (28000): Access denied for user 'root'@'localhost' - Stack Overflow

找到了答案,选择里面提到的方案2设置,就可以用Ubuntu的账号登陆mysql了。注意,现在的版本重启服务一般都用systemctl restart mysql了。

按照Bookshop-Management-System-CPP-Project/README.md at master · aryan-khanijo/Bookshop-Management-System-CPP-Project · GitHub

这里面说的创建好数据库和表。如果对sql不熟悉,可以参考这个网页,一边看,一边试,基本的操作很容易学会。这个网站很好用,右边栏直接找到需要的命令看就可以了。

MySQL Tutorial - Learn MySQL Fast, Easy and Fun. 

C语言操作mysql数据库接口

对于用到的API的参考,可以到下面这个网站去查询。

MySQL :: MySQL 8.0 C API Developer Guide :: 5.4.84 mysql_store_result()

注意编译时需要加上mysqlclient库

g++ -o BookMgt -g BookShopManagement.cpp -lmysqlclient

调试void books::add()函数

这个程序各个类的操作都是类似的,无非是在某个表格中添加,更新,删除记录。所以我就找了一个函数来调试,即void books::add(),就是增加一本新的图书,录入图书的书名,作者,价格,数量等信息。在调试过程中,我发现原本的程序在windows上多半也有点问题,或者不完善。

为了了解mysql调用的返回值里到底是什么,又安装了gdb,然后在vscode里建立一个简单的launch.json,这样就可以直接在vscode里debug了。

//launch.json
{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb) Launch","type": "cppdbg","request": "launch","program": "${workspaceFolder}/BookMgt","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}

程序运行完后,可以到mysql里验证查看。

 

可以运行的源码:(注意,只调试了void books::add()这一个函数)

链接: https://pan.baidu.com/s/1IiIoby0D1pnxb6AIIa08gg 提取码: frgg 复制这段内容后打开百度网盘手机App,操作更方便哦 
 

 

这篇关于一个C++小程序调试过程记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954600

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke