HTTPS.Post()에서 Hang Go C 공유 라이브러리 디버깅
설명된 문제에서 설명된 문제에서 C 공유 라이브러리는 다음 언어로 작성되었습니다. Go에서 HTTPS.Post()를 시도하는 동안 중단이 발생합니다. 실행 가능한 바이너리가 올바르게 실행되는 동안 http.Post() 또는 net.Dial()을 사용할 때 공유 라이브러리에 이 문제가 발생합니다.
초기 조사:
스택 추적:
SIGQUIT 스택 추적은 스레드 동기화에 사용되는 Runtime.futexsleep()에서 스레드가 중단되었음을 나타냅니다.
가능한 원인 및 해결책:
해결된 답변에서 언급했듯이 근본 원인은 Go 공유 라이브러리가 로드되는 방식에 있습니다. 공유 라이브러리가 C 또는 C 애플리케이션에 연결되면 애플리케이션 시작 중에 Go 런타임이 초기화됩니다. 이는 애플리케이션이 프로세스를 분기하고 분기된 프로세스에서 Go 라이브러리를 사용하려고 시도하는 경우 예측할 수 없는 동작으로 이어질 수 있습니다.
해결책:
이 문제를 해결하려면 다음을 수행하십시오. 포크가 발생한 후 Go 공유 라이브러리를 로드하는 데 필요합니다. 이는 dlopen() 및 dlsym()과 같은 동적 연결 기술을 사용하여 달성할 수 있습니다. 이 접근 방식을 사용하면 포크된 프로세스 내에서 필요할 때만 Go 런타임이 초기화됩니다.
결론:
정지된 C 공유 라이브러리의 문제는 Go 런타임의 조기 초기화. 포크 후 라이브러리를 동적으로 로드하여 문제가 해결되었으며 공유 라이브러리가 올바르게 작동했습니다.
위 내용은 ## 분기 후 HTTPS.Post()에 걸려 있는 Go C 공유 라이브러리를 디버깅하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!