2009-04-18 5 views
3

아이디어는 프로그램에 특정 입력이 주어진다면 자동으로 전체 프로그램을 단계별로 밟아서 사용되는 모든 데이터와 함께 제어 흐름을 덤프하고 싶습니다. 클래스 및 해당 변수. 그들의 직접적인 방법은 이것입니까? 또는 gdb를 통한 스크립팅으로 수행 할 수 있습니까? 아니면 gdb에서 수정해야합니까?변수의 값을 포함한 gdb를 통한 완전한 제어 흐름 인쇄

좋습니다.이 질문에 대한 이유는 디버깅 도구에 대한 아이디어 때문입니다. 그것이하는 것은 이것입니다. 프로그램에 대한 두 개의 서로 다른 입력이 주어지면 하나는 잘못된 출력을 일으키고 다른 하나는 올바른 입력이 주어지면 제어 흐름의 어떤 부분이 서로 다른지 알 수 있습니다.

그래서 필자는 diff 엔진으로 들어가는이 2 가지 제어 흐름을 완전히 덤프해야한다고 생각합니다. 그리고 두 입력이 유사한 제어 흐름을 따르고 있다면, 그 차이는 (많은 경우) 버그가 왜 존재하는지에 대한 좋은 아이디어를 줄 것입니다.

이것은 매우 매력적인 도구로 만들어 질 수 있습니다.

+1

왜이 작업을 수행 하시겠습니까? valgrind/Coverity와 같은 정적 분석 도구가 사용자의 요구에 더 적합 할 수 있습니다. –

+0

소스 행 전용 : http://stackoverflow.com/questions/764382/automate-tracing-in-gdb, 함수 호출 : http://stackoverflow.com/questions/311948/make-gdb-print-control-flow- lq = 1이라고 불리는 함수의 –

답변

2

환경에 대해 더 자세히 알려주십시오. 예를 들어, dtrace는 솔라리스 나 레오파드에서 놀라운 일을 할 것입니다. gprof가 또 다른 가능성입니다.

이의 bumpo 버전은 예와 함께 할 수있는 (1), 또는 기대 (1)합니다.

일부 버전에서는 GDB can be scripted with Python을 환상적으로 바라보고 싶습니다. , 펜리스는 무료 Widly는 사용되는 커버 리티는 달리

1

당신이 묘사하는 것은 GDB의 "추적 점 디버깅"와 같은 약간 소리가 난다. gdb의 내부 도움말 "help tracepoint"를 참조하십시오. http://sourceware.org/gdb/talks/esc-west-1999/

불행하게도,이 기능은 현재 네이티브 디버깅을 위해 구현되지 않습니다,하지만 난 코드 소서리 그것에 몇 가지 작업 을하고 있다고 생각 : 당신은 또한 여기 백서 볼 수 있습니다.