iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C/C++程序调试和内存检测的方法是什么
  • 547
分享到

C/C++程序调试和内存检测的方法是什么

2023-06-05 02:06:08 547人浏览 泡泡鱼
摘要

本篇内容主要讲解“C/C++程序调试和内存检测的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C/c++程序调试和内存检测的方法是什么”吧!1、常用的调试技巧(1)代码检查,重新阅读程

本篇内容主要讲解“C/C++程序调试和内存检测的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C/c++程序调试和内存检测的方法是什么”吧!

1、常用的调试技巧

(1)代码检查,重新阅读程序,排除比较明显的错误。编译时带上-Wall参数,生成所有的警告信息。

gcc -Wall -pedantic -ansi   表示以ansi/iso生成所有的警告西信息。

(2)取样法:在程序中增加一些代码,收集更多与程序运行时的行为相关的信息。使用条件编译,可以清楚的辨别哪些是调试代码,有利于调试后的代码整理。

例如:

#ifdef DEBUG
 std::cout << x :
  #endif

程序编译时可以选择性的加上-DDEBUG。如果加上这个标志,就定义了DEBUG这个符号,从而在程序中包含调试用的额外代码,没有加上该标志,这些调试代码将删除。

(3)程序的受控执行。用调试器来控制代码的运行,随时查看这些变量的状态。

为了能够调试程序,需要在编译和链接时为每个源文件加上编译选项参数。这些选项的作用是让编译器在程序中添加额外的调试信息。这些信息包括符号和源代码行号,调试器将利用这些信息向用户显示程序已经执行到的源代码的位置。-g标志是对程序调试性编译时常用的一个选项。调试信息的加入使可执行程序的长度成倍的增长、容量增加,程序运行时的内存数量还是和原来一样,程序调试结束后,最好还是将调试信息从程序的发行版中删除。

2、使用gdb进行程序调试

常用功能命令:

g++ -g -o test test.cpp  //编译时加上-g参数

启动gdb: gdb test

help

具备带有历史记录的命令行编辑功能,方向键选择之前执行过的命令,直接回车键再次执行最近执行过的那条命令。单步调试非常有用。

quit:退出

run:执行这个程序,程序运行失败时gdb会报告失败的原因和位置。

backtrace(bt):栈跟踪,失败时停止的位置,帮助我们找到程序到达错误地点的路径。

print:run 后检查变量,注意变量的生命期。

打印围绕当前位置前后的一段代码,继续使用list可以显示更多的代码。

设置断点,停止程序的运行,查看变量。help breakpoint,break lineNumber,cont,end,display,disable breakpoint number,clear,commands breakpointNumber.  

设置断点后经常使用单步调试命令next(n),查看程序运行的细节。 

3、valgrind内存调试

动态内存分配很容易出现程序漏洞,必须清楚自己分配的每一块内存,而且要确定没有使用已经释放的内存块,非常重要。内存调试的工具有很多,这里使用的是valgrind工具。在Centos 7中直接使用 yum install valgrind 安装。

#include <iOStream>

int main()
{
    int *ptr = new int [3];
    ptr[3]=1;

    delete [] ptr;
    std::cout << ptr[1];
    return ;
}

上面简单的代码编译运行不会发生错误,但是实际上发生了很严重的内存问题。ptr[3]访问越界,std::cout <<ptr[i],读已经释放过的内存。

通过valgrind工具可以检查出来:

[xgwang@localhost Desktop]$ g++ -g -o test2 test2.cpp

[xgwang@localhost Desktop]$ valgrind ./test2

==21739== Memcheck, a memory error detector
==21739== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==21739== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==21739== Command: ./test2
==21739== 
==21739== Invalid write of size 4
==21739== at 0x40081E: main (test2.cpp:8)
==21739== Address 0x5a1504c is 0 bytes after a block of size 12 alloc'd
==21739== at 0x4C2A7AA: operator new[](unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==21739== by 0x400811: main (test2.cpp:7)
==21739== 
==21739== Invalid read of size 4
==21739== at 0x40083F: main (test2.cpp:11)
==21739== Address 0x5a15044 is 4 bytes inside a block of size 12 free'd
==21739== at 0x4C2B5E1: operator delete[](void*) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==21739== by 0x400836: main (test2.cpp:10)
==21739== 
0==21739== 
==21739== HEAP SUMMARY:
==21739== in use at exit: 0 bytes in 0 blocks
==21739== total heap usage: 1 allocs, 1 frees, 12 bytes allocated
==21739== 
==21739== All heap blocks were freed -- no leaks are possible
==21739== 
==21739== For counts of detected and suppressed errors, rerun with: -v
==21739== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 2 from 2)

到此,相信大家对“C/C++程序调试和内存检测的方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: C/C++程序调试和内存检测的方法是什么

本文链接: https://www.lsjlt.com/news/240786.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C/C++程序调试和内存检测的方法是什么
    本篇内容主要讲解“C/C++程序调试和内存检测的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C/C++程序调试和内存检测的方法是什么”吧!1、常用的调试技巧(1)代码检查,重新阅读程...
    99+
    2023-06-05
  • c语言程序调试的方法是什么
    C语言程序调试的方法主要有以下几种:1. 打印调试信息:在程序中插入printf语句,输出程序执行过程中的变量值,以便观察程序执行的...
    99+
    2023-10-12
    c语言
  • c语言调试程序的方法是什么
    C语言调试程序的方法主要有以下几种:1. 打印调试信息:在代码中添加printf语句,输出变量的值或程序执行到某个位置的信息,以便检...
    99+
    2023-10-18
    c语言
  • C++技术中的内存管理:内存泄漏检测和调试技巧
    检测内存泄漏使用 valgrind 等工具检测内存泄漏。利用 ms visual studio memory profiler 识别泄漏。借助 c++++ runtime library...
    99+
    2024-05-08
    内存管理 调试技巧 c++ 标准库
  • windows下C/C++内存泄露检测的方法
    小编给大家分享一下windows下C/C++内存泄露检测的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!检测内存泄露利用Visual Studio调试器和CR...
    99+
    2023-06-15
  • C++内存泄漏调试方式是什么
    这篇文章主要介绍“C++内存泄漏调试方式是什么”,在日常操作中,相信很多人在C++内存泄漏调试方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++内存泄漏调试方式是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • c语言单步调试程序的方法是什么
    C语言单步调试程序的方法有以下几种:1. 使用IDE(集成开发环境)的调试工具:大多数IDE都提供了调试功能,可以逐行调试程序,设置...
    99+
    2023-10-19
    c语言
  • c++ cmake调试及配置的方法是什么
    在C++中使用CMake进行调试和配置主要有以下几个步骤:1. 安装CMake:首先需要安装CMake工具,可以从CMake官网下载...
    99+
    2023-10-18
    c++ cmake
  • c语言断点调试的方法是什么
    C语言的断点调试方法有两种:使用IDE集成的调试工具和手动插入断点。1. 使用IDE集成的调试工具:使用集成开发环境(如Visual...
    99+
    2023-10-18
    c语言
  • Linux下c++程序内存泄漏检测代码的示例分析
    这期内容当中小编将会给大家带来有关如何解决Linux下c++程序内存泄漏检测代码,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Linux下对于程序内存泄漏检测的方法很多,最常用的的莫过于使用valgrin...
    99+
    2023-06-17
  • plsql存储过程测试的方法是什么
    测试PL/SQL存储过程的方法通常有以下几种: 单元测试:编写单元测试用例来验证存储过程的正确性。可以使用PL/SQL工具,如U...
    99+
    2024-04-09
    plsql
  • sql存储过程调试的方法是什么
    调试SQL存储过程的方法可以有以下几种:1. 使用PRINT语句:在存储过程中插入PRINT语句,将变量的值或执行的步骤输出到消息窗...
    99+
    2023-08-28
    sql
  • db2存储过程调试的方法是什么
    要调试db2存储过程,可以使用以下方法: 使用db2的调试工具:db2提供了一些调试工具,可以帮助开发人员调试存储过程。其中包括...
    99+
    2024-04-09
    db2
  • mysql存储过程调试的方法是什么
    MySQL存储过程调试的方法有以下几种: 使用PRINT或SELECT语句输出变量值:在存储过程中可以使用PRINT或SELEC...
    99+
    2024-04-09
    mysql
  • 微信小程序的调试方法是什么
    今天就跟大家聊聊有关微信小程序的调试方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。控制器index.js 仅仅采取静态的代码走查还不够,我们需要将微信小程序启动起来,通过单...
    99+
    2023-06-05
  • 为什么选择C/C++内存检测工具AddressSanitizer?如何使用AddressSanitizer?
    目录 1、C++程序中的内存问题 2、AddressSanitizer是什么? 3、AddressSanitizer内存检测原理简述 3.1、内存映射来源地址:https://blog.csdn.net/chenlycly/article/...
    99+
    2023-10-12
    C/C++ 内存错误 内存检测工具 Valgrind ASan 内存占用 Visual Studio
  • C调用C++代码的方法是什么
    这篇文章主要介绍“C调用C++代码的方法是什么”,在日常操作中,相信很多人在C调用C++代码的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C调用C++代码的方法是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-25
  • C++内存泄漏的检测与实现详细流程
    目录内存泄漏带来的问题难点hook实现泄漏判断与追踪(malloc和free重载)宏定义实现hook内存泄漏 malloc/new 调用在堆上分配的内存却没有相应的free/dele...
    99+
    2022-11-13
    C++ 内存泄漏检测 C++ 内存泄漏实现
  • 虚拟主机程序测试的方法是什么
    虚拟主机程序的测试方法可以包括以下几个方面:1. 功能测试:测试虚拟主机程序的各项功能是否正常工作,包括安装配置、网站访问、数据库连...
    99+
    2023-09-07
    虚拟主机
  • C和C++的函数调用方式是什么
    这篇文章主要介绍C和C++的函数调用方式是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!调用方式C/C++函数有多种调用约定。C语言:__cdecl__stdcall__fastcallnaked__pascal...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作