📜  如何在C&C++中查找细分错误? (使用GDB)

📅  最后修改于: 2021-05-25 20:45:18             🧑  作者: Mango

什么是细分错误?
–这是由于内存访问冲突引起的运行时错误。例如:-Stackoverflow,读取冲突等。
在C++ / c中处理指针时,我们经常会遇到此问题。
在此示例中,我们将看到如何在程序中查找分段错误。我们将查找导致细分错误的行。
注意:-我已使用Linux发行版– Ubuntu进行了此演示。
因此,请考虑以下C++代码段。

// Segmentation Error Demonstration
// Author - Rohan Prasad
#include 
using namespace std;
  
int main()
{
    int* p = NULL;
  
    // This lines cause the segmentation 
    // error because of accessing the 
    // unknown memory location.
    *p = 1;
   
    cout << *p;
    return 0;
}


如何使用gdb查找该错误?

假设您的文件名保存为Program1.cpp 。将我们转到您的终端(位于此Program1.cpp所在的目录中)

步骤1:进行编译。
$ gcc -g Program1.cpp (在我的情况下)。
第2步:运行它。
$ ./a.out (它是目标文件)
如果显示分段错误(核心已转储),请按照以下步骤操作。
第三步:调试
$ gdb ./a.out core
您的输出将如下所示:
————————————————————————————

GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./a.out...done.
/home/logarithm/Desktop/Test Case/Miccl/core: No such file or directory.
(gdb)

————————————————————————————
然后只需键入r并按Enter键。
这样的输出将显示错误的语句。
————————————————————————————

(gdb) r
Starting program: /home/logarithm/Desktop/Test Case/Miccl/a.out

程序收到信号SIGSEGV,分段故障。
Sege.cpp:8中main()中的0x00005555555547de
8 * p = 1;
(gdb)

————————————————————————————
现在,您已经获得了导致细分错误的行。
从调试器退出并更正程序。
要退出,请输入quit并按Enter键。
————————————————————————————

(gdb) quit
A debugging session is active.

劣等1 [进程3617]将被杀死。

还是要退出吗? (y或n)y

————————————————————————————
因此,哇,您已经解决了头部折磨分割错误。

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。