一个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

相关文章

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Spring Boot 3 整合 Spring Cloud Gateway实践过程

《SpringBoot3整合SpringCloudGateway实践过程》本文介绍了如何使用SpringCloudAlibaba2023.0.0.0版本构建一个微服务网关,包括统一路由、限... 目录引子为什么需要微服务网关实践1.统一路由2.限流防刷3.登录鉴权小结引子当前微服务架构已成为中大型系统的标

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

SpringBoot整合easy-es的详细过程

《SpringBoot整合easy-es的详细过程》本文介绍了EasyES,一个基于Elasticsearch的ORM框架,旨在简化开发流程并提高效率,EasyES支持SpringBoot框架,并提供... 目录一、easy-es简介二、实现基于Spring Boot框架的应用程序代码1.添加相关依赖2.添

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::