2011-10-24 3 views
2

x86 GDB는 특별한 하드웨어 자원 (디버그 레지스터?)을 사용하여 감시 점을 설정합니다. 어떤 상황에서는 리소스가 충분하지 않을 때 GDB가 watchpoint를 설정하지만 작동하지 않습니다. Linux에서이 리소스의 가용성을 프로그래밍 방식으로 모니터링하는 방법이 있습니까? 어쩌면 procfs에있는 정보 일 수도 있습니다. 디버깅을 위해 풀에서 기계를 선택하려면이 정보가 필요합니다. GDB 내부 구조에서gdb에서 감시 점을 설정하는 데 필요한 자원을 모니터하는 방법은 무엇입니까?

: 그들은 하드웨어 자원에 의존하기 때문에 은 "하드웨어 브레이크 포인트는 수에 제한 될 수 있으며 사용자가 더 요구할 때, GDB는 소프트웨어 브레이크 포인트를 설정하려고 시작합니다 (일부 아키텍처에서, 특히있다. 32 비트 x86 플랫폼에서 gdb는 모든 하드웨어 중단 점과 감시 점을 삽입 할 수있는 충분한 하드웨어 자원이 있는지 여부를 항상 알 수 없습니다. 이러한 플랫폼에서 디버깅중인 프로그램이 계속 실행될 때만 gdb가 오류 메시지를 인쇄합니다. "

"너무 많은 다른 watchpoint가 요청됩니다 (일부 아키텍처에서는 디버그 된 프로그램이 다시 시작될 때까지는 이러한 상황을 감지 할 수 없습니다). x86 디버그 레지스터는 h ardware 중단 점 및 watchpoint에 대해 너무 많은 하드웨어 중단 점을 설정하면 watchpoint 삽입이 실패 할 수 있습니다. "

"32 비트 Intel x86 프로세서에는 디버깅을 용이하게하기 위해 설계된 특수 디버그 레지스터가 있습니다 .gdb는 x86 기반 포트가 watchpoint 및 하드웨어 지원 중단 점에 대한 지원을 구현하는 데 사용할 수있는 함수의 일반적인 라이브러리를 제공합니다.

답변

1

이 정보는 디버깅을 위해 풀에서 기계를 선택하는 데 필요합니다.

아니요. x86 디버그 레지스터 (4 개 있음)는 프로세스 별 리소스이며 머신 별 리소스가 아닙니다 [1]. 디버깅하는 모든 프로세스에 대해 최대 4 개의 하드웨어 감시 점을 가질 수 있습니다. 다른 사람이 동일한 컴퓨터에서 디버깅하는 경우 서로 간섭하지 않습니다.

[1]보다 정확하게 레지스터는 커널에 의해 다중화된다. EAX 등록. 시스템의 모든 프로세스와 커널 자체는 EAX을 사용하며 (단일 코어) CPU에는 EAX 레지스터가 하나 뿐이지 만 모든 시간 조각 작업을 통해 잘 작동합니다.

관련 문제