gdb 예제

GDB를 사용하려면 먼저 cc 또는 gcc의 -g 옵션을 사용하여 프로그램을 컴파일합니다. 다음은 위의 예제에 대한 gdb로 시작하는 몇 가지 유용한 명령입니다: 실행 또는 r –> 처음부터 끝까지 프로그램을 실행합니다. 브레이크 또는 b –> 특정 줄에 중단점을 설정합니다. 비활성화 -> 중단점을 비활성화합니다. enable -> 비활성화된 중단점을 활성화합니다. 다음 또는 n -> 다음 줄의 코드를 실행하지만 함수에 대해 자세히 알아보지 마십시오. 단계 -> 다음 명령으로 이동, 함수로 다이빙. 목록 또는 l -> 코드를 표시합니다. 인쇄 또는 p -> 저장된 값을 표시하는 데 사용됩니다. 종료 또는 q -> gdb에서 종료됩니다. [모든 중단점 지우기]를 선택합니다. 계속하십시오 –> 정상적인 실행을 계속합니다.

도움말 항목을 입력하면 다음과 같은 자세한 정보가 표시됩니다. 함수가 호출될 때마다 프로그램이 일시 중지됩니다. 명령이 성공하면 중단점 번호, 프로그램 카운터 의 정보, 파일 이름 및 줄 번호를 인쇄합니다. 실행 중에 중단점이 발생하면 중단점 번호, 함수 이름을 인수, 파일 이름 및 줄 번호의 값으로 인쇄합니다. 중단점은 명령의 주소(*0x 앞에 오는 헥사데피mal 형식) 또는 줄 번호로 설정할 수 있으며 조건(조건이 실패하면 중단점이 설정되지 않음)과 결합할 수 있습니다.예를 들어 == 10인 경우 break findSquare입니다. 그런 다음 각 명령 클래스에서 도움말을 실행할 수 있습니다. 예를 들어 중단점에 대한 전체 목록은 다음과 같습니다 . gdb는 GNU 디버거, 리눅스의 표준 디버거입니다. 나는 나에게 줘 15 분을 볼 때 예제 출력의 부족을 생각 나게하고 난 고맙게도, 출력을 포함 CppCon 2015에서 그렉 법에 의해 GDB 이야기의 보기를 변경합니다! 그것은 15 분 가치가 있습니다.

다음 예제를 통해 프로그램 및 코어 덤프 의 디버깅 절차를 이해합니다. 두 프로그램 모두 C++로 작성되며 서로 다른 이유로 인해 코어 덤프를 생성합니다. 이 두 예제를 통해 코어 덤프를 생성하는 C 또는 C++ 프로그램을 디버깅할 수 있어야 합니다. 이 예제에서는 초기화되지 않은 메모리로 인해 코어를 덤프할 수 있는 프로그램을 보여 줍니다. 이전 섹션에서는 중단점의 올바른 호출에 도달하기 위해 세 가지를 계속 사용해야했습니다. 수백 개의 호출이 호출된 경우 조건부 중단점을 사용합니다. 다음은 예제입니다. 이 예제에서는 0으로 분할하는 동안 발생한 예외로 인해 발생하는 오류를 캡처하는 방법을 보여 줍니다. 위의 예에서는 두 개의 중단점이 메인에, 다른 하나는 findSquare에서 두 개의 중단점이 정의되었습니다. 위의 명령 find를 사용하여광장 중단점이 삭제되었습니다. 명령 다음의 인수가 없는 경우 명령은 모든 중단점을 삭제합니다.

예제가 처음에 너무 간단하다는 점을 감안할 때 memset ()에 대한 호출이 segfault를 일으키는 원인이 되었다는 것은 여전히 분명해야합니다. 예를 들어 위의 실행에서 중단점은 함수 findSquare에 유지되고 프로그램은 인수 “1 10 100″으로 실행되었습니다. 함수가 처음에 a = 1로 호출되면 중단점이 발생합니다. 이제 검사점(검사점)을 만들고 gdb는 프로세스 ID(4272)를 반환하고 일시 중단 된 모드로 유지하고 continue 명령이 호출되면 원래 스레드를 다시 시작합니다. 이제 중단점이 = 10으로 발생하고 다른 검사점 (pid = 4278)이 만들어집니다. 정보 검사점 정보에서 별표는 gdb가 계속되는 경우 실행되는 프로세스를 언급합니다. 특정 프로세스를 다시 시작하려면 프로세스의 일련 번호를 지정하는 인수와 함께 다시 시작 명령을 사용합니다. 모든 프로세스 실행이 완료되면 정보 검사점 명령은 아무 것도 반환하지 않습니다. 이를 위해 문제가 발생할 수 있다고 생각되는 지점에 중단점을 설정해야 할 수 있습니다.

カテゴリー未分類