>백엔드 개발 >Golang >실행 중인 프로세스에 대한 디버깅 기호를 로드하는 방법은 무엇입니까?

실행 중인 프로세스에 대한 디버깅 기호를 로드하는 방법은 무엇입니까?

WBOY
WBOY앞으로
2024-02-09 11:18:08864검색

실행 중인 프로세스에 대한 디버깅 기호를 로드하는 방법은 무엇입니까?

PHP 편집기 Xiaoxin이 실행 중인 프로세스에 대한 디버깅 기호를 로드하는 방법을 소개합니다. 소프트웨어 개발 과정에서 디버깅은 매우 중요한 연결 고리입니다. 실행 중인 프로세스에 문제가 발생하면 디버깅을 위해 디버깅 기호를 로드해야 합니다. 디버깅 기호에는 코드의 기호 정보가 포함되어 있어 디버깅 중에 문제를 보다 정확하게 찾을 수 있습니다. 이 문서에서는 더 나은 디버깅을 돕기 위해 실행 중인 프로세스에 대한 디버깅 기호를 로드하는 방법을 자세히 설명합니다.

질문 내용

저는 여러 컴퓨터에서 실행되는 C 응용 프로그램을 가지고 있는데 때로는 하나의 인스턴스에 문제가 있어 이상하게 동작하는 경우가 있습니다. 불행하게도 이런 일은 거의 일어나지 않습니다. 이러한 제품 인스턴스는 철저한 최적화(-march=XXX -Ofast)로 컴파일되었으며 디버깅 기호가 포함되어 있지 않으므로 상태를 분석하기 위해 디버거를 쉽게 연결할 수 없습니다.

하지만 동일한 플래그와 -g3 再次编译应用程序,然后我可以使用 symbol-file application_executable_with_debug_symbols을 사용하여 gdb에 로드하는 것이 가능해야 한다고 생각합니다. 그러나 이렇게 하면 중단점이 절대 발생하지 않습니다.

실행 중인 애플리케이션에 디버거를 연결하고 디버깅 기호를 로드하는 또 다른 방법이 있나요? 아니면 내가 뭔가 잘못하고 있는 걸까요(분명히)?

감사합니다

해결 방법

가장 좋은 방법은 디버깅 기호를 사용하여 애플리케이션을 빌드하고, 생성된 바이너리를 디버깅용으로 유지하면서 strip -g app.debug -o app.release를 실행하고 제거된 바이너리를 프로덕션에서 실행하는 것입니다.

오작동하는 인스턴스를 발견하면 전체 디버그 버전을 대상 머신에 복사하고 실행할 수 있습니다 gdb -ex 'attach $PID' app.debug. 짜잔: 완전한 디버깅 기호가 생겼습니다.

애플리케이션을 다시 컴파일할 수 없는 가장 큰 이유는 성공할 수 있는 방법에 대해 다른 기호(비교 nm app.debugnm app.release),以及最可能的原因 (如果使用 GCC)是您省略了一些用于构建 app.release 的优化标志,或者您使用了略有不同的源 - 您必须使用完全相同的标志(并添加-g)와 정확히 동일한 소스가 포함된 새 바이너리를 얻기 때문입니다.

위 내용은 실행 중인 프로세스에 대한 디버깅 기호를 로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제