2015-02-04 6 views
1

저는 회사에서 처음으로 거의 모든 종류의 추적 메커니즘이없는 C 소스 코드로 작업하고 있습니다. 응용 프로그램이 특정 파일을 통과하는지, 어디에서 (어떤 기능을하는지) 알고 싶습니다. 중단 점을 사용하여이 작업을 수행 할 수 있지만 관련 파일에는 많은 기능이 포함되어 있습니다. 소스 코드를 수정하지 않고 파일 이름, 행 번호 및 기능을 C로 표시

그러므로 나는 응용 프로그램에 연결할 수있는, 도구의 어떤 종류를 찾고 있어요, 그것은 다음과 같은 종류의 출력을 제공합니다

- Main.c 파일 (main_function())

---- submain.c (submain_function())

... 것과

를, I는 추론 할 수있는 곳 (여기서 파일명하는 기능)을 APPL 통과하고있다.

그런 도구가 있는지 여부를 아는 사람이 있습니까? 감사합니다.

+0

또한 동료에게 코드 기반 작업 방법을 설명해 줄 것을 요청하십시오. –

+0

어떤 종류의 코드, 어떤 코드 크기의 이야기입니까? 문제를 개선하려면 수정하십시오. –

+1

linux에서는 strace 또는 유사한 프로파일 링 도구를 사용하여 전체 호출 스택을 표시 할 수 있습니다. – Paul92

답변

1

Linux를 사용하는 경우 gdb이 유용 할 수 있습니다.

당신은 다음 gdb ./<executable_name>를 사용하여 바이너리를 실행 gcc으로 -g 또는 -g3 옵션을 사용하여 코드를 컴파일 소스 파일의에서 원하는 기능에 중단 점을 설정하고 전화를 확인할 수 있습니다.

응용 프로그램을 단계별로 실행하는 동안 실행중인 명령의 파일 이름과 줄 번호가 표시됩니다.

참고 : 자세한 내용은 thisthis을 확인하십시오.

+0

AFAIK,'gdb'는 하나의 명령으로 여러 위치에 중단 점을 넣을 수 있습니다. –

+0

@BasileStarynkevitch 물론 그렇습니다. 이와 관련하여, _disposable_ 중단 점을 설정하기 위해'tbreak '를 사용할 수 있습니다. 내가 맞습니까? –

0

당신이 리눅스에서 개발했다고 가정합니다. 그런 다음 MELT (GCC 확장을위한 특정 도메인 특정 언어)을 사용하여 GCC 컴파일러를 사용자 정의하여 컴파일러가 여러 위치에서 일부 로깅을 추가하도록 할 수 있습니다. GCC 내부 표현 (Gimple, Tree-s, Basic blocks ...)에 대한 몇 가지 세부 사항을 이해해야 할 것입니다.

하지만, 아마도 일주일 이상 작업해야 할 것입니다. 코드베이스가 실제로 큰 것이 아니라면 (줄)