코드 이동

코드 분석의 기본은 읽기이며 순서대로 읽으며 흐름을 파악해야 한다. 코드가 항상 순차적으로 실행되는 것은 아니어서 때로는 다른 변수의 정의를 알아야 할 때도 있고 함수를 호출하기도 한다. 이때는 알고 싶은 명칭에 대해 팝업 메뉴를 열고 Jump to Definition 항목을 선택한다. 또는 단축키 Ctrl + =을 눌러도 되고 상단 툴바의  버튼을 눌러도 되며 소스창의 명칭에 커서를 올리고 Ctrl 클릭해도 즉시 이동한다.

소스 인사이트는 한 명령에 대해 키보드와 마우스를 모두 지원하여 현재 상황에서 가장 편리한 방법을 선택하면 된다. 대개의 경우는 단축키를 누르는 것이 가장 빠르다. 소스를 읽던 중에 CMacro 클래스에 대해 알고 싶으면 이 클래스의 이름에 캐럿을 두고 Ctrl + =키를 누른다. 이 클래스가 정의된 Macro.h 헤더 파일이 열리며 클래스 선언부로 이동한다.

어떤 기능을 제공하는 클래스인지 바로 조사할 수 있다. CMacro 클래스의 Find 멤버 함수의 본체를 보고 싶으면 이 함수 이름에 캐럿을 두고 Ctrl + =키를 누른다. 코드가 정의되어 있는 Macro.cpp 파일을 열어 본체 내용을 보여 준다.

명칭 사이를 빠른 속도로 이동할 수 있어 사고의 중단없이 분석에 집중할 수 있다. 이 기능을 정확히 구현하려면 명칭이 정의된 부분을 찾아야 하므로 단순한 문자열 검색과는 수준이 다르다. 프로젝트의 구조와 언어의 문법을 적용하여 백그라운드에서 미리 컴파일해 두기 때문에 클래스와 함수의 위치를 정확히 찾아 간다.

조사하고 싶은 정보를 확인했으면 다시 원래 위치로 돌아가 읽기를 계속 해야 한다. Search/Go Back 메뉴를 선택하면 점프하기 전의 위치로 돌아간다. Find 함수를 다 본 후 이 명령을 선택하면 CMacro 클래스 선언문으로 복귀하며 다시 한번 더 뒤로 가면 Dangeun.cpp CMacro 변수 선언문으로 돌아간다. 앞으로 다시 이동할 때는 Search/Go Forward 명령을 사용한다.

앞 뒤로 이동 명령에 대해 각각 Alt + , Alt + . 단축키가 지정되어 있어 보통은 이 단축키를 사용한다. 이 단축키의 위쪽 문자가 각각 <, >여서 앞 뒤 이동임을 나타낸다. Alt + <가 뒤로 이동, Alt + >가 앞으로 이동이라고 외워두면 된다. 키보드에 손대기 싫으면 툴바의 제일 왼쪽에 있는 화살표 버튼을 눌러도 된다.

, 뒤로 이동 기능은 워낙 자주 쓰는 명령이어서 메뉴, 단축키, 툴바 등의 다양한 방법을 제공한다. 5버튼 마우스라면 앞, 뒤 이동 버튼을 눌러 더 편리하게 이동할 수 있다. 소스 코드를 마치 웹 페이지 읽듯이 자유롭게 이동할 수 있어 빠르고 정확하다. 좋은 장비를 쓰면 작업 효율이 증가한다.

Ctrl + = 단축키로 명칭 사이를 이동하고 Alt + < 키로 원래 위치로 복귀하는 기능은 소스 인사이트의 가장 편리한 기능이다. 마우스로 작업하려면 Ctrl 클릭 및 백 버튼을 사용한다. 굉장히 실용적이며 분석 속도를 높여 주므로 여러 명칭 사이를 이동하는 실습을 통해 이 기능을 잘 익혀 두자.

코드 이동 기능이 막강하고 편리하지만 다른 소스로 갔다가 다시 돌아오기는 번거롭다. 또 두 부분을 동시에 보며 분석해야 할 경우도 있다. 이런 불편함을 해소하기 위해 소스 인사이트는 컨텍스트(Context) 패널을 제공하여 관심 가질만한 부분을 자동으로 보여준다.

컨테스트 패널은 아래쪽에 도킹되어 있는 보조 소스창이며 현재 문맥에서 참고할만한 정보를 보여준다. 명령을 내릴 필요도 없이 알고 싶은 명칭에 캐럿을 갖다 놓고 잠시 기다리면 파일을 열지 않아도 궁금한 정보를 자동으로 찾아 보여준다. CShortCut 명칭에 캐럿을 위치시켜 보자.

잠시 기다리면 컨텍스트 패널에 CShortCut 클래스 정의문이 나타난다. '주인님이 이 정보를 궁금해 하나 보다' 라고 생각하며 얼른 찾아 주는 것이다. 컨텍스트창에서는 명칭을 클릭하기만 해도 정의로 바로 이동한다. Exit 멤버 함수를 클릭하면 정의문으로 이동한다.

컨텍스트창은 보여만 주는 것이어서 편집할 수 없으며 캐럿도 나타나지 않는다. 소스 파일을 열고 싶으면 팝업 메뉴에서 Jump To Definition 항목을 선택한다. 메인 창에 소스 파일이 열리며 해당 명칭으로 즉시 이동한다. 또는 컨텍스트창의 빈 여백을 더블클릭해도 된다.

잠시만 참고할 정보라면 굳이 소스창을 열 필요 없이 아래쪽의 컨텍스트 패널만 봐도 원하는 정보를 쉽게 얻을 수 있다. 소스창에서 캐럿이 움직이면 컨텍스트 패널의 정보는 실시간으로 갱신되어 관련 정보를 즉시 확인할 수 있다.

실시간 갱신이 편리하지만 때로는 너무 자주 바뀌어 불편한 면도 있다. 지금 보이는 정보를 유지한채로 소스창의 다른 곳을 보고 싶다면 컨텍스트 패널 아래쪽의 잠금 아이콘인  를 눌러 고정시킨다. 잠금 상태에서는 캐럿이 이동해도 갱신하지 않아 소스창과 컨텍스트 패널에 각기 다른 두 부분을 볼 수 있다.

팝업 메뉴의 Jump To Caller 명령은 이 함수를 호출하는 모든 곳을 찾아 보여준다. 변수에 대해 이 명령을 선택하면 읽고 쓰는 곳을 모두 보여준다. 조사하고 싶은 명칭에 캐럿을 두고 팝업 메뉴의 명령을 선택하거나 단축키 Ctrl+Alt+C를 누른다.

함수는 보통 여러 군데서 호출하는데 호출하는 모든 곳을 찾아 목록으로 보여준다. 누가 어디쯤에서 호출하는지 알 수 있으며 목록을 선택하면 아래쪽에 호출 코드 주변의 소스를 보여준다. 이 코드를 보면 어떤 인수를 전달하는지도 상세히 알 수 있다.

이 함수에서 어떤 이상 동작이 의심된다면 호출하는 모든 곳을 다 뒤져 보고 제대로 호출하는지 점검해 보면 된다. 호출 조건이 잘못되었거나 엉뚱한 인수를 전달했는지 샅샅이 점검할 수 있다. 소스창에 해당 호출 부분을 열고 싶으면 Select 버튼을 누른다.