블로그 이미지
ssun++

카테고리

[전체] (73)
Android (7)
JavaScript (9)
CI (5)
Language (14)
ETC (38)
Total324,845
Today0
Yesterday1

'디버깅'에 해당되는 글 3건

  1. 2011.08.27 Chromium 디버깅
  2. 2011.06.11 자바스크립트 디버깅 2
  3. 2011.04.03 자바스크립트 디버깅

Chromium 디버깅

ETC/WebKit / 2011.08.27 20:05
[시작]
크로미움 빌드하겠다고 메모리 추가하고, 64bit 윈도우도 설치 했습니다.
그런데 breakpoint를 걸어도 절대 멈추지 않습니다. 디버깅 해봅시다.

참고 : http://www.chromium.org/developers/how-tos/debugging

[왜 안될까요]
Multi-process Issue
크로미움의 multi-process 구조(아래 그림)때문에 디버깅이 어렵습니다.
Visual Studio에서 디버깅 시 'Browser' 프로세스로 디버깅 하게됩니다.
웹페이지를 렌더링 하는 코드('Renderer')나 플러그인은 별도의 프로세스가 되어 디버깅 되지 않습니다.



Single-process mode
그래서 크로미움을 싱글 프로세스 모드로 구동하는 방법을 소개하고 있습니다
만, 현재는 싱글 프로세스 모드를 지원하지 않습니다.
ps. --single-process 플래그 적용 시 지원되지 않는다고 나오지만 싱글 프로세스로 동작합니다.

[디버깅 해봅시다]
Attaching to the renderer
디버거를 자식 프로세스에 연결하여 디버깅할 수 있습니다.
메뉴에서 '도구 > 프로세스에 연결'을 선택하고 연결할 chrome.exe 프로세스를 선택합니다.
(회색으로 표시된 항목은 이미 연결되어있는 'Browser' 프로세스 입니다.)

 


chrome.exe 프로세스를 전부 연결 시켜버리면 breakpoint에서 잘 멈추네요 :)

[끝]
참고 문서에는 추가적인 내용이 더 있지만 기본적인 내용만 살펴보았습니다.
크로미움 뿐만 아니라 멀티 프로세스로 동작하는 소스에서 활용 가능할 것 같습니다.
Posted by ssun++

댓글을 달아 주세요

[들어가기전]
지난 포스팅에서 Inspector의 'Script' 탭에서 디버깅하는 방법을 살펴보았습니다.
이번에는 'Console' 탭을 이용해서 디버깅하는 방법을 간단하게 확인할 예정입니다.

[console object]
크롬(&사파리)에서는 javascript에서 console이라는 object를 사용할 수 있습니다.
 console object는 아래와 같은 method를 가지고 있으며, Inspector의 Console 탭에 로그를 출력합니다.


1. debug() / info() / log() : 단순 출력
method 이름은 다르지만 내부적으로 동일한 동작을 합니다.
코드 : console.debug("debug입니다");


2. warn() : 단순 출력

코드 : console.warn("warn입니다");


3. error() : 단순 출력

코드 : console.error("error입니다");


4. dir() : object의 정보 출력
코드 : console.dir(new Car());



5. dirxml() : element의 정보 출력
아래 캡쳐보다 많은 항목들이 출력됩니다.
코드 : console.dirxml(document.getElementById("myDiv"));


6. trace() : 호출시의 콜스택 출력
코드 : onload()함수 -> callTrace()함수 -> console.trace() 호출


7. assert() : 조건이 false인 경우 로그 출력(error()와 같은 level)
코드 : console.assert(0>1);


8. count() : 해당코드를 호출한 횟수를 출력
코드 : console.count("카운트"); // for 문으로 3회반복


9. profile() / profileEnd() : Time Profile 생성 (Pair 호출)
"Profile XX" 텍스트를 클릭하면 구간에 대한 profile을 확인할 수 있습니다.
코드 : console.profile(); /* 코드 */ console.profileEnd();


10. time() / timeEnd() : 시간 측정 (Pair 호출)
time() 호출시 출력내용은 없고, timeEnd() 호출시 측정값이 출력됩니다.
코드 : time(); /* 코드 */ timeEnd();


11. group() / groupCollapsed() / groupEnd() : 출력내용 묶음 (Pair 호출)
group() 또는 groupCollapsed()와 groupEnd() pair 호출입니다. (하위항목 펼침/접음)
코드 : group("groupA"); /* 코드 */ groupEnd();

코드 : groupCollapsed("groupB"); /* 코드 */ groupEnd();


12. markTimeline()
정체불명. 아시는 분 있으시면 가르쳐주세요.

[마침]
'Scripts' 탭에서는 코드 실행중의 흐름 제어가 가능했다면
'Console' 탭에서는 원하는 내용의 출력을 통해서 동작을 확인할 수 있습니다.
필요에 따라서 적절하게 사용하면 될 것 같습니다. 
Posted by ssun++

댓글을 달아 주세요

[Inspector]
웹킷 기반 브라우저에는 Inspector가 있습니다.
크롬에서는 오른 클릭해서 '요소 검사'. 사파리에서는 오른 클릭해서 '구성 요소 점검'.
을 선택하면 브라우저 하단에 등장하는 '그것' 입니다.

기본으로는 'Elements'탭이 선택되어있고.
오른 클릭한 위치의 Element에 대한 정보를 확인/수정해볼 수 있습니다.

[자바스크립트 디버깅]
Inspector에서 'Scripts' 탭을 선택해서 자바스크립트 디버깅을 할 수 있습니다.
 
 

1. 디버깅할 파일을 선택
스크립트가 포함된 html 파일, js 파일을 선택할 수 있습니다.

2. Break point 설정, 흐름 제어
라인 넘버 클릭시 break point 설정/해제가 가능합니다.
설정된 라인은 파란색으로 표시되고, 현재 실행중인 라인은 화살표가 붙습니다.
오른쪽의 버튼은 순서대로 <계속실행>, <라인단위 실행>, <함수 내부로 들어가기>, <함수 밖으로 나가기>, <모든 break point 해제> 입니다.

3. 값, 호출스택 확인
<Watch Expression>은 'Add'로 추가한 식의 값을 확인할 수 있습니다.
<Call Stack>은 말 그대로 호출 스택입니다.
<Scope Variables>는 지역, 전역 변수 값을 확인할 수 있습니다.
그밖에 break point 위치를 확인할 수 있고, 이벤트 리스너에도 break point를 설정하는 등등의 기능이 있습니다.
 
[마침]
alert 창을 띄우거나 컨텐츠 내부에 동작 확인을 위한 코드를 넣을 필요없이
컨텐츠 외부에서 동작을 확인할 수 있는 점이 좋은 것 같습니다 :)
Posted by ssun++

댓글을 달아 주세요

최근에 달린 댓글

최근에 받은 트랙백

글 보관함