[go: up one dir, main page]

File: uftrace.md

package info (click to toggle)
uftrace 0.18.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,356 kB
  • sloc: ansic: 49,770; python: 11,181; asm: 837; makefile: 769; sh: 637; cpp: 627; javascript: 191
file content (385 lines) | stat: -rw-r--r-- 12,115 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
% UFTRACE(1) Uftrace User Manuals
% Namhyung Kim <namhyung@gmail.com>
% Sep, 2018

이름
====
uftrace - 프로그램 함수 호출 분석 도구


사용법
======
uftrace [*record*|*replay*|*live*|*report*|*info*|*dump*|*recv*|*graph*|*script*|*tui*] [*options*] COMMAND [*command-options*]


설명
====
uftrace 는 `COMMAND` 에 주어지는 프로그램의 실행을 함수 단위로 추적(trace)하는
분석 도구이다.  `COMMAND` 에 주어지는 프로그램은 `-pg` 또는 `-finstrument-function`
로 컴파일된 C 또는 C++ 프로그램이어야 한다.
COMMAND 의 대상이 되는 실행 이미지는 이름을 읽을 수 있도록
(i.e `strip`(1) 되어 있지 않은) ELF 심볼 테이블을 필요로 한다.

uftrace 는 `git`(1) 또는 `perf`(1) 와 같은 방식으로 다수의 보조 명령어들을 갖는다.
아래에 보조 명령어과 함께 간략한 설명이 있다.  더 자세한 정보를 위해서는 각 보조
명령어들의 메뉴얼 페이지를 참조할 수 있다.  또한, 이 페이지에 있는 옵션들은 다른
보조 명령어들과 함께 사용될 수 있다.

만약 보조 명령어를 명시적으로 입력하지 않으면, uftrace 는 `record` 와 `replay` 를
한번에 수행하는 `live` 보조 명령어로 동작한다.
live 명령어의 옵션들은 `uftrace-live`(1) 에서 참조할 수 있다.
더 자세한 분석을 위해, `uftrace-record`(1) 를 통해 데이터를 기록하고,
`uftrace-replay`(1), `uftrace-report`(1), `uftrace-info`(1), `uftrace-dump`(1),
`uftrace-script`(1), `uftrace-tui`(1) 중 하나를 사용하여 분석할 수 있다.


보조 명령어
============
record
:   주어진 명령어를 실행하고 데이터를 파일이나 디렉터리에 저장한다.

replay
:   저장된 함수를 시간 정보와 함께 출력한다.

live
:   실시간 추적을 진행하고, 실행되는 함수를 출력한다.

report
:   다양한 통계와 저장된 데이터를 요약하여 출력한다.

info
:   OS 버전, CPU 정보, 라인 수 등의 추가적인 정보를 출력한다.

dump
:   데이터 파일에 있는 저수준 데이터를 출력한다.

recv
:   네트워크로부터 전달받은 데이터를 저장한다.

graph
:   함수 호출 그래프를 출력한다.

script
:   저장된 함수 추적 데이터와 관련된 스크립트를 실행한다.

tui
:   graph 와 report 를 볼 수 있는 텍스트 형식의 사용자 인터페이스를 보여준다.


옵션
====
-h, \--help
:   사용법을 옵션 리스트로 설명과 함께 출력한다.

\--usage
:   사용법을 문자열로 출력한다.

-V, \--version
:   프로그램의 버전을 출력한다.

-v, \--verbose
:   세부적인 메시지를 출력한다.  이 옵션은 디버그 레벨을 3 까지 올릴 수 있다.

\--debug
:   디버그 메시지를 출력한다.  이 옵션은 `-v`/`--verbose` 와 같으며 하위 호환성을
    위해서만 존재한다.

\--debug-domain=*DOMAIN*[,*DOMAIN*, ...]
:   디버그 메시지 출력을 도메인으로 한정한다. 가능한 도메인들은 uftrace, symbol,
    demangle, filter, fstack, session, kernel, mcount, dynamic, event, script
    그리고 dwarf 가 있다.
    위의 도메인들은 콜론을 이용해 선택적으로 각각의 도메인 레벨을 지정할 수 있다.
    예를 들어, `-v --debug-domain=filter:2` 는 filter 옵션에 디버깅 레벨을 지정하고,
    다른 도메인은 디버그 레벨을 1로 지정한다.

-d *DATA*, \--data=*DATA*
:   데이터를 저장할 디렉터리의 이름을 정한다.  기본값은 `uftrace.data` 이다.

\--logfile=*FILE*
:   경고와 디버그 메시지를 stderr 을 대신해 *FILE* 안에 저장한다.

\--color=*VAL*
:   결과에 색을 지정하거나 지정하지 않는다. 가능한 값은
    "yes"(= "true" | "1" | "on" ), "no"(= "false" | "0" | "off" ) 와 "auto" 이다.
    "auto" 는 출력이 터미널인 경우 기본적으로 색을 지정한다.

\--no-pager
:   pager 기능을 사용하지 않는다.

\--opt-file=*FILE*
:   uftrace 실행에 사용하는 옵션을 파일에서 읽어서 적용한다.


보조 명령별 옵션
================
이 옵션들은 완전성을 위해 여기에 존재하지만, 특정 보조 명령어에서만
유효하다.

uftrace-<*subcommand*> 메뉴얼 페이지에서 추가적인 정보를 확인할 수 있다.
*uftrace-live*(1) 메뉴얼 페이지는 특이한 페이지이다: 보조 멍령어 `live` 는
`record` 와 `replay` 의 기능을 내부적으로 진행한다.  그러므로,


\--avg-self
:   각 함수의 자체 시간(self time)의 평균, 최소, 최대 시간을 보여준다.

\--avg-total
:   각 함수의 총 시간(total time)의 평균, 최소, 최대 시간을 보여준다.

-a, \--auto-args
:   알려진 함수의 인자와 반환값들을 자동으로 기록한다.

-A, \--argument=*FUNC*@arg[,arg,...]
:   함수 인자를 표시한다.

-b, \--buffer=*SIZE*
:   저장할 데이터의 내부 버퍼 크기를 설정한다. (기본값: 128k)

\--chrome
:   구글 크롬 추적 기능에서 사용되는 JSON 형식의 결과물을 표시한다.

\--clock
:   타임스탬프를 읽는 클럭 소스를 설정한다. (기본값: mono)

\--column-offset=*DEPTH*
:   각 열의 간격(offset) 크기를 명시한다. (기본값: 8)

\--column-view
:   열(column) 별로 분리하여 각각의 태스크를 출력한다.

-C, \--caller-filter=*FUNC*
:   FUNC의 호출자를 출력하는 필터를 설정한다.

\--demangle=*TYPE*
:   C++ 심볼 디맹글링: full, simple, no
:   (기본값: simple)

\--diff=*DATA*
:   차이점을 보고한다.

\--diff-policy=*POLICY*
:   diff 보고 정책을 설정한다.
:   (기본값: 'abs,compact,no-percent')

\--disable
:   데이터를 기록하지 않고 시작한다.

-D, \--depth=*DEPTH*
:   *DEPTH* 깊이만큼 함수를 추적한다.

-e, \--estimate-return
:   안정성을 위해 각 함수의 진입 데이터만을 기록한다.

\--event-full
:   사용자 함수 밖의 모든 이벤트를 출력한다.

-E, \--Event=*EVENT*
:   더 많은 정보를 저장하기 위해 *EVENT* 를 활성화한다.

\--flame-graph
:   기록된 데이터를 FlameGraph 형식으로 표시한다.

\--flat
:   평평한(flat) 형식으로 출력한다.

\--force
:   계측 정보가 없는 실행 파일이여도 추적한다.

\--format=*FORMAT*
:   *FORMAT* 으로 형식화된 출력을 보여준다: normal, html (기본값: normal)

-f, \--output-fields=*FIELD*
:   replay 혹은 graph 출력에서 FIELD를 보여준다.

-F, \--filter=*FUNC*
:   FUNC 만 추적한다.

-g, \--agent
:   명령어를 받기 위해 mcount에서 에이전트를 시작한다.

\--graphviz
:   기록된 데이터를 *DOT* 형식으로 덤프한다.

-H, \--hide=*FUNC*
:   추적에서 FUNC 를 숨긴다.

\--host=*HOST*
:   추적 데이터를 파일에 쓰는 대신 *HOST* 에 전달한다.

-k, \--kernel
:   지원하는 경우, 커널 함수 또한 추적한다.

\--keep-pid
:   프로그램을 추적할 때 동일한 pid 값을 유지하게 해준다.

\--kernel-buffer=*SIZE*
:   저장할 커널 데이터의 내부 버퍼 크기를 설정한다.  (기본값: 1408K)

\--kernel-full
:   사용자 함수 밖에서 호출된 모든 커널 함수를 출력한다.

\--kernel-only
:   사용자 함수를 제외한 커널 함수만 출력한다.

\--kernel-skip-out
:   사용자 함수 밖의 커널 함수를 생략한다. (지원 종료)

-K, \--kernel-depth=*DEPTH*
:   커널 최대 함수 깊이를 *DEPTH* 로 지정한다.

\--libmcount-single
:   libmcount 의 단일 쓰레드 버전을 사용한다.

\--list-event
:   실행중에 사용가능한 이벤트들을 출력한다.

\--logfile=*FILE*
:   경고와 디버그 메시지를 stderr 을 대신해 *FILE* 안에 저장한다.

-l, \--nest-libcall
:   중첩된 라이브러리 호출을 보여준다.

\--libname
:   함수 이름과 함께 라이브러리 이름을 출력한다

\--libmcount-path=*PATH*
:   libmcount 라이브러리를 *PATH* 에서 먼저 찾는다.
:   Load libmcount libraries from this *PATH*

\--match=*TYPE*
:   일치하는 패턴을 보여준다: regex, glob (기본값:
:   regex)

\--max-stack=*DEPTH*
:   스택의 최대 깊이를 *DEPTH* 로 설정한다. (기본값: 65535)

\--no-args
:   함수 인자와 반환 값을 보여주지 않는다.

\--no-comment
:   함수가 반환되는 곳에 주석을 출력하지 않는다.

\--no-event
:   기본 이벤트들을 비활성화한다.

\--no-sched
:   스케줄 이벤트를 비활성화한다.

\--no-sched-preempt
:   선점 스케줄 이벤트는 표시하지 않게 하나
:   일반(대기) 스케쥴 이벤트는 그대로 표시한다.

\--no-libcall
:   라이브러리 호출을 추적하지 않는다.

\--no-merge
:   잎(leaf) 함수를 병합하지 않는다.

\--no-pltbind
:   동적 심볼 주소를 바인딩하지 않는다. (*LD_BIND_NOT*)

\--no-randomize-addr
:   ASLR(Address Space Layout Randomization)을 비활성화 한다.

\--nop
:   아무 작업도 하지 않는다. (성능 테스트 용)

\--num-thread=*NUM*
:   데이터를 저장하기 위해 *NUM* 개의 쓰레드를 사용한다.

-N, \--notrace=*FUNC*
:   FUNC들을 추적하지 않는다.

-p, \--pid=*PID*
:   대화형 mcount 인스턴스의 *PID* 에 연결한다.

\--port=*PORT*
:   네트워크 연결을 위해 *PORT* 를 사용한다. (기본값: 8090)

-P, \--patch=*FUNC*
:   FUNC에 동적 패칭을 적용한다.

\--record
:   주어진 스크립트를 실행하기 전에 새롭게 추적을 기록한다.

\--report
:   replay 전 실시간 보고서를 보여준다.

\--rt-prio=*PRIO*
:   실시간 (*FIFO*) 우선순위로 기록한다.

-r, \--time-range=*TIME*~*TIME*
:   *TIME* 시간 안에서만 기록된 추적 결과를 보여준다.
:   (타임스탬프 혹은 경과시간)

\--run-cmd=*CMDLINE*
:   데이터를 수신한 다음에 주어진 (쉘)명령어를 바로
:   실행한다.

-R, \--retval=*FUNC*[@retspec]
:   함수 *FUNC*에 대한 반환값을 주어진
:   uftrace retspec 에 맞게 보여준다.

\--sample-time=*TIME*
:   설정한 샘플링 타임에 해당하는 Flame graph 를 보여준다.

\--signal=*SIGNAL*@act[,act,...]
:   주어진 *SIGNAL* 을 받았을 때 주어진 액션을 실행한다.

\--sort-column=*INDEX*
:   *INDEX* 열을 기준으로 diff 보고서를 정렬한다. (기본값: 2)

\--srcline
:   가능한 각 함수들의 소스 줄번호를 표시한다.

\--symbols
:   기록된 정보 대신에 심볼(symbol) 테이블을 출력한다.

-s, \--sort=*KEY*[,*KEY*,...]
:   주어진 키를 기반으로 함수들을 정렬한다. (기본값: 2)

-S, \--script=*SCRIPT*
:   함수의 시작과 끝에 주어진 *SCRIPT* 를 수행한다.

-t, \--time-filter=*TIME*
:   설정한 시간 이하로 수행된 함수는 표시하지 않게 한다.

\--task
:   일반적인 함수 그래프 대신 태스크 그래프를 출력한다.

\--task-newline
:   태스크가 변경되면 빈 공백 한줄을 추가한다.

\--tid=*TID*[,*TID*,...]
:   주어진 태스크에 의해 호출된 함수들만 출력한다.

\--time
:   시간 정보를 출력한다.

-T, \--trigger=*FUNC*@act[,act,...]
:   FUNC 의 트리거를 설정한다.

-U, \--unpatch=*FUNC*
:   주어진 FUNC 함수에 대해 동적 패치를 적용하지 않는다.

\--with-syms=*DIR*
:   *DIR* 디렉터리 안에 있는 심볼 파일들을 사용한다.

-W, \--watch=*POINT*
:   *POINT* 가 변경되는 경우를 감시하고 기록한다.

-Z, \--size-filter=*SIZE*
:   *SIZE* 보다 큰 함수들에 동적 패칭을 적용한다.

더 구체적인 보조 명령별 옵션을 확인하기 위해선,
아래에 나열된 메뉴얼 페이지를 참조하라.


함께 보기
========
`uftrace-live`(1), `uftrace-record`(1), `uftrace-replay`(1), `uftrace-report`(1), `uftrace-info`(1), `uftrace-dump`(1), `uftrace-recv`(1), `uftrace-graph`(1), `uftrace-script`(1), `uftrace-tui`(1)


번역자
======
류준호 <ruujoon93@gmail.com>, 김성진 <mirusu400@naver.com>