Loading...
MySQL 9.5 Reference Manual 9.5의 7.12 The DBUG Package의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
MySQL server와 대부분의 MySQL client는 Fred Fish가 최초로 만든 DBUG 패키지를 사용하여 컴파일됩니다. MySQL을 디버깅용으로 구성했을 때, 이 패키지를 사용하면 프로그램이 무엇을 하고 있는지에 대한 트레이스 파일을 얻을 수 있습니다. Section 7.9.1.2, “Creating Trace Files”를 참조하십시오.
이 섹션은 디버깅 지원을 포함하여 빌드된 MySQL 프로그램에 대해, 커맨드 라인의 debug 옵션에서 지정할 수 있는 argument 값들을 요약한 것입니다.
DBUG 패키지는 프로그램을
--debug[=debug_options]
또는 -# [debug_options]
옵션과 함께 실행하여 사용할 수 있습니다. --debug 또는
-# 옵션을
debug_options 값을 지정하지 않고 사용하면, 대부분의 MySQL 프로그램은 기본값을 사용합니다. server 기본값은 Unix에서는 d:t:i:o,/tmp/mysqld.trace, Windows에서는 d:t:i:O,\mysqld.trace 입니다. 이 기본값의 효과는 다음과 같습니다:
d: 모든 debug 매크로에 대한 출력을 활성화합니다.
t: 함수 호출 및 종료를 트레이스합니다.
i: 출력 라인에 PID를 추가합니다.
o,/tmp/mysqld.trace, O,\mysqld.trace: debug 출력 파일을 설정합니다.
대부분의 client 프로그램은 플랫폼과 상관없이
debug_options 기본값으로
d:t:o,/tmp/program_name.trace
를 사용합니다.
다음은 shell 커맨드 라인에서 지정될 수 있는 debug control string의 예입니다:
1--debug=d:t 2--debug=d:f,main,subr1:F:L:t,20 3--debug=d,input,output,files:n 4--debug=d:t:i:O,\\mysqld.trace
mysqld의 경우, debug 시스템 변수를 설정하여 runtime에 DBUG 설정을 변경하는 것도 가능합니다. 이 변수에는 global 값과 session 값이 있습니다:
1mysql> SET GLOBAL debug = 'debug_options'; 2mysql> SET SESSION debug = 'debug_options';
global debug 값을 변경하려면 global 시스템 변수를 설정할 수 있을 만큼의 권한이 필요합니다. session debug 값을 변경하려면 제한된 session 시스템 변수를 설정할 수 있을 만큼의 권한이 필요합니다. Section 7.1.9.1, “System Variable Privileges”를 참조하십시오.
debug_options 값은 콜론으로 구분된 field들의 시퀀스입니다:
1field_1:field_2:...:field_N
값 안의 각 field는 필수 flag 문자 하나와, 선택적으로 앞에 붙는 + 또는 - 문자 하나, 그리고 선택적으로 comma로 구분된 modifier 리스트로 구성됩니다:
1[+|-]flag[,modifier,modifier,...,modifier]
다음 표는 허용되는 flag 문자를 설명합니다. 인식되지 않는 flag 문자는 조용히 무시됩니다.
| Flag | Description |
|---|---|
d | 현재 상태에 대해<br>DBUG_XXX<br>매크로의 출력을 활성화합니다. 이 flag 뒤에는 keyword<br>리스트가 올 수 있으며, 이 경우 해당 keyword를 가진 DBUG 매크로에<br>대해서만 출력이 활성화됩니다. 빈 keyword 리스트는<br>모든 매크로에 대한 출력을 활성화합니다.<br> <br>MySQL에서, 자주 활성화되는 debug 매크로 keyword에는<br>enter, exit,<br>error, warning,<br>info, loop가 있습니다. |
D | 각 디버거 출력 라인 이후에 지연을 줍니다. argument는<br>머신 성능에 따라 달라지는, 1/10초 단위의<br>지연 시간입니다. 예를 들어, D,20은<br>2초의 지연을 의미합니다. |
f | 디버깅, 트레이싱, 프로파일링을 지정된 함수 리스트로 제한합니다.<br>빈 리스트는 모든 함수를 활성화합니다. 적절한<br>d 또는 t flag도 여전히<br>지정되어야 합니다. 이 flag는 해당 flag들이 활성화된 경우에만<br>그 동작 범위를 제한합니다. |
F | 각 debug 또는 trace 출력 라인에 대해 소스 파일 이름을<br>표시합니다. |
i | 각 debug 또는 trace 출력 라인에 대해 PID 또는 thread ID로<br>프로세스를 식별합니다. |
L | 각 debug 또는 trace 출력 라인에 대해 소스 파일 라인 번호를<br>표시합니다. |
n | 각 debug 또는 trace 출력 라인에 대해 현재 함수 중첩 깊이를<br>출력합니다. |
N | 각 debug 출력 라인에 번호를 매깁니다. |
o | 디버거 출력 스트림을 지정된 파일로 리다이렉트합니다.<br>기본 출력은 stderr입니다. |
O | o와 같지만, 각 write 사이에<br>파일을 실제로 flush합니다. 필요할 때마다, 각 write 사이에<br>파일을 닫았다가 다시 엽니다. |
a | o와 같지만, append 모드로 엽니다. |
A | O와 같지만, append 모드로 엽니다. |
p | 디버거 동작을 지정된 프로세스로 제한합니다. 디버거 동작이<br>발생하려면 프로세스가<br>DBUG_PROCESS 매크로로 식별되고, 리스트 중 하나와<br>일치해야 합니다. |
P | 각 debug 또는 trace 출력 라인에 대해 현재 프로세스 이름을<br>출력합니다. |
r | 새 상태를 push할 때, 이전 상태의 함수 중첩 레벨을<br>상속하지 않습니다. 출력을 왼쪽 여백에서<br>시작하고자 할 때 유용합니다. |
t | 함수 call/exit 트레이스 라인을 활성화합니다. 리스트(하나의 modifier만<br>포함 가능)가 뒤따를 수 있으며, 이 리스트는 디버깅 또는 트레이싱 매크로에<br>대해 출력이 발생하는 최대 트레이스 레벨을 숫자로 지정합니다.<br>기본값은 컴파일 시 옵션입니다. |
T | 각 출력 라인에 현재 타임스탬프를 출력합니다. |
| Flag | Description |
|---|
앞에 오는 + 또는 - 문자와 뒤에 오는 modifier 리스트는, d 또는 f처럼 debug 동작을 모든 해당 modifier에 대해 활성화하거나, 그중 일부에 대해서만 활성화할 수 있는 flag 문자에 사용됩니다:
앞에 + 또는 -가 없으면, flag 값은 주어진 modifier 리스트와 정확히 같게 설정됩니다.
앞에 + 또는 -가 있으면, 리스트에 있는 modifier가 현재 modifier 리스트에 추가되거나 그로부터 제거됩니다.
다음 예시는 d flag에 대해 이것이 어떻게 동작하는지 보여줍니다. 빈 d 리스트는 모든 debug 매크로에 대한 출력을 활성화합니다. 비어 있지 않은 리스트는 리스트 안의 매크로 keyword에 대해서만 출력을 활성화합니다.
다음 statement들은 d 값을 주어진 modifier 리스트로 설정합니다:
1mysql> SET debug = 'd'; 2mysql> SELECT @@debug; 3+---------+ 4| @@debug | 5+---------+ 6| d | 7+---------+ 8mysql> SET debug = 'd,error,warning'; 9mysql> SELECT @@debug; 10+-----------------+ 11| @@debug | 12+-----------------+ 13| d,error,warning | 14+-----------------+
앞에 오는 + 또는 -는 현재 d 값에 modifier를 더하거나 빼는 역할을 합니다:
1mysql> SET debug = '+d,loop'; 2mysql> SELECT @@debug; 3+----------------------+ 4| @@debug | 5+----------------------+ 6| d,error,warning,loop | 7+----------------------+ 8 9mysql> SET debug = '-d,error,loop'; 10mysql> SELECT @@debug; 11+-----------+ 12| @@debug | 13+-----------+ 14| d,warning | 15+-----------+
“모든 매크로 활성화” 상태에 modifier를 추가해도 결과는 변하지 않습니다:
1mysql> SET debug = 'd'; 2mysql> SELECT @@debug; 3+---------+ 4| @@debug | 5+---------+ 6| d | 7+---------+ 8 9mysql> SET debug = '+d,loop'; 10mysql> SELECT @@debug; 11+---------+ 12| @@debug | 13+---------+ 14| d | 15+---------+
활성화된 모든 매크로를 비활성화하면 d flag 자체가 완전히 비활성화됩니다:
1mysql> SET debug = 'd,error,loop'; 2mysql> SELECT @@debug; 3+--------------+ 4| @@debug | 5+--------------+ 6| d,error,loop | 7+--------------+ 8 9mysql> SET debug = '-d,error,loop'; 10mysql> SELECT @@debug; 11+---------+ 12| @@debug | 13+---------+ 14| | 15+---------+
7.11 The LOCK_ORDER Tool
8 Security