2008-09-30 6 views
60

C/C++ 코드를 쉽게 이해할 수있는 도구가 있습니까? 우리는 다른 사람들이 저술 한 많은 소프트웨어를 상속 받았으며 신속하게 소프트웨어를 개발해야합니다. 이 작업을 단순화 할 수있는 도구에 대한 조언이 있습니까?코드 흐름을 시각화하는 도구 (C/C++)

+8

@casperOne : 왜 이것이 "건설적이지 않은가"?! 그것은 누구에게나 유용합니다 ... 그리고 건설적인 것입니다! – dagnelies

+0

@arnaud 쇼핑 목록 질문은 건설적인 것이 아닙니다. http://blog.stackoverflow.com/2010/11/qa-is-hard-lets-go-shopping/ – casperOne

+6

@casperOne : 언급 한 기사에서는 하드웨어 구입을위한 권장 사항 등에 대해 설명합니다. 확실히 거부 할 질문. 이 경우 특정 문제를 해결하는 도구와 기법, 즉 큰 코드를 이해하는 데 도움이되는 질문입니다. 나는 개인적으로 꽤 큰 두 다리 사이를 발견한다. – dagnelies

답변

24

SourceInsightUnderstand for C++은 흐름도를 포함한 c/C++ 코드 분석을 위해 얻을 수있는 최상의 도구입니다.

+7

리눅스 툴이 있는지 알고 싶습니까? –

+0

CppDepend (http://www.cppdepend.com)는 콜 그래프와 많은 흥미로운 기능이있는 의존성 그래프를 생성하며 리눅스에서도 작동합니다. –

7

개인적으로 저는 디버거를 사용합니다. 코드를 실행하고 그 코드가 무엇을하는지, 코드의 실행이 유일한 방법인지 확인하십시오.

그러나 (때때로) 도움이되는 몇 가지 설명서 - 생성기를 통해 실행할 수 있습니다. 좋은 예가 doxygen입니다.

+0

+1 디버거는 코드를 이해하는 유일한 방법. –

+7

나는 당신이 꽤 우스운 경험이 없다는 * 큰 * 코드베이스를 이해하려고 노력한다. Clang이나 Linux와 같은 프로젝트에서 그렇게 해보십시오. 너 미쳤어. 내가 익숙한 코드 또는 중소 규모 프로젝트 IMHO에 유용합니다. –

+1

저는 4 일 동안 거대한 프로젝트에서 코드를 바꿀 위치를 찾기 위해 디버거를 사용했기 때문에 Google에서 왔습니다. –

4

Doxygen은 특별히 준비하지 않은 경우에도 graphviz를 사용하면 클래스 관계 다이어그램을 제공합니다.

9

프로파일 링 소프트웨어는 어떤 기능이 호출되었는지 알려줍니다. 리눅스를 사용할 수있는 경우, KCachegrind

0

Doxygen을 시도

(자바 독과 유사) 무료 문서 - 생성 도구 그 또한 관계뿐만 아니라 그래프를 생성 할 것입니다.

1

나는 Visual Studio 디버거 도구를 사용합니다.

작은 상자에 물건을 시각화 할 수있는 "발신자 그래프"기능이 제공됩니다. 또한 호출 스택 및 일반적인 시계 기능은 일반적으로 모두 필요합니다.

+0

Visual Studio 디버거 도구에서 호출자 그래프는 어디에 있습니까? Visual Studio 비 디버거 도구에서 호출자 계층 만 찾을 수 있습니다. –

0

Doxygen, 좋은 점은 클래스의 주기적 종속성 측면에서 코드가 싫어/좋음을 알리는 것입니다. 그러므로 코드를 재조정해야합니다. :-)

1

AQtime 시도를있다, 그것은라고있어 모든 기능을 표시하는 프로파일 링 도구 (그것이 걸린 시간이), 당신은을 설정할 수 있습니다 분석을위한 시작점과 끝점. 그들에게는 30 일의 재판이 있습니다.

+0

코드를 알고 있다고해도 AQtime의 콜 그래프는 때로는 매우 밝습니다. – bk1e

3

이집트 http://www.gson.org/egypt/egypt.html과 같은 몇 가지 도구가 있지만 코드를 컴파일하는 데 사용되는 예상 GCC 버전과 콜 그래프 생성기의 정확한 버전이 일치하는 경우에만 가능합니다. 같은 내가 다시 Borland Together 동안 사용

1

옵션은 cachegrind 모드에서 사용 Valgrind의가 (당신이 kcachegrind 프로그램에서 따를 수있는 콜 그래프의 유형을 발생시킨다 다른 http://www.csn.ul.ie/~mel/projects/codeviz/

. codeviz에 대해 말할 수있다 그리고 그것은 괜찮은했다 코드에서 모델을 생성하는 작업. 코드에서 시퀀스 다이어그램을 생성 할 수도 있다고 생각합니다. 코드가 엉망 일 경우 모델을 유지해야합니다. 그리고 내가 생각하기에 싸구려가 아니지만 때로는 특수한 것을 잡을 수 있습니다.

1

Rational Quantify는 또한 좋은 호출 그래프를 제공합니다.

5

KScope는 Linux (KDE)를 사용하는 경우 cscope 유틸리티를 기반으로합니다. 필자가 사용했던 가장 좋은 것 (그리고 항상 사용)은 필자가 수정해야하는 익숙하지 않은 코드의 거대한 조각으로 삭제하거나 내 요구에 맞게 사용해야합니다. 크로스 레퍼런스 데이터베이스는 여러 가지 방법으로 검색 할 수 있습니다 : 심볼의 모든 참조, 전역 정의, 함수의 호출자/호출 수신자 찾기 등을 찾을 수 있습니다. IDE가 내장되어있어 콜 그래프를 표시 할 수 있습니다.

6

Doxygen은 EXTRACT_ALL 옵션을 켜면 마크 업을 적용하지 않고 코드에서 다이어그램을 생성하는 데 매우 적합합니다. HAVE_DOT 설정으로 생성 된 다이어그램을 얻으려면 GraphViz이 설치되어 있어야합니다. 내가 그것을 설치하고 DOT_PATH 빈 공백 Windows에서 잘 작동하지만 OS/X에서 직접 점 도구 위치를 가리키는 데 계속 찾으십시오.

Doxygen 및 DTrace 사용에 대해 더 자세히 설명하는 ACM 대기열에 훌륭한 Code Spelunking 기사가 있습니다.

0

Slickedit은 모르는 코드 블록을 탐색하는 데 적합합니다. 태그 기능을 사용하면 파일을 처리 할 필요없이 기능적 기준에 따라 코드를 처리 할 수 ​​있습니다 (EMACS에는 실제로 태그가 있고 Slickedit만큼 매끄럽지 만 조금 가파른 학습 곡선이 있습니다)

당신이 이해할 수없는 방법이나 클래스 또는 변수를 얻었 으면 푸시 - 태그로 코드로 이동 한 다음 살펴보고 팝업 태그를 다시 표시하면됩니다. (키 스트로크에 묶여 있기 때문에 매우 빠름)

찾기/참조를 사용하여 해당 함수/변수가 사용 된 곳을 확인할 수도 있습니다.

가서에 어떤 파일이 뭔가 알아낼 필요 이상 시간의 톤을 저장