2009-12-03 3 views
2

gcc 4.1.2 및 gdb 7.0을 사용하는 2.6.18-164.2.1.el5 x86_64 커널이있는 Redhat EL5 시스템에 있습니다.gdb 역 추적 및 pthread_cond_wait()

#0 0x000000000051d7da in pthread_cond_wait() 
#1 0x0000000100000000 in ??() 
#2 0x0000000000c1c3b0 in ??() 
#3 0x0000000000c1c448 in ??() 
#4 0x00000000000007dd in ??() 
#5 0x000000000051d630 in ??() 
#6 0x00007fffffffdc90 in ??() 
#7 0x000000003b1ae84b in ??() 
#8 0x00007fffffffdd50 in ??() 
#9 0x0000000000000000 in ??() 

이 일반적인 문제의 증상입니다 : 나는 역 추적을 수행 할 때 내 스레드의 여러

내가 gdb를 내 응용 프로그램을 실행하고 실행 중에 침입, 다음 호출 스택을 보여?
조건 대기 중 호출 스택을 보는 데 알려진 문제가 있습니까? 나에게 손상된 스택 추적과 같은

답변

3

pthread_cond_wait은 손으로 코딩 된 어셈블리로 작성되었으며 glibc 빌드에서 적절한 unwind descriptor (스택을 unwind하기 위해 x86_64에 필요함)가 분명히 없습니다. 이 문제는 최근에 수정되었을 수 있습니다 here. , 아니면 그냥 pthread_cond_wait에서 "가짜"스택 추적과 함께 살고 : (극단주의 접근 방식은 설치를 망치는 경우, 컴퓨터 가능성이 부팅 될 것입니다! 참고)

당신은 최신의 glibc를 구축하고 설치하려고 할 수 있습니다.

+0

그게 문제였습니다. 나는 32 비트 EL5 머신에서 내 앱을 시험해 보았고 gdb는 잘 동작한다. –

0

예를 들어

:

#9 0x0000000000000000 in ??() 

NULL에서 코드가 안

일반적으로
0

, 여러 스레드가 하나를 공유 할 때 동기화가 필요합니다 의지. 이와 같은 경우 프로그램을 중단하면 스레드가 하나만 실행되고 (예 : 리소스에 액세스) 다른 스레드가 pthread_cond_wait() 내에서 대기하는 것으로 나타납니다.

그래서 나는 pthread_cond_wait() 자체가 문제가 있다고 생각하지 않습니다.

프로그램이 교착 상태로 중단되거나 성능이 확장되지 않으면 pthread_cond_wait()이 원인 일 수 있습니다.