2011-11-08 2 views
3

gdb 설명서에 다음이 나와 있습니다.gdb로 멀티 스레드 응용 프로그램을위한 감시 점 설정

경고 : 다중 스레드 프로그램에서 소프트웨어 감시 점의 유용성은 제한적입니다. gdb가 소프트웨어 감시 점을 생성하면 단일 스레드에서 표현식의 값만 볼 수 있습니다. 표현식이 현재 스레드의 활동으로 인해 변경 될 수 있다고 확신하는 경우 (다른 스레드가 현재 상태가 될 수 없다는 확신이있는 경우) 평상시처럼 소프트웨어 감시 점을 사용할 수 있습니다. 그러나, 비 현재 스레드의 활동이 표현식을 변경하면 gdb는이를 알 수 없습니다. (하드웨어 워치 포인트는 모든 스레드에서 표현식을 보았습니다.)

그렇다면 어떻게 gdb를 사용하여 여러 스레드에서 watchpoint를 사용할 수 있습니까? gdb에서는 모든 스레드의 감시 변수에 대한 변경 사항을 볼 수 있습니까?

답변

4

일반적으로 소프트웨어 감시 점은 비용이 많이 듭니다. 당신이

p &myvar 
    $1 = (int*) 0x1234556 
    watch *(int*) 0x1234556 

이것은 단순한 스칼라 데이터와 관련이 같은 스칼라 그 주소를 잘 정의 된 데이터, 뭔가보고있는 경우 (단일 포인터, 단일 정수, 단일 바이트를 ...), 하드웨어 감시 점을 사용할 수 있습니다

+0

그렇다면 gdb가 소프트웨어 대신 watchpoint를 사용하도록 어떻게 말합니까? – MetallicPriest

+0

watchpoint를 구현하는 방법을 선택하는 사람은 gdb입니다. 하드웨어 워치 포인트는 소수의 스칼라 (고정) 주소에서만 가능합니다. –

+1

gdb가 실제로 hw 워치 포인트를 사용할 수 있는지 확인하십시오 :'(gdb) show can-use-hw-watchpoints'. –

관련 문제