2012-02-10 6 views
0

아무도 나에게 코드의 호출 트리를 작성하는 방법을 안내해 줄 수있는 사람이 하나 있다면 func_tree를 사용했지만 매크로 함수 호출 및 함수를 매크로 아래에 표시하지 않습니다 ... ?파일에 C 코드의 함수 호출 트리를 덤프하는 방법은 무엇입니까?

+0

왜이 C++에 태그가 붙어 있습니까? –

+0

콜 트리를 작성하면 무엇을 의미합니까? – AJG85

+0

매크로는 기능이 아닙니다. 매크로는 돋보이는 복사 붙여 넣기입니다. 그들은 어떤 종류의 디버거 또는 스택 추적에서도 결코 나타나지 않을 것입니다. –

답변

0

코드를 컴파일하기 바로 전에 C 사전 처리기가 모든 매크로를 확장합니다. 이것은 심지어 컴파일러가 매크로 정의를 보지 못한다는 것을 의미합니다. 불행하게도 함수 호출 추적에 매크로를 포함시킬 가능성이 없음을 의미합니다.

런타임 환경을 얼마나 잘 알고 있느냐에 따라 스택 추적 프레임이 스택의 현재 위치에있는 곳을 백 계산할 수있는 경우가 있습니다. 불행히도 정확한 세부 정보가 한 환경에서만 작동하는 경우가 종종 있습니다. 각 환경에 대해 스택 의미의 발견을 다시 수행해야합니다. Here is project that performs such a technique하지만 매우 유용 할 지 알 수는 없습니다.

컴파일러가 해당 기능 코드를 호출 블록에 배치 할 때 함수 호출이 존재하지 않도록 다시 작성되므로이 기술은 컴파일러 인라인을 표시하지 않을 수도 있습니다.

특정 환경에 대해 Google과 유사한 프로젝트를 찾을 수 없다면 직접 작성해야 할 가능성이 있습니다. 이것이 너머에 있다면 환경의 저수준 세부 정보를 학습 할 가치가 있는지 또는 더 강력한 로깅을 수행하는 것이 더 나은지 조사해야합니다.