Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C &C++에서 분할 오류를 찾는 방법은 무엇입니까? (GDB 사용)

<시간/>

분할 오류는 잘못된 배열 인덱스에 액세스하거나 제한된 주소를 가리키는 등의 메모리 액세스 위반으로 인해 발생하는 런타임 오류 중 하나입니다. 이 기사에서는 GDB 도구를 사용하여 이러한 유형의 오류를 감지하는 방법을 살펴보겠습니다. .

오류를 찾기 위한 코드와 해당 단계를 살펴보겠습니다.

#include main() { int* ptr =NULL; *ptr =1; //알 수 없는 메모리 위치에 접근을 시도합니다. printf("%p\n", ptr);}

'gcc –g program_name.c'를 사용하여 코드를 컴파일하고 './a.out'을 사용하여 실행

출력

soumyadeep@soumyadeep-VirtualBox:~/Cpp_progs$ ./a.outSegmentation 오류(코어 덤프)

분할 오류가 발생했습니다.

'gdb ./a.out core' 쓰기

soumyadeep@soumyadeep-VirtualBox:~/Cpp_progs$ gdb ./a.out coreGNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-gitCopyright (C) 2018 Free Software Foundation, Inc.License GPLv3 version 나중에 이것은 자유 소프트웨어입니다. 자유롭게 변경하고 재배포할 수 있습니다. 법이 허용하는 한도 내에서 어떠한 보증도 하지 않습니다. 자세한 내용을 보려면 "show copying" 및 "show 보증"을 입력하십시오. 이 GDB는 "x86_64-linux-gnu"로 구성되었습니다. 구성 세부 사항을 보려면 "show configuration"을 입력하십시오.버그 보고 지침은 다음을 참조하십시오..GDB 매뉴얼 및 기타 문서 리소스를 온라인으로 찾으십시오:. 도움말을 보려면 "help"를 입력하십시오. "apropos word"를 입력하여 "word"와 관련된 명령을 검색합니다..../a.out...done./home/soumyadeep/Cpp_progs/core에서 기호 읽기:해당 파일 또는 디렉토리가 없습니다.(gdb) 

'r'을 입력하고 Enter 키를 누릅니다.

시작 프로그램:/home/soumyadeep/Cpp_progs/a.outProgram 수신 신호 SIGSEGV, Segmentation fault.0x000055555555465e in main() at 1230.find_seg_error.c:55 *ptr =1; //알 수 없는 메모리 위치(gdb) 접근 시도

따라서 오류가 성공적으로 발생했습니다. 이제 GDB를 종료합니다.

(gdb) quit디버깅 세션이 활성 상태입니다.하위 1 [프로세스 2794]가 종료됩니다.어쨌든 종료하시겠습니까? (y 또는 n) y