GNU 디버거 인 GDB를 사용하여 GO 코드를 디버깅하여 효과적으로 수행 할 수 있습니다. GNU 디버거는 C, C, GO 프로그램을 디버깅하는 데 널리 사용됩니다. 다음은 GDB를 사용하여 GO 코드를 디버그하는 방법에 대한 단계별 안내서입니다.
디버깅 기호로 GO 프로그램을 컴파일하십시오.
GDB를 사용하기 전에 디버깅 정보가 포함 된 GO 프로그램을 컴파일해야합니다. -gcflags
옵션을 사용하여 다음을 활성화하십시오.
<code class="sh">go build -gcflags "all=-N -l" your_program.go</code>
이 명령은 GO 컴파일러가 코드를 최적화하지 않고 필요한 디버깅 기호를 포함하도록합니다.
GDB 시작 :
프로그램이 컴파일되면 GDB를 시작할 수 있습니다.
<code class="sh">gdb ./your_program</code>
중단 점 설정 :
GDB에서는 break
명령을 사용하여 중단 점을 설정할 수 있습니다. GO의 경우 파일 이후 직접 함수 이름을 지정해야합니다. LINE 표기법은 직접 작동하지 않을 수 있습니다.
<code class="gdb">(gdb) break main.main</code>
이것은 프로그램의 진입 점에서 중단 점을 설정합니다.
프로그램 실행 :
run
명령을 사용하여 실행을 시작하십시오.
<code class="gdb">(gdb) run</code>
프로그램이 중단 점에 도달 할 때까지 실행됩니다.
변수 검사 :
print
명령을 사용하여 변수를 검사 할 수 있습니다.
<code class="gdb">(gdb) print myVariable</code>
슬라이스 또는 맵과 같은 이동 특정 유형의 경우 delve
Retository에서 찾을 수있는 사용자 정의 예쁜 프린터를 사용해야 할 수도 있습니다.
코드를 통해 :
next
및 step
명령을 사용하여 코드를 통해 한 줄씩 이동합니다.
<code class="gdb">(gdb) next (gdb) step</code>
계속 실행 :
사용하여 다음 중단 점까지 프로그램을 continue
실행하도록하십시오.
<code class="gdb">(gdb) continue</code>
GDB를 사용할 수는 있지만 GO를 위해 특별히 설계되지 않았으므로 GO 특이 적 구조 및 고어 라인을 효과적으로 검사하는 데 제한이 생길 수 있습니다.
GDB를 사용하여 GO에서 효과적으로 중단 점을 설정하려면 도구와 언어를 모두 이해해야합니다. 모범 사례는 다음과 같습니다.
중단 점에 기능 이름 사용 :
Go의 런타임은 복잡하고 파일 : 라인 중단 점은 신뢰할 수 없을 수 있으므로 기능 이름을 대신 사용하십시오.
<code class="gdb">(gdb) break main.main (gdb) break yourPackage.YourFunction</code>
-gcflags "all=-l"
플래그를 사용하여 인라인을 비활성화 할 수 있습니다. 프로그램을 시작하기 전에 중단 점을 설정하십시오.
프로그램을 시작하기 전에 중단 점을 설정하여 가능한 빨리 적중하도록하십시오.
<code class="gdb">(gdb) break main.main (gdb) run</code>
조건부 중단 점 사용 :
불필요한 정지를 최소화하려면 조건부 중단 점을 사용하십시오.
<code class="gdb">(gdb) break main.main if someCondition == true</code>
레버리지 GO의 런타임 정보 :
info goroutines
사용하여 필요에 따라 Goroutines에서 Goroutine 목록을 얻고 중단 점을 설정하십시오.
<code class="gdb">(gdb) info goroutines</code>
메모리 변경을 위해 하드웨어 파수 점을 사용하십시오.
특정 메모리 위치를 모니터링하는 경우 하드웨어 파트 포인트가 효과적 일 수 있습니다.
<code class="gdb">(gdb) watch *somePointer</code>
예, GO 디버깅을 위해 특별히 설계되었거나 적합한 GDB에 대한 몇 가지 대안이 있습니다. 몇 가지 권장 사항은 다음과 같습니다.
동굴:
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>
delve
Deveritor의 명령을 향상시켜 GO 특정 디버깅 요구에 더 적합합니다.GO에서 디버깅 세션 중에 Goroutine을 처리하고 검사하는 것은 어려울 수 있지만 동시 프로그램을 이해하는 데 중요합니다. 다음은 GDB 보다이 작업에 더 적합한 Delve를 사용하여 수행 할 수있는 방법입니다.
모든 goroutines 나열 :
goroutines
명령을 사용하여 실행중인 모든 Goroutines를 나열하십시오.
<code class="delve">(dlv) goroutines</code>
이것은 당신에게 번호가 매겨진 고리 틴 목록을 제공합니다.
Goroutines 사이의 전환 :
다른 Goroutine으로 전환하려면 goroutine
명령을 사용하고 검사하려는 Goroutine 수를 사용하십시오.
<code class="delve">(dlv) goroutine 2</code>
이 명령은 컨텍스트를 지정된 Goroutine으로 변경합니다.
Goroutine 상태 검사 :
info goroutines
명령을 사용하여 모든 Goroutines의 현재 상태에 대한 자세한 정보를 얻으십시오.
<code class="delve">(dlv) info goroutines</code>
Goroutines에서 중단 점 설정 :
Goroutines가 시작된 기능 호출에 설정하여 Goroutines에 대해 특별히 중단 점을 설정할 수 있습니다. 예를 들어:
<code class="delve">(dlv) break main.someFunction</code>
그런 다음 중단 점이 치면 고어 라인간에 전환하여 상태를 검사 할 수 있습니다.
스택 추적 사용 :
Delve의 bt
Command (Backtrace)는 현재 Goroutine의 스택을 보는 데 사용될 수 있습니다.
<code class="delve">(dlv) bt</code>
Goroutines의 변수 검사 :
Goroutine의 맥락에서 일단 주요 스레드에서와 같이 변수를 검사 할 수 있습니다.
<code class="delve">(dlv) print myVariable</code>
이러한 기술을 사용하면 여러 goroutine에서 GO 프로그램의 동작을 효과적으로 디버깅하고 이해할 수 있습니다.
위 내용은 GDB 또는 기타 디버거를 사용하여 GO 코드를 어떻게 디버그합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!