레이블이 Emacs인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Emacs인 게시물을 표시합니다. 모든 게시물 표시

2025-02-06

Emacs에서 함수 퍼포먼스 측정하기(Profiler)

이 글은 새 위치로 옮겨지며 이 곳에서는 더이상 유지보수되지 않습니다.

Emacs Lisp 코드도 사람이 작성하든 AI가 작성하든 버그가 없을 수가 없다. 그 중에서 가장 사람을 괴롭히는 버그로 사용성을 떨어뜨리는 퍼포먼스 문제가 있다. 키를 하나 눌렀는데 잠깐 멈추는 증상이 발생한다면 얼마나 답답할까. 솔직히 이런 버그를 만나게 되면 Emacs를 쓰기 싫을 정도로 기분이 나빠지게 되기도 한다.

그렇다면 이런 문제를 경험했을 때 무엇이 원인인지 어떻게 알 수 있을까?

Emacs는 기본적으로 이런 경우를 위한 Profiler 도구를 제공한다.

Emacs Profiler 사용법

Profiler 사용법은 간단하다. 우선 profiler-start 함수를 실행시킨다.

M-x profiler-start

이 함수를 실행시키면 무엇을 측정할 것인지를 먼저 물어온다. CPU와 메모리 사용량 혹은 둘 다 중 원하는 것을 선택하면 된다.

profiler-start를 실행시키면 무엇을 측정할 것인지를 물어온다

측정을 원하는 항목을 선택하면 다시 일상적인 화면으로 돌아오는데 이제 원하는 커맨드나 기능을 실행시켜서 퍼포먼스가 떨어지는 상황을 연출한다.

이후 원하는 상황이 나왔다면 profiler-repot 함수를 실행시켜 보자.

M-x profiler-report

그러면 start 부터 report 까지 실행된 코드들의 측정 내역을 트리 형식으로 정리해서 보여주는 윈도우가 뜬다. 여기의 내용을 살펴보면서 어떤 함수가 실행에 얼마나 시간이 걸렸는지 혹은 메모리를 얼마나 사용했는지를 파악할 수 있다.

CPU와 메모리 사용량을 둘 다 측정한 결과로 윈도우가 두 개 열렸다

당연하겠지만 트리 형식이기 때문에 세부 내역을 탭 키를 이용해 펼쳐 볼 수 있다.

여담

이런 식으로 문제의 원인을 찾고 버그를 수정할 수 있다면 참 좋겠다. 하지만 개인적인 실력으론 아직 Emacs Lisp이 난해하다고 느끼고 있어서 오픈소스 패키지의 버그를 수정해 본 경험은 없다.

다만 이 도구로는 문제가 되는 패키지를 찾을 수는 있다. 따라서 해당 패키지를 제외시키는 식으로 설정을 고치는 데는 큰 도움이 되었다.

2014-04-30

2013-11-28

[Emacs] visual-regexp, 인터랙티브한 문자열 변경 확장

Emacs에서 기본적으로 제공되는 문자열 변경 함수(query-replace 등등)는 굉장히 불친절(?)하다. 뭔가 비쥬얼적으로 인터랙티브하게 변화되는 부분을 보여주지 않음을 안타까워 하며 관련 확장을 찾아보다 visual-regexp 라는 확장을 발견하게 되었다.

2013-11-21

[Emacs] 멀티 쉘 버퍼 shell-switcher

Emacs의 특수한 술인 Eshell은 하나의 버퍼만 사용이 가능하다. 하지만 shell-switcher 확장을 이용하면 다수의 Eshell 버퍼를 띄우는 것이 가능하다.

2013-11-13

[Emacs] 자동 페어(?) 확장 Smartparens

Emacs에는 여는 괄호가 입력되었을 때 자동으로 닫는 괄호를 입력해 주는 확장이 많다. 예를 들어 textmate-mode 라던가 autopair, paredit 등등... 이번에는 새롭게 발견한 Smartparens를 간단히 소개한다.

2013-09-06

[Emacs] 모드라인 꾸미기 main-line

Emacs에서 mode-line 이란 하단의 미니버퍼 위에 정보가 표시되는 라인을 의미한다. 여기에는 편집중인 파일이나 버퍼의 이름과 각종 모드를 비롯한 커서 위치 등등 다양한 정보가 표시된다.

유용한다거나 한건 아니지만 이 모드라인을 원하는 대로 바꾸거나 예쁘게(?) 꾸미는 것 또한 가능하다. 여기서는 main-line이라는 Powerline에서 fork된 확장을 소개한다.

2013-08-29

[Emacs] android-mode

이클립스 ADT의 버벅거리는 환경에 참을 수 없어서 Emacs용 Android IDE를 찾아보니 좀 거대한 환경을 요하는 것이 많았다. 그러다 간단히 도움을 줄 수 있는 android-mode 라는 마이너모드를 발견했다.

2013-07-17

[Emacs] web-mode

요즘 웹이라 하면 HTML 뿐만이 아니라 CSS와 Java Script가 기본이다. 거기다 템플릿 기반의 웹개발도 일반적이다. 그래서 웹개발에 이용되는 하나의 소스 파일에는 최소한 3가지 이상의 문법이 이용된다고 볼 수 있다.

Emacs에서 하나의 버퍼는 하나의 메이저 모드만 이용 할 수 있다는 제약은 이런 웹 개발에 있어서는 좀 문제가 있는 편이다. 기본적으로 html-mode와 js-mode, css-mode 등 필요한 메이저모드는 지원되지만 개별 버퍼에 하나만 쓸 수 있다. 그래서 multi-web-mode나 Mumamo 같은 여러 모드를 섞는 특수 모드 등이 사용되기도 한다. (최하단 링크 참고)

이번에 소개하는 web-mode는 멀티 모드가 아닌 하나의 모드에서 다양한 문법의 하이라이트와 편집 기능을 지원하는 통합형(?) 메이저모드이다.

2013-07-09

[Emacs] 괄호/블럭 강조모드 show-paren-mode

show-paren-mode는 괄호나 코드 블럭 등 블럭 형태의 코드를 쉽게 구분하기 위한 마이너모드이다. 아마도 Emacs 24 버전을 기준으로 별도로 require해야 하는 것도 없는 기본적인 모드이다.

2013-06-04

2013-04-25

EmacsWiki가 변했다

Emacs 사용자라면 꼭 들러보게 되는 정보의 바다 EmacsWiki 사이트의 레이아웃이 개편되었다. 물론 위키의 특성 상 내용이 바뀐게 아니라 겉모습만 바뀌게 되었다.

2013-03-19

[Emacs] 멀티 프레임 커맨드

개인적인 취향으로 Emacs를 쓸 때 프레임(보통은 윈도우라고 부르지만 Emacs에서 윈도우는 하나의 창 혹은 이 창을 분할한 영역을 의미)을 하나 밖에 쓰질 않았다. 하지만 최근엔 여러 프로젝트의 소스를 참고할 일이 많아지다 보니 결국 멀티 프레임 기능을 쓰게 되어서 관련 기능을 메모한다.

2013-03-15

Emacs 24.3 - OS X 풀스크린 지원

얼마전에 Emacs 24.3이 공식적으로 릴리즈 되었다. 변경사항이야 워낙 많아서 열거하긴 어렵겠지만 중요한 것이 하나 추가되었다면 OS X 라이언 풀스크린 지원이 공식적으로 포함되었다는 점 일 것이다.

2013-03-01

[Emacs] 모드 사용법 및 단축키 도움말 시스템

Emacs의 도움말 시스템인 C-h 키는 Emacs를 사용하는 도중 굉장히 자주 이용하게 될 도움말 키이다. Tutorial은 이제 Emacs를 시작하는 이들에게 좋겠지만, 개인적으로 이 도움말 단축키 중 하나를 꼽으라면 바로 C-h m 키를 꼽고 싶다. 특히 단축키가 기억나지 않거나 궁금할 때 이용 할 수 있는 최고의 단축키이다.

2013-02-27

[Emacs] 버퍼의 내용을 실행시키기 위한 확장 quickrun.el

Emacs에서 코딩을 하다가 특정 루틴을 실행시켜 보고 싶을 때 라던가, 혹은 쉘 스크립트 결과물을 Emacs 안에서 바로 실행시켜서 버퍼에 적고 싶다던가 등등 현재 버퍼의 내용을 실행시켜보고 싶은 때가 있을 수도 있다(-_-). quickrun.el은 이렇게 버퍼의 내용을 실행시켜서 결과를 확인하거나 현재 버퍼에 넣고 싶을 때 활용 할 수 있는 Emacs용 확장이다.

2013-02-25

[Emacs] 확장 관리 시스템 ELPA/MELPA/Marmalade

이전에 적었던 ELPA 관련 글들이 약간 부실하다는 느낌이 들었고 거기다 Marmalade 라는 또다른 패키지 저장소가 있기 때문에 추가로 정리글을 적어본다.

2013-02-22

[Emacs] Projectile 및 Helm 확장

Projectile은 Emacs에서 제공해 주지 않는 기능인 프로젝트 단위의 파일 관리를 할 수 있게 해 주는 확장이다. 예를 들자면 프로젝트 내의 파일을 연다던가....

[Emacs] Helm

이번에 소개할 확장은 Helm(투구? 헬멧? 하이바? -_-;;;;) 이다. 간략하게 뭐라고 해야 할지 난감한 확장이지만, 일단 Anything과 비슷한 확장이다. 그도 그럴 것이 Anything에서 새끼친(fork) 프로젝트이기 때문이다.

2013-02-20

[Emacs] ELPA/MELPA를 통한 확장 패키지 관리

이 글은 Emacs 24에서 ELPA/MELPA를 통해 패키지를 관리하는 가장 기본적인 방법에 대한 것이다. 이미 이 블로그에도 ELPA에 관한 글을 썼던 적도 있고 Emacs24에 관한 글에서도 언급한 적이 있지만 한번 더 소개해 볼까 한다.

2013-02-19