> 백엔드 개발 > Golang > GDB 또는 기타 디버거를 사용하여 GO 코드를 어떻게 디버그합니까?

GDB 또는 기타 디버거를 사용하여 GO 코드를 어떻게 디버그합니까?

Emily Anne Brown
풀어 주다: 2025-03-21 12:49:38
원래의
1006명이 탐색했습니다.

GDB 또는 기타 디버거를 사용하여 GO 코드를 어떻게 디버그합니까?

GNU 디버거 인 GDB를 사용하여 GO 코드를 디버깅하여 효과적으로 수행 할 수 있습니다. GNU 디버거는 C, C, GO 프로그램을 디버깅하는 데 널리 사용됩니다. 다음은 GDB를 사용하여 GO 코드를 디버그하는 방법에 대한 단계별 안내서입니다.

  1. 디버깅 기호로 GO 프로그램을 컴파일하십시오.
    GDB를 사용하기 전에 디버깅 정보가 포함 된 GO 프로그램을 컴파일해야합니다. -gcflags 옵션을 사용하여 다음을 활성화하십시오.

     <code class="sh">go build -gcflags "all=-N -l" your_program.go</code>
    로그인 후 복사

    이 명령은 GO 컴파일러가 코드를 최적화하지 않고 필요한 디버깅 기호를 포함하도록합니다.

  2. GDB 시작 :
    프로그램이 컴파일되면 GDB를 시작할 수 있습니다.

     <code class="sh">gdb ./your_program</code>
    로그인 후 복사
  3. 중단 점 설정 :
    GDB에서는 break 명령을 사용하여 중단 점을 설정할 수 있습니다. GO의 경우 파일 이후 직접 함수 이름을 지정해야합니다. LINE 표기법은 직접 작동하지 않을 수 있습니다.

     <code class="gdb">(gdb) break main.main</code>
    로그인 후 복사

    이것은 프로그램의 진입 점에서 중단 점을 설정합니다.

  4. 프로그램 실행 :
    run 명령을 사용하여 실행을 시작하십시오.

     <code class="gdb">(gdb) run</code>
    로그인 후 복사

    프로그램이 중단 점에 도달 할 때까지 실행됩니다.

  5. 변수 검사 :
    print 명령을 사용하여 변수를 검사 할 수 있습니다.

     <code class="gdb">(gdb) print myVariable</code>
    로그인 후 복사

    슬라이스 또는 맵과 같은 이동 특정 유형의 경우 delve Retository에서 찾을 수있는 사용자 정의 예쁜 프린터를 사용해야 할 수도 있습니다.

  6. 코드를 통해 :
    nextstep 명령을 사용하여 코드를 통해 한 줄씩 이동합니다.

     <code class="gdb">(gdb) next (gdb) step</code>
    로그인 후 복사
  7. 계속 실행 :
    사용하여 다음 중단 점까지 프로그램을 continue 실행하도록하십시오.

     <code class="gdb">(gdb) continue</code>
    로그인 후 복사

GDB를 사용할 수는 있지만 GO를 위해 특별히 설계되지 않았으므로 GO 특이 적 구조 및 고어 라인을 효과적으로 검사하는 데 제한이 생길 수 있습니다.

GO와 함께 Go에서 중단 점을 설정하기위한 모범 사례는 무엇입니까?

GDB를 사용하여 GO에서 효과적으로 중단 점을 설정하려면 도구와 언어를 모두 이해해야합니다. 모범 사례는 다음과 같습니다.

  1. 중단 점에 기능 이름 사용 :
    Go의 런타임은 복잡하고 파일 : 라인 중단 점은 신뢰할 수 없을 수 있으므로 기능 이름을 대신 사용하십시오.

     <code class="gdb">(gdb) break main.main (gdb) break yourPackage.YourFunction</code>
    로그인 후 복사
  2. 상감 함수로 중단 점을 설정하지 마십시오.
    GO의 컴파일러는 인라인 기능을 인라인으로 만들어 이러한 기능에서 중단 점을 비효율적으로 만듭니다. 컴파일 중에 -gcflags "all=-l" 플래그를 사용하여 인라인을 비활성화 할 수 있습니다.
  3. 프로그램을 시작하기 전에 중단 점을 설정하십시오.
    프로그램을 시작하기 전에 중단 점을 설정하여 가능한 빨리 적중하도록하십시오.

     <code class="gdb">(gdb) break main.main (gdb) run</code>
    로그인 후 복사
  4. 조건부 중단 점 사용 :
    불필요한 정지를 최소화하려면 조건부 중단 점을 사용하십시오.

     <code class="gdb">(gdb) break main.main if someCondition == true</code>
    로그인 후 복사
  5. 레버리지 GO의 런타임 정보 :
    info goroutines 사용하여 필요에 따라 Goroutines에서 Goroutine 목록을 얻고 중단 점을 설정하십시오.

     <code class="gdb">(gdb) info goroutines</code>
    로그인 후 복사
  6. 메모리 변경을 위해 하드웨어 파수 점을 사용하십시오.
    특정 메모리 위치를 모니터링하는 경우 하드웨어 파트 포인트가 효과적 일 수 있습니다.

     <code class="gdb">(gdb) watch *somePointer</code>
    로그인 후 복사

GDB 외에 GO에 대한 대체 디버거를 추천 할 수 있습니까?

예, GO 디버깅을 위해 특별히 설계되었거나 적합한 GDB에 대한 몇 가지 대안이 있습니다. 몇 가지 권장 사항은 다음과 같습니다.

  1. 동굴:
    Deve는 Go의 가장 인기 있고 강력한 디버거입니다. Goroutines에 대한 탁월한 지원을 제공하며 인터페이스는 GO의 런타임으로 원활하게 작동하도록 설계되었습니다. 다음을 사용하여 설치할 수 있습니다.

     <code class="sh">go install github.com/go-delve/delve/cmd/dlv@latest</code>
    로그인 후 복사

    Devev로 디버깅을 시작하려면 :

     <code class="sh">dlv debug your_program.go</code>
    로그인 후 복사
  2. GO 확장 기능이있는 비주얼 스튜디오 코드 :
    VSCODE는 GO Extension과 결합 될 때 중단 점 설정, 코드를 밟고, 변수 검사를 현대적인 IDE 내에서 풍부한 디버깅 경험을 제공합니다.
  3. 골란드 :
    Goland는 JetBrains의 GO를위한 IDE로, Goroutine 시각화, 스택 추적 및 중단 점을 설정하고 코드 검사를위한 사용자 친화적 인 인터페이스와 같은 기능이 포함 된 포괄적 인 디버거를 제공합니다.
  4. GO 확장 기능이있는 GDB :
    첫 번째 질문에서 언급 된 반면, 사용자 정의 예쁜 프린터를 사용하여 GDB의 GO 디버깅 기능을 향상시킬 수 있으며, delve Deveritor의 명령을 향상시켜 GO 특정 디버깅 요구에 더 적합합니다.

GO에서 디버깅 세션 중에 Goroutines를 어떻게 처리하고 검사합니까?

GO에서 디버깅 세션 중에 Goroutine을 처리하고 검사하는 것은 어려울 수 있지만 동시 프로그램을 이해하는 데 중요합니다. 다음은 GDB 보다이 작업에 더 적합한 Delve를 사용하여 수행 할 수있는 방법입니다.

  1. 모든 goroutines 나열 :
    goroutines 명령을 사용하여 실행중인 모든 Goroutines를 나열하십시오.

     <code class="delve">(dlv) goroutines</code>
    로그인 후 복사

    이것은 당신에게 번호가 매겨진 고리 틴 목록을 제공합니다.

  2. Goroutines 사이의 전환 :
    다른 Goroutine으로 전환하려면 goroutine 명령을 사용하고 검사하려는 Goroutine 수를 사용하십시오.

     <code class="delve">(dlv) goroutine 2</code>
    로그인 후 복사

    이 명령은 컨텍스트를 지정된 Goroutine으로 변경합니다.

  3. Goroutine 상태 검사 :
    info goroutines 명령을 사용하여 모든 Goroutines의 현재 상태에 대한 자세한 정보를 얻으십시오.

     <code class="delve">(dlv) info goroutines</code>
    로그인 후 복사
  4. Goroutines에서 중단 점 설정 :
    Goroutines가 시작된 기능 호출에 설정하여 Goroutines에 대해 특별히 중단 점을 설정할 수 있습니다. 예를 들어:

     <code class="delve">(dlv) break main.someFunction</code>
    로그인 후 복사

    그런 다음 중단 점이 치면 고어 라인간에 전환하여 상태를 검사 할 수 있습니다.

  5. 스택 추적 사용 :
    Delve의 bt Command (Backtrace)는 현재 Goroutine의 스택을 보는 데 사용될 수 있습니다.

     <code class="delve">(dlv) bt</code>
    로그인 후 복사
  6. Goroutines의 변수 검사 :
    Goroutine의 맥락에서 일단 주요 스레드에서와 같이 변수를 검사 할 수 있습니다.

     <code class="delve">(dlv) print myVariable</code>
    로그인 후 복사

이러한 기술을 사용하면 여러 goroutine에서 GO 프로그램의 동작을 효과적으로 디버깅하고 이해할 수 있습니다.

위 내용은 GDB 또는 기타 디버거를 사용하여 GO 코드를 어떻게 디버그합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿