2013-03-28 2 views
2

제 리눅스 커널 모듈을 디버깅하고 있습니다. 그것은 교착 상태가 발생하는 방법을 알아 내려고 노력하고있어. 나는 vmware + gdb을 사용하고 있습니다. 아이디어는 함수에 연결하고 파일에 백 트레이스를 기록하는 것입니다. 나는 다음을 시도하고있다 :어떻게하면 자동으로 gdb에서 중단 점을 계속 수행합니까?

(gdb) br _raw_spin_lock 
Breakpoint 5 at 0xffffffff815eb700: file kernel/spinlock.c, line 136. 
(gdb) commands 5 
Type commands for breakpoint(s) 5, one per line. 
End with a line saying just "end". 
>silent 
>bt 
>continue 
>end 

그러나 continue는 여기에서 작동하지 않는다. 내가 btecho 1으로 바꾸면 작동합니다. 함수가 호출 될 때마다 정보를 기록하는 방법이 있습니까?

감사합니다.

+0

을 설정하기 전에 당신이 ([GDB 계속하고 스테핑] 여기에 보면습니까 http://www.chemie.fu-berlin.de/chemnet/use/info/ gdb/gdb_6.html # SEC37) – Satish

+0

이 내 케이스에서 작동하지 않습니다. – milo

답변

0

왜 작동하지 않는지 말하지 마십시오. 정확히 무엇이 잘못 되었습니까?

일반적으로 이런 종류의 문제는 정상적으로 작동합니다. 중단 점의 명령에 "계속"을 넣는 것은 내가 수년 동안 일상적으로 해왔 던 일입니다. 문제가없는 것은 아닙니다 ("다음"과 간섭을 일으킴). 그러나 로깅 등을하는 중이라면 훌륭하게 작동합니다.

"bt"가 오류로 실패하는 것 같습니다. 이것은 명령이 중단되도록하고, 나는 그 중단 점에서 멈추기 위해 열등하다고 믿습니다. 그렇다면 정확한 오류 메시지는 무엇입니까? 아니면 페이지 매김을하고 있을지도 모릅니다. 또는 내가 생각하지 못했던 몇 가지 다른 점 :-)

오류 인 경우 가능한 한 옵션은 백 트레이스를 제한하는 것일 수 있습니다.

+0

예상대로 (bbt가 작동 한 후) 'continue'를 확인할 수 있습니다 (Fedora 25의 GDB 7.12.1). 다른 중단 점 명령에는 제한 사항이 있습니다 (예 : 'finish '와 같은 명령은 명령 목록의 실행을 끝냅니다. – maxschlepzig

관련 문제