구문
dbx [ -a ProcessID ] [ -c CommandFile ] [ -d NestingDepth ] [ -I Directory ] [ -E DebugEnvironment ] [ -k ] [ -u ] [ -F ] [ -r ] [ -x ] [ ObjectFile [ CoreFile ] ]
설명
dbx 명령은 C, C++, Pascal 및 FORTRAN 프로그램에 대한 디버그를 제공하여, 사용자가 다음과 같은 작업을 수행할 수 있도록 합니다.
- 오브젝트 및 core 파일 검사.
- 프로그램 실행을 위한 제어 환경 제공.
- 선택한 문장에 중단점을 설정하거나 한 번에 한 행씩 프로그램 실행.
- 변수를 사용하여 디버그한 후 올바른 형식으로 표시.
ObjectFile 매개변수는 컴파일러가 만들어 내는 오브젝트(실행 가능) 파일입니다. dbx 명령에 필요한 정보를 만들기 위해 프로그램 컴파일시 -g(기호표 작성) 플래그를 사용합니다. cc 명령의 -g 플래그는 오브젝트 파일이 컴파일될 때 사용해야 합니다. -g 플래그를 사용하지 않거나 strip 명령으로 xcoff 파일에서 기호 참조가 제거된 경우, dbx 명령의 사용 범위는 제한됩니다.
-c 플래그를 지정하지 않은 경우, dbx 명령은 사용자의 $HOME 디렉토리에 있는 .dbxinit 파일을 점검합니다. 그런 다음, 사용자의 현재 디렉토리에서 .dbxinit 파일을 점검합니다. .dbxinit 파일이 현재 디렉토리에 존재하면, 이 파일이 사용자의 $HOME 디렉토리에 있는 .dbxinit 파일을 대체합니다. .dbxinit 파일이 사용자의 $HOME 디렉토리 또는 현재 디렉토리에 존재하면, 디버그 세션이 시작될 때 이 파일의 부속 명령이 실행됩니다. 편집기를 사용하여 .dbxinit 파일을 작성하십시오.
ObjectFile을 지정하지 않으면, dbx는 디버그할 오브젝트 파일 이름을 요청합니다. 디폴트는 a.out입니다. core 파일이 현재 디렉토리에 존재하거나 CoreFile 매개변수가 지정되어 있으면, dbx는 프로그램에 이상이 있는 위치를 보고합니다. core 이미지에 보유된 변수, 레지스터 및 메모리는 ObjectFile의 실행이 시작될 때까지 검사되어 집니다. 그 시점에 dbx 디버그 프로그램은 명령을 위한 프롬프트를 리턴합니다.
표현식 처리
dbx 프로그램은 광범위한 표현식을 사용합니다. dbx 디버그 프로그램에 C 및 Pascal 구문의 공통적인 기능의 일부와, 여러 가지 FORTRAN 확장자를 가진 표현식을 지정할 수 있습니다.
디버그 프로그램에서 자주 사용되는 연산자는 다음과 같습니다.
- *(별표) 또는 ^(탈자부호) 간접 표현이나 포인터 참조를 표시합니다.
- [ ](대괄호) 또는 ( )(괄호) 첨자 배열 표현식을 표시합니다.
- . (마침표) 포인터 및 구조체와 함께 이 필드 참조 연산자를 사용합니다. 이것은 C 연산자인 -> (화살표)를 사용하지 않고도 가능합니다.
- &(앰퍼샌드) 변수 주소를 알 수 있습니다.
- .. (2개의 점) 배열의 하위 섹션을 지정할 때 상하한을 구분합니다. 예 : n[1..4].
디버그 프로그램에서 사용되는 연산자 유형은 다음과 같습니다.
- 대수표현식 =, -, *, /(부동소수의 나눗셈), div(정수의 나눗셈), mod, exp(지수연산)
- 비트 단위 연산 -, I, bitand, xor, ~. <<, >>
- 논리표현식 or, and, not, II, &&
- 비교 <, >, <=, >=, < > 또는!=, = 또는 ==
- 기타 (유형 이름), 크기
stop 부속 명령 및 trace 부속 명령과 같은 조건에서 논리 및 비교 표현식이 허용됩니다.
표현식 유형은 검사되어 집니다. 사용자는 표현식의 이름을 변경하거나 캐스팅 연산자를 사용하여 표현식 유형을 대체합니다. 이름 바꾸기의 세 가지 양식은 Typename(Expression), Expression |Typename, (Typename) Expression입니다. 다음 예에서 변수 x는 값이 97인 정수입니다.
(dbx) print x 97
(dbx) print char (x), x char, (char) x, x
'a' 'a' 'a' 97
명령 행 편집
dbx 명령은 Korn 쉘에서 제공하는 것과 유사한 명령 행 편집 기능을 제공합니다. vi 모드는 vi와 같은 편집 기능을 제공하는 반면, emacs 모드는 emacs와 유사한 제어를 제공합니다.이 기능은 dbx 부속 명령인 set -o 또는 set edit를 사용하여 설정될 수 있습니다. vi 방식의 명령 행 편집 기능을 사용하기 위해서는, 부속 명령 set edit vi 또는 set -o vi를 입력하십시오.EDITOR 환경 변수를 사용하여 편집 모드를 설정할 수도 있습니다.
dbx 명령은 입력된 명령을 .dbxhistory 파일에 저장합니다. DBXHISTFILE 환경 변수가 설정되지 않은 경우, 기록을 위해 사용되는 파일은 $HOME/.dbxhistory입니다.디폴트로, dbx는 최근에 입력된 128개의 명령 텍스트를 저장합니다. DBXHISTSIZE 환경 변수는 이 한계를 늘리는데 사용될 수 있습니다.
플래그
-a : ProcessID 디버그 프로그램을 수행 중인 프로세스에 연결합니다. 디버그 프로그램을 연결하려면, 이 프로세스에 대해 kill 명령을 사용할 수 있는 권한이 있어야 합니다. 프로세스 ID를 판별하려면 ps 명령을 사용하십시오. 사용권한이 있으면, dbx 프로그램은 프로세스를 인터럽트하고, 오브젝트 파일의 전체 이름을 판별하며, 기호 정보를 읽고, 명령을 입력할 수 있는 프롬프트를 처리합니다.
-c : CommandFile 표준 입력으로부터 읽기 전에 파일에 있는 dbx 부속 명령을 수행합니다. $HOME 디렉토리에 지정된 파일을 먼저 처리한 다음, 현재 디렉토리에 있는 파일을 처리합니다. 현재 디렉토리에 있는 명령 파일이 $HOME 디렉토리에 있는 명령 파일보다 우선적으로 처리됩니다. 지정된 파일이 $HOME 디렉토리 또는 현재 디렉토리에 존재하지 않으면, 경고 메세지가 표시됩니다. source 부속 명령은 dbx 프로그램이 시작될 때 한 번 사용됩니다.
-d : NestingDepth 프로그램 블록의 중첩 한계를 설정합니다. 디폴트 중첩 행 수는 25입니다.
-E : DebugEnvironment 디버그 프로그램에 대한 환경 변수를 지정합니다.
-F : 레이지(lazy) 읽기 모드를 중단하고 dbx 명령이 시작시 모든 기호를 읽도록 하는 데 사용될 수 있습니다. 디폴트로, 레이지(lazy) 읽기 모드는 온(on) 상태입니다. 이는 dbx 세션을 초기화하는 데 필요한 기호 테이블 정보만을 읽습니다. 이 모드에서, dbx는 기호 정보를 읽지 않은 국지 변수 및 유형은 읽지 않습니다. 따라서, whereis i와 같은 명령은 각 함수 내의 국지 변수 i의 모든 경우에 대해서 보여줄 수는 없습니다.
-I : Directory (대문자 i) 소스 파일의 위치를 찾기 위한 디렉토리 리스트는 Direcory 변수가 지정한 디렉토리를 포함합니다. 디폴트는 다음 디렉토리에서 소스 파일을 찾는 것입니다. 컴파일되었을 때 소스 파일이 위치한 디렉토리. 이 디렉토리는 컴파일러가 오브젝트의 소스 경로에 있을 때만 찾을 수 있습니다.
현재 디렉토리 : 프로그램이 현재 위치한 디렉토리.
-k : 메모리 주소를 대응시킵니다. 커널 디버깅에 사용될 수 있습니다.
-r : 즉시 오브젝트 파일을 실행합니다. 성공적으로 종료되면, dbx 디버그 프로그램이 종료됩니다. 그렇지 않으면, 디버그 프로그램으로 들어가게 되고 종료되어진 원인을 보여줍니다. 주의: -r을 지정하지 않으면, dbx 명령은 사용자가 명령을 입력하도록 프롬프트를 대기시킵니다.
-u : dbx 명령은 파일 이름 기호 앞에 @(at 기호)를 붙입니다. 이 플래그는 모호한 기호 이름이 생기는 것을 방지해 줍니다.
-x : dbx 명령이 FORTRAN 소스 코드에서 발생한 기호로부터 _ (뒤에 붙은 밑줄) 문자를 삭제하지 못하도록 합니다. 이 플래그는 dbx 명령이 xxx 및 xxx_와 같이 밑줄 문자가 없으면 동일한 기호를 서로 구분할 수 있도록 해 줍니다.
예제
다음 예제는 프로세스와 동시에 dbx 디버그 프로그램을 시작하는 방법에 대해 설명합니다. 예제는 samp.c라는 프로그램을 사용합니다. 이 C 프로그램은 먼저 기호 표 참조사항이 들어 있는 오브젝트 파일을 작성하기 위해 -g 플래그를 사용하여 컴파일됩니다. 이런 경우, samp 프로그램은 다음 사항을 표시합니다.
$ cc -g samp.c -o samp
samp 프로그램이 수행 중일 때 운영 시스템은 버스 오류를 알리고 다음과 같이 사용자의 현재 작업 디렉토리에 core 이미지를 작성합니다.
$ samp
Bus Error - core dumped
오류가 발생한 위치를 찾아내려면 다음과 같이 입력하십시오.
$ dbx samp
시스템이 다음과 같은 메세지를 리턴합니다.
dbx version 3.1
Type 'help' for help.
reading symbolic information . . . [
using memory image in core]
25 x[i] = 0;
(dbx) quit
이 예제는 프로세스에 dbx를 연결하는 방법에 대해 설명합니다. 이 예제는 looper.c 프로그램을 사용합니다.
main()
{
int i,x[10];
for (i = 0; i < 10;);
}
i가 증가하지 않으므로 프로그램이 종료되지 않습니다.
기호 디버깅 기능을 확보하려면 looper.c를 -g 플래그를 사용하여 컴파일하십시오.
$ cc -g looper.c -o looper
명령 행에서 looper를 수행하고 프로그램이 수행되는 동안 dbx를 프로그램에 연결하려면 다음과 같은 단계를 따르십시오.
dbx를 looper에 연결하려면, 프로세스 ID를 결정해야 합니다. 백그라운드 프로세스로서 looper를 수행하지 않았으면, 다른 Xwindow를 열어 두어야 합니다. 이 Xwindow 창에서, 다음을 입력하십시오.
$ ps -u UserID
여기서 UserID는 로그인 ID를 말합니다. 사용자에게 속하는 사용 중인 모든 프로세스는 다음과 같이 표시됩니다.
PID TTY TIME COMMAND
68 console 0:04 sh
467 lft3 10:48 looper
이 예제에서 looper와 관련된 프로세스 ID는 467입니다.
dbx를 looper에 연결하려면 다음과 같이 입력하십시오.
$ dbx -a 467
시스템이 다음과 같은 메세지를 리턴합니다.
Waiting to attach to process 467 . . .
Successfully attached to /tmp/looper.
dbx is initializing
Type 'help' for help.
reading symbolic information . . .
attached in main at line 5
5 for (i = 0; i < 10;);
(dbx)
프로세스가 처음에 dbx에 의해 시작된 것처럼 지금 프로세스를 조회하고 디버그할 수 있습니다.
실행 파일인 objfile의 소스 파일을 탐색하기 위한 디렉토리 리스트에 디렉토리를 추가하려면, 다음과 같이 입력하십시오.
$dbx -I /home/user/src -I /home/group/src objfile
일단 dbx가 시작되면 use 부속 명령을 사용할 수도 있습니다.
-I 플래그가 리스트에 디렉토리를 추가하는 것과는 달리 use 명령은 디렉토리 리스트를 재설정합니다.
-r 플래그를 사용하려면, 다음과 같이 입력하십시오.
$ dbx -r samp
시스템이 다음과 같은 메세지를 리턴합니다.
Entering debug program . . .
dbx version 3.1
Type 'help' for help.
reading symbolic information . . .
bus error in main at line 25
25 x[i] = 0;
(dbx) quit
-r 플래그는 사용자가 core 이미지를 가지고 있지 않더라도 메모리에서 사용자의 프로세스 상태를 검사할 수 있도록 합니다.
디버그 프로그램에 대한 환경 변수를 지정 하려면, 다음을 입력하십시오.
dbx -E LIBPATH=/home/user/lib -E LANG= Ja_JP objfile
dbx 부속 명령
주: 부속 명령은 dbx 디버그 프로그램이 수행 중일 때만 사용할 수 있습니다.
- / : 패턴의 현재 소스 파일에서 앞쪽으로 검색합니다.
- ? : 특정 패턴에 대해 현재 소스 파일의 거꾸로 방향으로 검색합니다.
- alias dbx : 부속 명령에 대한 별명을 작성합니다.
- assign : 변수에 값을 지정합니다.
- attribute : 전체 또는 선택된 속성 오브젝트에 관한 정보를 표시합니다.
- call : 명명된 프로시듀어 또는 기능과 관련된 오브젝트 코드를 수행합니다.
- case dbx : 디버그 프로그램이 기호를 해석하는 방법을 변경합니다.
- catch : 신호가 응용프로그램으로 보내지기 전에 신호의 트랩을 시작합니다.
- clear : 정해진 소스 행에서 정지점을 전부 제거합니다.
- cleari : 특정 주소에 지정되어 있는 중단점을 전부 제거합니다.
- condition : 전체 또는 선택된 조건 변수에 관한 정보를 표시합니다.
- cont : 프로그램이 종료되거나 다른 중단점과 만나게 될 때까지 현재의 정지 지점에서 응용프로그램 실행을 계속합니다.
- delete : 지정된 이벤트 숫자에 해당하는 추적과 정지를 제거합니다.
- detach : 응용프로그램을 계속 실행하고 디버그 프로그램을 종료합니다.
- display memory : 메모리 내용을 표시합니다.
- down : 스택 아래로 현재 기능을 이동합니다.
- dump : 지정된 프로시듀어에 있는 변수 이름과 값을 표시합니다.
- edit : 지정된 파일에서 편집기를 시작합니다.
- file : 현재의 소스 파일을 지정된 파일로 변경합니다.
- func : 현재의 기능을 지정된 프로시듀어나 기능으로 변경합니다.
- goto : 지정된 소스 행이 다음 수행 행이 되도록 합니다.
- gotoi : 프로그램 계수기 주소를 변경합니다.
- help : dbx 부속 명령이나 주제에 대한 도움말 정보를 표시합니다.
- ignore : 신호가 응용프로그램으로 보내지기 전에 신호 트랩을 정지합니다.
- list : 현재 소스 파일의 행을 표시합니다.
- listi : 응용프로그램으로부터 명령어를 나열합니다.
- map : 응용프로그램의 로드 특성에 관한 정보를 표시합니다.
- move : 다음 행이 표시되도록 변경합니다.
- multproc : 다중 프로세스 디버깅을 사용 가능하게 하거나 사용 불가능하게 합니다.
- mutex : 전체 또는 선택된 mutexes에 관한 정보를 표시합니다.
- next : 다음 소스 행까지 응용프로그램을 수행합니다.
- nexti : 다음 기계 명령어까지 응용프로그램을 수행합니다.
- print : 표현식 값을 인쇄하거나 프로시듀어를 수행하고, 그 프로시듀어의 리턴 코드를 인쇄합니다.
- prompt : dbx 명령 프롬프트를 변경합니다.
- quit : dbx 디버그 프로그램을 정지합니다.
- registers : 모든 범용 레지스터, 시스템 제어 레지스터, 부동소수점 레지스터, 현재 명령어 레지스터의 값을 표시합니다.
- rerun : 이전 인수로 응용프로그램을 실행하기 시작합니다.
- return : 지정된 프로시듀어로 복귀할 때까지 응용프로그램 수행을 계속합니다.
- rwlock : Rwlocks에 대한 정보를 표시합니다.
- run : 응용프로그램 수행을 시작합니다.
- screen : dbx 명령과의 상호작용을 위해 Xwindow를 엽니다.
- set : dbx 디버그 프로그램 변수 값을 정의합니다.
- sh : 명령을 실행할 쉘로 전달합니다.
- skip : 현재의 정지 지점에서 응용프로그램 수행을 계속합니다.
- source : 파일로부터 dbx 부속 명령을 읽어들입니다.
- status : 사용 중인 trace와 stop 부속 명령을 표시합니다.
- step : 하나의 소스행을 수행합니다.
- stepi : 하나의 기계 명령어를 수행합니다.
- stop : 응용프로그램 수행을 정지합니다.
- stopi : 지정된 위치에 정지를 설정합니다.
- thread : thread를 표시하고 제어합니다.
- trace : 추적 정보를 인쇄합니다.
- tracei : 추적을 실행합니다.
- unalias : 별명을 제거합니다.
- unset : 변수를 삭제합니다.
- up : 스택 위로 현재 기능을 이동합니다.
- use : 소스 파일을 찾을 때 디렉토리 리스트를 찾도록 설정합니다.
- whatis : 응용프로그램 구성요소 선언을 표시합니다.
- where : 사용 중인 프로시듀어와 함수 리스트를 표시합니다.
- whereis : 이름이 지정된 식별자와 일치하는 모든 기호에 대한 전체 조건을 표시합니다.
- which : 주어진 식별자에 대한 전체 조건을 표시합니다.
/ 부속 명령 : / [ RegularExpression[ / ] ]
/ 부속 명령은 RegularExpression 매개변수가 지정한 패턴을 현재 소스 파일 위치에서 앞쪽으로 탐색합니다. 인수 없이 / 부속 명령을 입력하면 dbx는 이전 정규식을 파일의 앞쪽으로 탐색합니다. 탐색은 파일의 끝을 만나면 다시 처음부터 탐색하기 시작합니다.
예제
현재 소스 파일에서 12라는 숫자에 대해 앞쪽으로 탐색하려면 다음과 같이 입력하십시오.
/ 12
이전 탐색을 반복하려면, 다음과 같이 입력하십시오.
/
? (탐색) 부속 명령 및 regcmp 서브루틴을 참조하십시오.
? 부속 명령 : ? [ RegularExpression[ ? ] ]
? 부속 명령은 RegularExpression 매개변수가 지정한 패턴을 현재 소스 파일에서 역방향으로 탐색합니다. 인수 없이 ? 부속 명령을 입력하면 dbx 명령은 이전 정규식을 뒷쪽(역방향)으로 탐색합니다. 탐색은 파일의 끝을 만나면 다시 처음부터 탐색하기 시작합니다.
예제
현재 소스 파일에서 문자 z에 대해 뒤쪽으로 탐색하려면, 다음과 같이 입력하십시오.
?z
이전 탐색을 반복하려면, 다음과 같이 입력하십시오.
?
/(탐색) 부속 명령 및 regcmp 서브루틴을 참조하십시오.
alias 부속 명령 : alias [ Name [ [ (Arglist) ] String | Subcommand ] ]
alias 부속 명령은 dbx 부속 명령에 대한 별명을 작성합니다. Name 매개변수는 작성되고 있는 별명입니다. String 매개변수는 일련의 dbx 부속 명령으로서 이 부속 명령을 실행한 다음 Name으로 참조할 수 있습니다. 매개변수 없이 alias 부속 명령을 사용하면 현재의 모든 별명이 표시됩니다.
예제
rerun을 rr로 바꾸려면, 다음과 같이 입력하십시오.
alias rr rerun
printandstep이 명령 행에 입력될 때 두 개의 부속 명령 print n과 step을 수행하려면, 다음과 같이 입력하십시오.
alias printandstep "print n; step"
alias 부속 명령을 제한된 마크로 기능으로 사용할 수도 있습니다. 예를 들면 다음과 같습니다.
(dbx) alias px(n) "set $hexints; print n; unset $hexints"
(dbx) alias a(x,y) "print symname[x]->symvalue._n_n.name.Id[y]"
(dbx) px(126)
0x7e
이 예에서, 별명 px는 디버깅 환경에 영구적으로 영향을 미치지 않고 16진수로 값을 인쇄합니다.
assign 부속 명령 : assign Variable =Expression
assign 부속 명령은 Expression 매개변수가 지정한 값을 Variable 매개변수가 지정한 변수에 지정합니다.
예제
값 5를 변수 x에 지정하려면 다음과 같이 입력하십시오.
assign x = 5
변수 y를 변수 x에 지정하려면 다음과 같이 입력하십시오.
assign x = y
문자 값'z'를 변수 z에 지정하려면 다음과 같이 입력하십시오.
assign z = 'z'
부울의 값 false를 논리유형 변수 B에 지정하려면 다음과 같이 입력하십시오.
assign B = false
"Hello World" 문자열을 문자 포인터 Y에 지정하려면, 다음을 입력하십시오.
assign Y = "Hello World"
유형 검사 기능을 사용하지 않으려면, 다음과 같이 입력하여 dbx 디버그 프로그램 변수 $unsafeassign을 설정하십시오.
set $unsafeassign
변수 표시 및 변경을 참조하십시오.
attribute 부속 명령 : attribute [ AttributeNumber ... ]
Attribute 부속 명령은 사용자 thread, mutex 또는 AttributeNumber 매개변수에 의해 정의된 조건 속성 오브젝트에 대한 정보를 표시합니다. 매개변수를 지정하지 않으면, 모든 속성 오브젝트가 나열됩니다. 나열된 각 속성 오브젝트에 다음과 같은 정보가 표시됩니다.
- attr 속성 오브젝트의 기호 이름을 $a AttributeNumber 양식으로 나타냅니다.
- obj_addr 속성 오브젝트의 주소를 나타냅니다.
- type 속성 오브젝트의 유형을 나타냅니다. 사용자 thread, mutex, 조건 변수의 경우 속성 오브젝트 유형은 각각 thr, mutex 또는 cond가 됩니다.
- state 속성 오브젝트 상태를 나타냅니다. valid나 inval이 될 수 있습니다.
- stack thread 속성 오브젝트의 스택 크기 속성을 나타냅니다.
- scope thread 속성 오브젝트의 유효범위 속성을 나타냅니다. 이것은 thread의 경합 유효범위를 결정하고, 자원을 서로 차지하려는 하는 thread 세트를 지정합니다. 시스템이나 프로세스 경합 유효범위에 대한 값은 sys나 pro가 될 수 있습니다.
- prio thread 속성 오브젝트의 우선순위 속성을 나타냅니다.
- sched thread 속성 오브젝트의 스케줄 방식의 속성을 나타냅니다. 이 속성은 스케줄 방식을 제어하는데, fifo, rr (라운드 로빈) 또는 other가 될 수 있습니다.
- p-shar mutex나 condition 속성 오브젝트의 프로세스 공유 속성을 나타냅니다. mutex나 condition은 다른 프로세스에 속하는 thread가 여기에 액세스할 수 있으면, 프로세스를 공유합니다. 값은 yes나 no가 될 수 있습니다.
- protocol mutex의 프로토콜 속성을 나타냅니다. 이 속성은 thread 우선순위에서 mutex를 보유하는 효과를 결정합니다. 값은 no_prio, prio 또는 protect가 될 수 있습니다.
주: dbx 디버그 프로그램의 print 부속 명령은 기호 속성명을 인지하며, 해당 오브젝트 상태를 표시하는 데 사용할 수 있습니다.
사용 가능한 속성은 POSIX 옵션 구현에 따라 달라집니다.
예제
모든 속성에 관한 정보를 나열하려면, 다음과 같이 입력하십시오.
attribute
출력은 다음과 유사합니다.
attr obj_addr type state stack scope prio sched p-shar
$a1 0x200035c8 mutex valid no
$a2 0x20003628 cond valid no
$a3 0x200037c8 thr valid 57344 sys 126 other
$a4 0x200050f8 thr valid 57344 pro 126 other
속성 1과 3에 관한 정보를 나열하려면 다음과 같이 입력하십시오.
attribute 1 3
출력은 다음과 유사합니다.
attr obj_addr type state stack scope prio sched p-shar
$a1 0x200035c8 mutex valid no
$a3 0x200037c8 thr valid 57344 sys 126 other
dbx 명령에 대해서는 condition 부속 명령, mutex 부속 명령, print 부속 명령, thread 부속 명령을 참조하십시오.
AIX Version 4.3 General Programming Concepts: Writing and Debugging Programs의 Creating Threads, Using Mutexes 및 Using Condition Variables도 참조하십시오.
call 부속 명령 : call Procedure ( [ Parameters ] )
call 부속 명령은 Procedure 매개변수에 지정된 프로시듀어를 수행합니다. 리턴 코드는 인쇄되지 않습니다. 매개변수를 지정하면 매개변수는 수행 중인 프로시듀어로 전달됩니다.
예제
dbx를 수행하는 중에 명령을 호출하려면, 다음과 같이 입력하십시오.
(dbx) call printf("hello")
hello
printf가 성공적으로 리턴합니다.
case 부속 명령 : case [ default | mixed | lower | upper ]
case 부속 명령은 dbx 디버그 프로그램이 기호를 해석하는 방법을 변경합니다. 기호의 디폴트 처리 방법은 현재 언어에 따라 다릅니다. 현재 언어가 C, C++이거나 정의되지 않았으면, 기호는 대문자로 변환되지 않습니다. 현재 언어가 FORTRAN 또는 Pascal이면, 기호는 소문자로 변환됩니다. 기호가 현재 언어와 일치하지 않는 방법으로 해석되어야 하는 경우, 이 부속 명령을 사용하십시오. 매개변수 없이 case 부속 명령을 입력하면 현재 케이스 모드가 표시됩니다.
플래그
default : 현재 언어로 바뀝니다.
mixed : 실제 나타나는 대로 기호를 해석합니다.
lower : 기호를 소문자로 해석합니다.
upper : 기호를 대문자로 해석합니다.
예제
현재 케이스 모드를 표시하려면 다음과 같이 입력하십시오.
case : 실제로 나타나는 대로 기호를 해석하도록 dbx를 지시하려면 다음과 같이 입력하십시오.
case mixed : 기호를 대문자로 해석하도록 dbx를 지시하려면 다음과 같이 입력하십시오.
case upper : 변수의 대소문자 변환을 참조하십시오.
catch 부속 명령 : catch [ SignalNumber | SignalName ]
catch 부속 명령은 신호가 응용프로그램으로 전송되기 전에 지정된 신호 트랩을 시작합니다. 이 부속 명령은 디버그되고 있는 응용프로그램이 인터럽트와 같은 신호를 처리할 때 유용합니다. 트랩될 신호는 각각 SignalNumber 또는 SignalName 매개변수를 사용하여 번호 또는 이름으로 지정할 수 있습니다. 신호 이름은 대소문자를 구별하지 않으며 SIG 접두어는 선택적입니다. SignalNumber 또는 SignalName 매개변수 중 아무것도 지정하지 않으면, 디폴트로 모든 신호(SIGHUP, SIGCLD, SIGALARM 및 SIGKILL 신호는 제외)가 트랩됩니다. 아무 인수도 지정하지 않으면, 찾고자 하는 현재 신호 리스트가 표시됩니다.
예제
dbx가 찾고자 하는 현재 신호 리스트를 표시하려면 다음과 같이 입력하십시오.
catch
신호 SIGALARM을 트랩하려면 다음과 같이 입력하십시오.
catch SIGALARM
ignore 부속 명령 및 신호 처리를 참조하십시오.
clear 부속 명령 : clear SourceLine
clear 부속 명령은 주어진 소스 행에서 모든 정지(stop)를 제거합니다. SourceLine 매개변수는 두 가지 형식으로 지정할 수 있습니다.
정수로 지정
:(콜론)과 정수 앞에 오는 파일 이름 문자열로 지정
예제
19 행에서 중단점을 제거하려면 다음과 같이 입력하십시오.
clear 19
cleari 부속 명령 및 delete 부속 명령
(AIX General Programming Concepts: Writing and Debugging Programs Setting and Deleting Breakpoints를 참조하십시오.)
cleari 부속 명령 : cleari Address
cleari 부속 명령은 Address 매개변수가 지정한 주소에서 모든 중단점을 지웁니다.
예제
주소 0x100001b4에서 중단점 설정을 제거하려면 다음과 같이 입력하십시오.
cleari 0x100001b4
main() 프로시듀어 주소에서 중단점 설정을 제거하려면 다음과 같이 입력하십시오.
cleari &main
condition 부속 명령 : condition [ wait | nowait | ConditionNumber ... ]
condition 부속 명령은 하나 이상의 조건 변수에 대한 정보를 표시합니다. 하나 이상의 ConditionNumber 매개변수가 주어지면, condition 부속 명령은 지정된 조건 변수에 대한 정보를 표시합니다. 플래그나 매개변수를 지정하지 않으면, condition 부속 명령은 모든 조건 변수를 나열합니다.
각 조건에 대해 나열되는 정보는 다음과 같습니다.
- cv $c ConditionNumber 형식으로 조건 변수의 기호 이름을 나타냅니다.
- obj_addr 조건 변수의 메모리 주소를 나타냅니다.
- num_wait 조건 변수에서 대기중인 thread의 갯수를 나타냅니다.
- waiters 조건 변수에서 대기중인 사용자 thread를 나열합니다.
- 주: dbx 디버그 프로그램의 print 부속 명령은 기호 조건 변수 이름을 식별하여 해당 오브젝트 상태를 표시하는 데 사용할 수 있습니다.
- wait 대기중인 thread가 있는 조건 변수를 표시합니다.
- nowait 대기중인 thread가 없는 조건 변수를 표시합니다.
예제
모든 조건 변수에 관한 정보를 표시하려면 다음과 같이 입력하십시오.
condition
대기중인 thread가 있는 모든 조건 변수에 관한 정보를 표시하려면 다음과 같이 입력하십시오.
condition wait
조건 변수 3에 관한 정보를 표시하려면 다음과 같이 입력하십시오.
condition 3
출력은 다음과 유사합니다.
cv obj_addr num_wait waiters
$c3 0x20003290 0
attribute 부속 명령, mutex 부속 명령, print 부속 명령, thread 부속 명령을 참조하십시오.
(AIX Version 4.3 General Programming Concepts: Writing and Debugging Programs의 Using Condition Variables도 참조하십시오.)
cont 부속 명령 : cont [ SignalNumber | SignalName ]
cont 부속 명령은 프로그램이 종료되거나 다른 중단점에 도달할 때까지 현재 정지점에 있는 응용프로그램을 계속해서 실행합니다. 신호를 지정하면, 프로그램은 SignalNumber 매개변수에 지정된 숫자나 SignalName 매개변수에 지정된 이름에 의해 그 신호를 받은 것으로 간주하고 실행을 계속합니다. 신호 이름은 대소문자를 구분하지 않으며 SIG 접두어는 선택적입니다. 신호가 지정되지 않으면, 프로그램은 중단되지 않았던 것처럼 실행을 계속합니다.
예제
현재 정지점에서 프로그램 실행을 계속하려면 다음을 입력하십시오.
cont
SIGQUIT 신호를 받은 것처럼 프로그램 실행을 계속하려면 다음을 입력하십시오.
cont SIGQUIT
dbx 명령에 대해서는 detach부속 명령, dbx 명령에 대해서는 goto 부속 명령, dbx 명령에 대해서는 next 부속 명령, dbx 명령에 대해서는 skip 부속 명령, dbx 명령에 대해서는 step 부속 명령을 참조하십시오.
delete 부속 명령 : delete { Number ... | all }
delete 부속 명령은 응용프로그램에 설명되어 있는 추적 및 정지를 해제합니다. 해제될 추적 및 정지는 Number 매개변수에 의해 지정될 수 있으며, 모든 추적 및 정지는 all 플래그를 사용하여 해제될 수 있습니다. dbx 프로그램별로 추적 및 정지에 연관된 숫자를 표시하려면 status 부속 명령을 사용하십시오.
all 모든 추적 및 정지를 해제합니다.
예제
응용프로그램에서 모든 추적 및 정지를 해제하려면, 다음을 입력하십시오.
delete all
이벤트 번호 4에 대한 추적 및 정지를 해제하려면, 다음을 입력하십시오.
delete 4
clear 부속 명령, cleari 부속 명령, status 부속 명령 및 AIX 버전 4.3 일반 프로그래밍 개념: 프로그램 작성 및 디버깅에 있는 중단점 설정 및 해제를 참조하십시오.
detach 부속 명령 : detach [ SignalNumber | SignalName ]
detach 부속 명령은 응용프로그램의 실행을 계속하고 디버그 프로그램을 종료합니다. 신호는 다음의 두 가지 방법 가운데 한가지로 지정될 수 있습니다.
- SignalName 매개변수를 사용한 이름
- SignalNumber 매개변수를 사용한 숫자
신호 이름은 대소문자를 구분하지 않으며 SIG 접두어는 선택적입니다.
신호를 지정하면, 프로그램은 그 신호를 받은 것으로 간주하고 실행을 계속합니다. 신호를 지정하지 않으면, 프로그램은 정지가 발생하지 않았던 것처럼 실행을 계속합니다.
예제
응용프로그램의 실행을 계속하고 dbx를 종료하려면 다음을 입력하십시오.
detach
SIGREQUEST 신호를 받은 것처럼 dbx를 종료하고 응용프로그램의 실행을 계속하려면, 다음을 입력하십시오.
detach SIGREQUEST
dbx 디버그 프로그램 사용을 참조하십시오.
display memory 부속 명령 : { Address,Address/ | Address/ [ Count ] } [ Mode ] [ >File ]
display memory 부속 명령에는 명령을 초기화하는 키워드가 없으며 다음과 같은 요인으로 제어되는 메모리의 일부분을 표시합니다.
표시되는 메모리 범위는 다음 중의 하나를 지정하면 제어됩니다.
두 개의 Address 매개변수. 그러면 두 주소간의 모든 행이 표시됩니다.
시작점을 나타내는 하나의 Address 매개변수와, 그 Address로부터 표시되는 행의 갯수를 결정하는 Count.
앞에 &(앰퍼샌드)를 가진 이름으로 기호 주소를 지정하십시오. 주소는 다른 주소 및 연산자 +(더하기 부호), -(빼기 부호), *로 이루어진 표현식이 될 수 있습니다. 괄호 안에 들어 있는 표현식은 주소로 해석합니다.
메모리를 표시하는 형식은 Mode 매개변수가 제어합니다. Mode 매개변수의 디폴드는 현재 모드입니다. Mode의 초기값은 X입니다. 가능한 모드는 다음과 같습니다.
- b 8진수로 바이트를 인쇄합니다.
- c 문자로 바이트를 인쇄합니다.
- d 십진수로 축약형 단어를 인쇄합니다.
- D 십진수로 긴 단어를 인쇄합니다.
- f 단일 정밀도의 실수를 인쇄합니다.
- g 배정밀도 실수를 인쇄합니다.
- h 16진수로 바이트를 인쇄합니다.
- i 기계 명령어를 인쇄합니다.
- lld 8비트의 부호가 있는 십진수를 인쇄합니다.
- llu 8비트의 부호가 없는 십진수를 인쇄합니다.
- llx 8비트의 부호가 없는 16진수를 인쇄합니다.
- llo 8비트의 부호가 없는 8진수를 인쇄합니다.
- o 8진수로 축약형 단어를 인쇄합니다.
- O 8진수로 긴 단어를 인쇄합니다.
- q 확장된 정밀도를 가진 부동 소수점 수를 인쇄합니다.
- s 널(null) 바이트로 종료되는 문자열을 인쇄합니다.
- x 16진수로 축약형 단어를 인쇄합니다.
- X 16진수로 긴 단어를 인쇄합니다.
플래그
>File 지정된 파일로 출력을 재지정합니다.
예제
주소 0x3fffe460에서 16진수 문자열에 있는 메모리 내용 중 긴 단어 하나를 표시하려면 다음과 같이 입력하십시오.
0x3fffe460 / X
변수 y에서 시작하는 메모리 2바이트의 내용을 문자로 나타내려면 다음을 입력하십시오.
&y / 2c
FORTRAN 문자열 a_string에서 6-8번째 요소를 표시하려면 다음과 같이 입력하십시오.
&a_string + 5, &a_string + 7/c
(AIX General Programming Concepts: Writing and Debugging Programs Examining Memory Addresses를 참조하십시오.)
down 부속 명령 : down [ Count ]
down 부속 명령은 현재의 함수를 Count 레벨 번호 아래로 이동시킵니다. 현재 함수는 이름을 분석하는 데 사용됩니다. Count 매개변수에 대한 디폴트는 1입니다.
예제
스택을 한 레벨 아래로 이동하려면 다음과 같이 입력하십시오.
down
스택을 세 레벨 아래로 이동하려면 다음과 같이 입력하십시오.
down 3
(up 부속 명령, where 부속 명령, AIX General Programming Concepts: Writing and Debugging Programs Displaying a Stack Trace를 참조하십시오.)
dump 부속 명령 : dump [ Procedure ] [ >File ]
dump 부속 명령은 지정된 프로시듀어 내의 모든 변수 이름과 값을 표시합니다. Procedure 매개변수는 .(점)이며, 모든 사용 중에 있는 변수가 표시됩니다. Procedure 매개변수를 지정하지 않으면, 현재 프로시듀어가 사용됩니다. >File 플래그를 사용하면 출력은 지정된 파일로 재지정됩니다.
>File 지정된 파일로 출력을 재지정합니다.
예제
현재 프로시듀어에 있는 변수 이름과 값을 표시하려면 다음과 같이 입력하십시오.
dump
add_count 프로시듀어에 있는 변수 이름과 값을 표시하려면 다음과 같이 입력하십시오.
dump add_count
현재 프로시듀어에 있는 변수 이름과 값을 var.list 파일로 재지정하려면 다음과 같이 입력하십시오.
dump > var.list
(AIX General Programming Concepts: Writing and Debugging Programs Displaying and Modifying Variables를 참조하십시오.)
edit 부속 명령 : edit [ Procedure | File ]
edit 부속 명령은 지정된 파일에서 편집기를 실행시킵니다. 파일은 File 매개변수 또는 Procedure 매개변수를 지정하여 지정할 수 있으며, 여기서 편집기는 해당 프로시듀어가 포함되어 있는 파일에서 호출됩니다. 파일을 지정하지 않으면, 현재 소스 파일에서 편집기가 실행됩니다. 디폴트는 vi 편집기입니다. EDITOR 환경 변수를 원하는 편집기의 이름으로 재설정하여 디폴트를 변경할 수 있습니다.
예제
현재 소스 파일에서 편집기를 시작하려면 다음과 같이 입력하십시오.
edit
main.c 파일에서 편집기를 시작하려면 다음과 같이 입력하십시오.
edit main.c
do_count() 프로시듀어가 있는 파일에서 편집기를 시작하려면 다음과 같이 입력하십시오.
edit do_count
list 부속 명령, vi 또는 vedit 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Changing the Current File or Procedure 및 Displaying the Current File도 참조하십시오.
file 부속 명령 : file [ File ]
file 부속 명령은 현재 소스 파일을 File 매개변수에 의해 지정된 파일로 변경합니다. 그 파일에는 기록을 하지 않습니다. File 매개변수에 파일에 대한 전체 경로 이름을 지정할 수 있습니다. File 매개변수에 경로가 지정되어 있지 않으면, dbx 프로그램은 사용 경로를 탐색하여 파일을 찾으려고 합니다. File 매개변수를 지정하지 않으면, file 부속 명령은 현재 소스 파일의 이름을 표시합니다. 경로를 알 수 있는 경우, file 부속 명령은 파일의 전체 또는 상대 경로도 표시합니다.
예제
현재의 소스 파일을 main.c 파일로 변경하려면 다음과 같이 입력하십시오.
file main.c
현재 소스 파일 이름을 표시하려면, 다음과 같이 입력하십시오.
File
func 부속 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Changing the Current File or Procedure 및 Displaying the Current File도 참조하십시오.
func 부속 명령 : func [ Procedure ]
func 부속 명령은 현재의 함수를 Procedure 매개변수에 지정된 프로시듀어나 함수로 변경합니다. Procedure 매개변수를 지정하지 않으면, 디폴트 현재 함수가 표시됩니다. 현재 기능을 내재적으로 변경하면 현재 소스 파일은 새로운 함수가 포함된 파일로 변경됩니다. 이름 해석에 사용된 현재 유효범위도 변경됩니다.
예제
현재 함수를 do_count 프로시듀어로 변경하려면 다음과 같이 입력하십시오.
func do_count
현재 함수 이름을 표시하려면, 다음과 같이 입력하십시오.
func
file 부속 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Changing the Current File or Procedure도 참조하십시오.
goto 부속 명령 : goto SourceLine
goto 부속 명령은 지정된 소스 행이 다음에 수행되도록 합니다. 일반적으로, 소스 행은 현재 소스 행과 동일한 함수 내에 들어 있어야 합니다. 이 제한사항을 대체하려면 set 부속 명령에 $unsafegoto 플래그를 사용하십시오.
예제
다음 행이 행 6에서 실행되도록 변경하려면 다음과 같이 입력하십시오.
goto 6
cont 부속 명령, gotoi 부속 명령 및 set 부속 명령을 참조하십시오.
gotoi 부속 명령 : gotoi Address
gotoi 부속 명령은 프로그램 주소를 Address 매개변수가 지정한 주소로 변경합니다.
예제
주소를 0x100002b4로 변경하려면 다음과 같이 입력하십시오.
gotoi 0x100002b4
goto 부속 명령을 참조하십시오.
help 부속 명령 : help [ Subcommand | Topic ]
help 부속 명령은 지정한 매개변수에 따라 dbx 부속 명령 또는 주제에 대한 도움말 정보를 표시합니다. help 부속 명령을 Subcommand 매개변수와 함께 입력하면 구문 명령과 지정된 부속 명령에 대한 설명이 표시됩니다. help 부속 명령을 Topic 매개변수와 함께 입력하면 지정된 주제에 대한 설명이 표시됩니다. 다음 주제가 사용 가능합니다.
- startup dbx 시동 옵션을 나열합니다.
- execution 프로그램 실행과 관련된 dbx 부속 명령을 나열합니다.
- breakpoints 중단점 및 추적과 관련된 dbx 부속 명령을 나열합니다.
- files 소스 파일에 액세스하기 위한 dbx 부속 명령을 나열합니다.
- data 프로그램 변수와 데이타에 액세스하기 위한 dbx 부속 명령을 나열합니다.
- machine 기계 수준 디버깅을 위한 dbx 부속 명령에 대한 설명을 나열합니다.
- environment dbx 구성설정 및 환경을 위한 dbx 부속 명령을 나열합니다.
- threads thread 관련 오브젝트에 액세스하기 위한 dbx 부속 명령을 나열합니다.
- expressions dbx 표현식 구문과 연산자를 설명합니다.
- scope dbx가 유효범위가 다른 이름을 어떻게 결정하는지를 설명합니다.
- set_variables 사용법 설명과 함께 dbx 디버그 변수를 나열합니다.
- usage 간략한 설명과 함께 일반 dbx 부속 명령을 나열합니다.
예제
사용 가능한 dbx 부속 명령과 주제를 모두 나열하려면 다음과 같이 입력하십시오.
help
dbx 부속 명령 리스트에 대한 설명을 표시하려면 다음과 같이 입력하십시오.
help list
dbx 주제 set_variables에 대한 설명을 표시하려면 다음과 같이 입력하십시오.
help set_variables
ignore 부속 명령 : ignore [ SignalNumber | SignalName ]
ignore 부속 명령은 신호가 응용프로그램으로 전송되기 전에 지정된 신호의 트랩을 정지합니다. 이 부속 명령은 디버그되고 있는 응용프로그램이 인터럽트와 같은 신호를 처리할 때 유용합니다. 다음 사항이 트랩되는 신호를 지정합니다.
SignalNumber 매개변수를 동반한 숫자.
SignalName 매개변수를 동반한 이름.
신호 이름은 대소문자를 구분하지 않습니다. SIG 접두어는 생략 가능합니다.
SignalNumber 또는 SignalName 매개변수 중 아무것도 지정하지 않으면, 디폴트로 SIGHUP, SIGCLD, SIGALRM 및 SIGKILL 신호를 제외한 모든 신호가 트랩됩니다. dbx 디버그 프로그램은 SIGTRAP 신호가 디버깅되고 있는 프로그램이 아닌 다른 외부의 프로세스에서 발생한 것일 경우에는 무시할 수 없습니다. 아무 인수도 지정하지 않으면, 현재 무시된 신호의 리스트가 표시됩니다.
예제
dbx가 응용프로그램으로 송신된 제한시간 초과 신호를 무시하도록 하려면 다음과 같이 입력하십시오.
ignore alrm
catch 부속 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Handling Signals를 참조하십시오.
list 부속 명령 : list [ Procedure | SourceLine-Expression [ ,SourceLine-Expression ] ]
list 부속 명령은 소스 파일 중 지정된 행을 표시합니다. 표시된 행 수는 두 가지 중 한가지 방식으로 지정됩니다.
- Procedure 매개변수를 사용한 프로시져 지정. 이 경우, list 부속 명령은 지정된 프로시듀어가 시작되기 전에 창의 크기만큼 여러 행을 보여줍니다.
- SourceLine-Expression 매개변수를 사용하여 소스의 시작 행과 종료 행의 번호. SourceLine-Expression 매개변수는 +(더하기 부호)나 -(빼기 부호), 그리고 정수로 되어 있는 유효 행 번호로 구성되어야 합니다. 또한, $(달러 기호)인 SourceLine을 사용하여 현재 행 번호를 표시하고, @인 SourceLine을 사용하여 나열되는 다음 행 번호를 표시할 수도 있습니다. 그러면 지정된 최초 행 번호에서부터 지정된 두번째 행 번호에 이르기까지 모든 행이 표시됩니다. 두번째 소스 행이 생략된 경우, 첫번째 행만 출력됩니다.
list 부속 명령이 매개변수 없이 사용되면, 현재 소스 행에서부터 $listwindow에 지정된 행 만큼이 인쇄됩니다.
디폴트로 나열되는 행 번호를 변경하려면 특별한 디버그 프로그램 변수인 $listwindow를 사용자가 원하는 행 번호로 설정하십시오. 처음에는 $listwindow는 10으로 설정됩니다.
예제
현재 파일에서 행 1에서 10까지 나열하려면 다음과 같이 입력하십시오.
list 1,10
main 프로시듀어 근방의 10이나 $listwindow 행을 나열하려면 다음과 같이 입력하십시오.]
list main
현재 행 근방의 11행을 나열하려면, 다음과 같이 입력하십시오.
list $-5,$+5
SourceLineExpression 표현식에서는 덧셈 및 뺄셈을 이용한 간단한 정수식을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
(dbx) list $
4 {
(dbx) list 5
5 char i = '4';
(dbx) list sub
23 char *sub(s,a,k)
24 int a;
25 enum status k; . . .
(dbx) move
25
(dbx) list @ -2
23 char *sub(s,a,k)
edit 부속 명령, listi 부속 명령 및 move 부속 명령을 참조하십시오. AIX General Programming Concepts: Writing and Debugging Programs Displaying the Current File을 참조하십시오.
listi 부속 명령 : listi [ Procedure | at SourceLine | Address [ , Address ] ]
listi 부속 명령은 소스 파일에 있는 명령어 세트를 표시합니다. 표시된 명령은 다음과 같이 지정됩니다.
Procedure 매개변수 제공. 여기서 listi 부속 명령은 지정된 프로시듀어 시작시부터 리스트 창이 채워질 때까지 명령을 나열합니다.
at SourceLine 플래그 사용. 여기서, listi 부속 명령은 지정된 소스 행에서 시작하는 명령을 표시하며 리스트 창이 채워질 때까지 계속 표시합니다. SourceLine 변수는 정수 또는 뒤에 콜론(:)과 정수가 붙는 파일 이름 문자열로 지정할 수 있습니다.
Address 매개변수를 사용하여 시작 및 종료 주소 지정하면, 두 주소 사이의 모든 명령이 표시됩니다.
listi 부속 명령을 플래그나 매개변수 없이 사용하면, 다음 $listwindow 명령이 표시됩니다. 현재 리스트 창의 크기를 변경하려면, set $listwindow=Value 부속 명령을 사용하십시오.
역어셈블리 모드
dbx 프로그램은 POWER 또는 PowerPC 구조에 대한 명령을 역어셈블할 수 있습니다. 디폴트 모드에서는 dbx 프로그램이 수행 중인 구조에 대한 명령을 표시합니다.
dbx 명령에 대한 set 부속 명령의 $instructionset 및 $mnemonics 변수를 사용하여 디폴트 역어셈블 모드를 대체할 수 있습니다. 자세한 정보는 dbx 명령의 set 부속 명령을 참조하십시오.
플래그
at SourceLine 나열하기 위해 시작 소스 행을 지정합니다.
예제
다음 10이나, $listwindow, 명령을 나열하려면 다음과 같이 입력하십시오.
listi
소스 행 10에 있는 기계 명령어를 나열하려면 다음과 같이 입력하십시오.
listi at 10
파일 sample.c에 있는 소스 행 5에서 시작하는 기계 명령어를 나열하려면 다음과 같이 입력하십시오.
listi at "sample.c":5
주소 0x10000400와 0x10000420 사이에 있는 명령을 나열하려면 다음과 같이 입력하십시오.
listi 0x10000400, 0x10000420
list 부속 명령 및 set 부속 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Debugging at the Machine Level with dbx도 참조하십시오.
map 부속 명령 : map [ > File ]
map 부속 명령은 응용프로그램의 각 로드 부분에 대한 특징을 표시합니다. 이 정보에는 각 로드 모듈의 이름, 텍스트 기점, 텍스트 길이, 데이타 기점 및 데이타 길이가 포함되어 있습니다.
플래그
>File 지정된 파일로 출력을 재지정합니다.
AIX General Programming Concepts: Writing and Debugging Programs Debugging at the Machine Level with dbx를 참조하십시오.
move 부속 명령 : move SourceLine
move 부속 명령은 표시할 다음 행을 SourceLine 매개변수가 지정한 행으로 변경합니다. 이 부속 명령은 @(at 기호) 변수의 값을 변경합니다.
SourceLine 변수는 :(콜론)과 정수가 뒤에 붙는 파일 이름 문자열로 또는 정수로 지정할 수 있습니다.
예제
나열할 다음 행을 12 행으로 변경하려면 다음과 같이 입력하십시오.
move 12
나열할 다음 행을 sample.c 파일에 있는 5 행으로 변경하려면 다음과 같이 입력하십시오.
move "sample.c":5
list 부속 명령을 참조하십시오. AIX General Programming Concepts: Writing and Debugging Programs Displaying the Current를 참조하십시오.
multproc 부속 명령 : multproc [ on | parent | child | off ]
multproc 부속 명령은 분기실행되는 프로세스가 작성될 때 dbx 디버그 프로그램의 동작을 지정합니다. on 플래그는 분기실행의 하위 경로를 디버그하기 위해 새로운 dbx 세션을 작성하도록 지정하는 데 사용됩니다. 원래 dbx는 상위 경로의 디버그를 계속합니다. 상위 및 하위 플래그는 다음에 분기할 단일 경로를 지정하는 데 사용됩니다. off를 제외한 모든 플래그는 dbx가 실행된 프로세스를 따를 수 있도록 합니다. off 플래그는 다중 프로세스 디버깅을 사용 불가능하게 합니다. 플래그를 지정하지 않으면, multproc 부속 명령은 다중 프로세스 디버깅의 현재 상태를 리턴합니다.
dbx 프로그램은 다중 프로세스 디버깅을 위해 Xwindows를 사용합니다. dbx 프로그램은 다중 프로세스에 필요한 만큼의 창을 엽니다. 각 하위 창의 제목은 하위 프로세스의 프로세스 ID(pid)입니다. 프로세스간을 전환하려면, Xwindows 처리 기법을 사용하여 dbx 세션이 표시된 창을 활성화하십시오. 시스템에 Xwindows 지원이 없으면, 디버그가 분기실행할 때 경고 메시지가 표시되며 dbx 프로그램은 상위 프로세스의 디버그만을 계속합니다. 다중 프로세스 디버깅은 다음과 같은 이유로 성공하지 못할 수도 있습니다.
- dbx 프로그램이 Xwindows 환경에서 수행되지 않는 경우. Xwindows는 수행되지만 dbx $xdisplay 전역 변수가 유효하지 않은 표시장치 이름으로 설정된 경우. $xdisplay 변수는 쉘 DISPLAY 환경 변수로 초기설정됩니다. set Name=Expression dbx 부속 명령을 사용하여 표시장치 이름을 변경할 수 있습니다. /tmp 디렉토리에서 디버깅 프로그램에 대한 읽기 및 쓰기 액세스 권한이 허용되지 않는 경우. dbx 프로그램은 Xwindow 환경을 제어할 때 이 디렉토리에 적은 공간을 필요로 합니다.
- 시스템이 새로운 Xwindow를 수용할 자원을 충분히 가지고 있지 못한 경우. $xdisplay가 원격 표시장치로 설정되면, 사용자는 새로 작성된 Xwindow를 보지 못할 수도 있습니다. $xdisplay 설정이 올바르지 못하면, Xwindows 또는 다른 시스템 자원이 장애의 원인을 알려줍니다. dbx 프로그램은 서로 다른 장애 유형을 구별하지 못하지만, 부속 명령이 실패했을 때 다음과 같은 메세지를 수신합니다. Warning: dbx subcommand multiproc fails. dbx continued with multproc disabled. 새로 작성된 창을 사용자 정의로 구성하려면 .Xdefaults 파일에 있는 dbx_term 응용프로그램 이름으로 정의할 수 있습니다.
플래그
on 다중 프로세스 디버깅이 가능합니다.
off 다중 프로세스 디버깅이 불가능합니다.
예제
다중 프로세스 디버깅의 현재 상태를 점검하려면, 다음과 같이 입력하십시오.
multproc
다중 프로세스 디버깅을 사용하려면, 다음과 같이 입력하십시오.
multproc on
다중 프로세스 디버깅을 사용 불가능하게 하려면, 다음과 같이 입력하십시오.
multproc off
screen 부속 명령과 fork 서브루틴을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Debugging Programs Involving Multiple Processes도 참조하십시오.
mutex 부속 명령 : mutex [ lock | unlock | thnum | utid | MutexNumber ... ]
mutex 부속 명령은 mutex에 대한 정보를 표시합니다. MutexNumber 매개변수가 제공되면, mutex 부속 명령은 지정된 mutex에 대한 정보를 표시합니다. 플래그나 매개변수를 지정하지 않으면, mutex 부속 명령은 모든 mutex에 대한 정보를 표시합니다.
각 mutex에 나열되는 정보는 다음과 같습니다.
- mutex $m MutexNumber 양식으로 mutex 기호 이름을 나타냅니다.
- type 다음과 같은 mutex 유형을 나타냅니다. non-rec(비순환), recursi(순환) 또는 fast. obj_addr mutex의 메모리 주소를 나타냅니다.
- lock mutex의 잠금 상태를 나타냅니다. mutex가 잠겨 있으면 yes, 잠겨 있지 않으면 no입니다.
- owner mutex가 잠금 상태인 경우에 mutex를 갖는 사용자 thread의 기호 이름을 나타냅니다.
- blockers 이 mutex 변수에 블록화되어 있는 사용자 thread를 나열합니다.
주: dbx 디버그 프로그램의 print 부속 명령은 기호 mutex 이름을 인지하며, 이 부속 명령을 해당 오브젝트 상태를 표시하는 데 사용할 수 있습니다.
- lock 잠금 상태인 mutex에 관한 정보를 표시합니다.
- unlock 잠금 상태가 아닌 mutex에 관한 정보를 표시합니다.
- thnum 특정 thread가 보유하는 모든 mutex에 대한 정보를 표시합니다.
- utid 사용자 thread id가 주어진 사용자 thread id와 일치하는 사용자 thread가 보유하는 모든 mutex에 대한 정보를 표시합니다.
예제
모든 mutex에 관한 정보를 표시하려면 다음과 같이 입력하십시오.
mutex
잠금 상태인 모든 mutex에 관한 정보를 표시하려면 다음과 같이 입력하십시오.
mutex lock
mutex 번호 4, 5, 6에 관한 정보를 표시하려면 다음과 같이 입력하십시오.
mutex 4 5 6
출력은 다음과 유사합니다.
mutex obj_addr type lock owner blockers
$m4 0x20003274 non-rec no
$m5 0x20003280 recursi no
$m6 0x2000328a fast no
thread 1이 보유하는 모든 mutex에 대한 정보를 표시하려면 다음을 입력하십시오.
mutex thnum 1
사용자 thread id가 0x0001인 thread가 보유하는 모든 mutex에 대한 정보를 표시하려면 다음을 입력하십시오.
mutex utid 0x0001
attribute 부속 명령, condition 부속 명령, print 부속 명령, thread 부속 명령을 참조하십시오.
또한, AIX Version 4.3 General Programming Concepts: Writing and Debugging Programs의 Using Mutexes도 참조하십시오.
next 부속 명령 : next [ Number ]
next 부속 명령은 소스의 다음 행까지 응용프로그램을 수행합니다. Number 매개변수는 next 부속 명령이 실행될 횟수를 지정합니다. Number 매개변수를 지정하지 않으면, next는 한 번만 수행됩니다.
복수의 thread 응용프로그램에서 next 부속 명령을 수행하면, 모든 사용자 thread는 조작중에 수행되지만 프로그램은 수행중인 thread가 지정된 소스 행에 도달할 때까지 계속 실행됩니다. thread만이 수행되도록 하려면, set 부속 명령을 사용하여 $hold_next 변수를 설정하십시오. 이 변수를 설정하면 수행중인 thread는 블록화된 thread 중 하나가 보유중인 잠금을 기다릴 수 있기 때문에 교착상태(deadlock)가 발생할 수 있습니다.
예제
다음 소스 행까지 실행을 계속하려면 다음과 같이 입력하십시오.
next
현재 소스 행 다음의 세 번째 소스 행까지 실행을 계속하려면 다음과 같이 입력하십시오.
next 3
cont 부속 명령, goto 부속 명령, nexti 부속 명령, set 부속 명령 및 step 부속 명령을 참조하십시오.
nexti 부속 명령 : nexti [ Number ]
nexti 부속 명령은 다음 명령까지 응용프로그램을 수행합니다. Number 매개변수는 nexti 부속 명령이 수행될 횟수를 지정합니다. Number 매개변수를 지정하지 않으면, nexti는 한 번만 수행됩니다.
복수의 thread 응용프로그램에서 nexti 부속 명령을 수행하면, 모든 사용자 thread는 조작중에 수행되지만 프로그램은 수행중인 thread가 지정된 명령에 도달할 때가지 계속 실행됩니다. thread만이 수행되도록 하려면, set 부속 명령을 사용하여 $hold_next 변수를 설정하십시오. 이 변수를 설정하면 수행 중인 thread는 블록화된 thread 중 하나가 보유중인 잠금을 기다릴 수 있기 때문에 교착상태(deadlock)가 발생할 수 있습니다.
예제
다음 기계 명령어까지 실행을 계속하려면 다음과 같이 입력하십시오.
nexti
현재 기계 명령어 다음의 세 번째 기계 명령어까지 실행을 계속하려면 다음과 같이 입력하십시오.
nexti 3
gotoi 부속 명령, next 부속 명령, set 부속 명령 및 stepi 부속 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Running a Program at the Machine Level을 참조하십시오.
print 부속 명령 : print Expression ... print Procedure ( [ Parameters ] )
print 부속 명령은 다음 중의 한 가지를 수행합니다. Expression 매개변수가 지정한 표현식 리스트의 값을 출력합니다.
Procedure 매개변수가 지정한 프로시듀어를 실행하고 해당 프로시듀어 리턴 값을 출력합니다. 매개변수는 프로시듀어로 전달됩니다.
예제
왼쪽으로 2비트 이동한 x 값과 y 값을 표시하려면 다음과 같이 입력하십시오.
print x, y << 2
인수 0과 함께 sbrk 루틴을 호출하여 리턴 값을 표시하려면 다음과 같이 입력하십시오.
print sbrk(0)
assign 부속 명령, call 부속 명령, set 부속 명령을 참조하십시오.
prompt 부속 명령 : prompt [ "String" ]
prompt 부속 명령은 dbx 명령 프롬프트를 String 매개변수가 지정한 문자열로 변경합니다.
예제
프롬프트를 dbx>로 변경하려면, 다음과 같이 입력하십시오.
prompt "dbx>"
AIX General Programming Concepts: Writing and Debugging Programs Defining a New dbx Prompt를 참조하십시오.
quit 부속 명령 : quit
quit 부속 명령은 dbx 디버깅 세션에서 수행 중인 모든 프로세스를 종료합니다.
detach 부속 명령을 참조하십시오.
registers 부속 명령 : registers [ >File ]
registers 부속 명령은 범용 레지스터, 시스템 제어 레지스터, 부동 소수점 레지스터, 현재 명령 레지스터를 표시합니다.
범용 레지스터는 $rNumber 변수가 지정하는데, 여기서 Number 매개변수는 레지스터 번호를 나타냅니다.
주: 레지스터 값을 0xdeadbeef 16진수의 값으로 설정할 수 있습니다. 0xdeadbeef 16진 값은 프로세스 초기설정시 범용 레지스터에 지정된 초기 값입니다.
부동 소숫점 레지스터는 $frNumber 변수로 표시됩니다. 디폴트로, 부동 소숫점 레지스터는 표시되지 않습니다.
부동 소숫점 레지스터를 표시하려면 unset $noflregs dbx 부속 명령을 사용하십시오.
주: 현재 thread가 커널 모드에 있는 경우에는 registers 부속 명령이 레지스터를 표시할 수 없습니다.
플래그
>File 지정된 파일로 출력을 재지정합니다.
set 부속 명령 및 unset 부속 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Using Machine Registers도 참조하십시오.
rerun 부속 명령 : rerun [ Arguments ] [ < File ] [ > File ] [ > > File ] [ 2> File ] [ 2> > File ] [ >& File ] [ > >& File ]
rerun 부속 명령은 오브젝트 파일의 실행을 시작합니다. Arguments는 명령 행 인수로서 전달됩니다. Arguments 매개변수를 지정하지 않으면, 마지막 run 또는 rerun 부속 명령의 인수가 재사용됩니다.
- <File File에서 입력을 받을 수 있도록 입력을 재지정합니다.
- >File File로 출력을 재지정합니다.
- > >File File에 재지정한 출력을 추가합니다..
- 2>File File로 표준 오류를 재지정합니다.
- 2> >File File에 재지정한 표준 오류를 추가합니다.
- >&File File로 표준 오류 및 출력을 재지정합니다.
- > >&File File에 출력 및 표준 오류를 추가합니다.
run 부속 명령을 참조하십시오.
return 부속 명령 : return [ Procedure ]
return 부속 명령은 Procedure 매개변수에 지정된 프로시듀어로 리턴될 때까지 응용프로그램을 실행합니다. Procedure 매개변수를 지정하지 않으면, 현재 프로시듀어가 리턴할 때 실행이 중단됩니다.
예제
호출 루틴으로 실행을 계속하려면 다음과 같이 입력하십시오.
return
main 프로시듀어로 실행을 계속하려면 다음과 같이 입력하십시오.
return main
rwlock 부속 명령 : rwlock [read | write | RwlockNumber....]
rwlock 부속 명령은 rwlocks에 대한 정보를 표시합니다. RwlockNumber 매개변수를 제공하면, rwlock 부속 명령은 지정된 rwlocks에 대한 정보를 표시합니다. 플래그나 매개변수를 지정하지 않으면, rwlock 부속 명령은 모든 rwlocks에 대한 정보를 표시합니다.
각 rwlock에 대해 나열되는 정보는 다음과 같습니다.
- rwl $rw RwlockNumber 형식으로 rwlock의 기호 이름을 나타냅니다.
- flag_value 플래그 값을 표시합니다.
- owner rwlock의 소유자를 나타냅니다.
- status rwlock을 보류하고 있는 사용자를 나타냅니다. 값은 읽기(판독기에 의해 보류된 경우), 쓰기(작성자에 의해 보류된 경우), 사용 가능(사용 가능한 경우)입니다.
- wsleep[#] 쓰기 상태에 있는 thread입니다. #는 쓰기 상태에 있는 thread의 총 수입니다.
- rsleep[#] 읽기 상태에 있는 thread입니다. #는 읽기 상태에 있는 thread의 총 수입니다.
- 주: dbx 디버그 프로그램의 print 부속 명령은 기호로 된 rwlock 이름을 인식하며, 해당 오브젝트의 상태를 표시하는 데 사용될 수 있습니다.
- read 상태가 읽기 모드에 있는 모든 rwlocks에 대한 정보를 표시합니다.
- write 상태가 쓰기 모드에 있는 모든 rwlocks에 대한 정보를 표시합니다.
예제
모든 rwlocks에 대한 정보를 표시하려면 다음과 같이 입력하십시오.
rwlock
출력은 다음과 유사합니다.
rwl flag_value owner status
$rwl 1 $t1 write
rsleeps[ 0]:
wsleeps[ 0]:
쓰기 모드에 있는 모든 rwlocks에 대한 정보를 표시하려면 다음을 입력하십시오.
rwlock write
출력은 다음과 유사합니다.
rwl flag_value owner status
$rwl 1 $t1 write
rsleeps[ 0]:
wsleeps[ 0]:
attribute 부속 명령, condition 부속 명령, mutex 부속 명령 및 print 부속 명령, thread 부속 명령을 참조하십시오.
run 부속 명령 : run [ Arguments ] [ <File ] [ >File ] [ > >File ] [ 2>File ] [ 2> >File ] [ >&File ] [ > >&File ]
run 부속 명령은 오브젝트 파일을 시작합니다. Arguments는 명령 행 인수로서 전달됩니다.
<File File에서 입력을 받을 수 있도록 입력을 재지정합니다.
>File File로 출력을 재지정합니다.
2>File File로 표준 오류를 재지정합니다.
> >File File에 재지정한 출력을 추가합니다.
2> >File File에 재지정한 표준 오류를 추가합니다.
>&File File로 표준 오류 및 출력을 재지정합니다.
> >&File File에 출력 및 표준 오류를 추가합니다.
예제
인수 blue 및 12를 사용하여 응용프로그램을 수행하려면, 다음과 같이 입력하십시오.
run blue 12
rerun 부속 명령을 참조하십시오.
screen 부속 명령 : screen
screen 부속 명령은 dbx 명령 상호작용을 위한 Xwindow을 엽니다. 사용자는 프로세스가 시작된 창에서 작업을 계속합니다.
screen 부속 명령은 dbx 디버그 프로그램이 Xwindows 환경에서 수행되는 동안에 수행되어야 합니다. screen 부속 명령이 Xwindow가 아닌 환경에서 실행되면, dbx 프로그램은 경고 메시지를 표시하고 screen 부속 명령이 제공되지 않은 것처럼 디버깅을 계속합니다. screen 부속 명령은 다음과 같은 상황에서는 실행되지 않을 수 있습니다.
- dbx 프로그램이 Xwindows 환경에서 수행되지 않는 경우.
Xwindows는 수행되지만 dbx 전역 변수 $xdisplay가 유효한 표시장치 이름으로 설정되지 않은 경우. $xdisplay 변수는 DISPLAY 환경 변수로 초기설정됩니다. dbx 부속 명령인 set Name=Expression은 표시장치 이름의 값을 변경합니다.
Xwindows가 수행되지만, TERM 환경 변수가 새로운 창을 호출하기 위해 설정한 명령이 유효하지 않은 경우.
/tmp 디렉토리에서 프로그램에 대한 읽기 또는 쓰기 액세스 권한을 허용하지 않을 경우. dbx 프로그램은 screen 명령이 실행될 때 이 디렉토리에서 작은 공간을 필요로 합니다.
- 시스템이 새로운 Xwindow를 수용할 만한 자원을 충분히 가지고 있지 못한 경우.
dbx 프로그램은 서로 다른 장애 유형을 구별하지 못하지만, 부속 명령이 실패했을 때 다음과 같은 메세지를 송신합니다.
Warning: dbx subcommand screen fails. dbx continues.
$xdisplay가 원격 표시장치로 설정되면, 사용자는 새로 작성된 Xwindow를 보지 못할 수도 있습니다. $xdisplay 설정이 올바르지 못하면, Xwindows 또는 다른 시스템 자원이 문제점을 보고합니다.
새로 작성되는 창을 사용자 정의로 구성하려면 .Xdefaults 파일에 있는 dbx_term 응용프로그램 이름으로 정의할 수 있습니다.
예제
dbx 명령 상호작용을 위해 Xwindow를 열려면 다음과 같이 입력하십시오.
screen
AIX General Programming Concepts: Writing and Debugging Programs Separating dbx Output From Program Output 및 AIX 버전 4 AIXwindows 프로그래밍 안내서에 있는 AIXwindows 개요를 참조하십시오.
set 부속 명령 : set [ Variable=Expression ]
set 부속 명령은 dbx 디버그 프로그램 변수의 값을 정의합니다. 값은 Expression 매개변수에 의해 지정되고 프로그램 변수는 Variable 매개변수에 의해 지정됩니다. 변수의 이름은 디버그중인 프로그램내의 변수 이름과 상충되어서는 안 됩니다. 변수는 다른 명령 내의 해당 표현식으로 확장됩니다. set 부속 명령이 인수 없이 사용되면, 현재 설정되어 있는 변수가 표시됩니다.
set 부속 명령을 사용하면 다음과 같은 변수가 설정됩니다.
- $catchbp 다음 명령이 실행되는 동안 중단점을 찾아냅니다.
- $expandunions 상이한 레코드나 공용체의 각 부분에 대한 값을 표시합니다.
- $frame 스택 추적 및 국지 변수 액세스를 위해 $frame 값에 의해 지정되어 있는 주소의 스택 프레임을 사용합니다.
- $hexchars 16진수 값으로 문자를 출력합니다.
- $hexin 16진수로 주소를 해석합니다.
- $hexints 16진수 값으로 정수를 출력합니다.
- $hexstrings 16진수로 문자 포인터를 인쇄합니다.
- $hold_next cont, next, nexti 및 step 부속 명령을 실행하는 동안 수행 중인 thread를 제외한 모든 thread를 대기시킵니다. 이 변수를 설정하면 수행 중인 thread는 블록화된 thread 중 하나가 보유중인 잠금을 기다릴 수 있기 때문에 교착상태(deadlock)가 발생할 수 있습니다.
- $ignoreload 사용자의 프로그램이 load, unload 또는 loadbind 서브루틴을 수행할 때 정지하지 않습니다.
- $instructionset 디폴트 역어셈블리 모드를 대체합니다. 다음 리스트에는 가능한 Expression 매개변수 값이 포함되어 있습니다. "default" dbx 프로그램이 수행 중인 구조를 지정합니다.
- "com" PowerPC 및 POWER 구조의 일반 교차 모드의 명령 세트를 지정합니다. dbx 프로그램의 디폴트는 PowerPC 니모닉(Mnemonic)입니다.
- "pwr" POWER 구조에 대한 명령 세트와 니모닉(Mnemonic)을 지정합니다.
- "pwrx" POWER 구조의 POWER2 구현에 대한 명령 세트와 니모닉(Mnemonic)을 지정합니다.
- "601" PowerPC 601 RISC 마이크로프로세서에 대한 명령 세트와 니모닉(Mnemonic)을 지정합니다.
- "603" PowerPC 603 RISC 마이크로프로세서에 대한 명령 세트와 니모닉(Mnemonic)을 지정합니다.
- "604" PowerPC 604 RISC 마이크로프로세서에 대한 명령 세트와 니모닉(Mnemonic)을 지정합니다.
- "ppc" 선택사항인 명령을 제외한 PowerPC 구조에 정의된 명령 세트 및 니모닉(Mnemonic)을 지정합니다. 이 명령은 PowerPC 601 RISC 마이크로프로세서를 제외한 모든 PowerPC 구현에서 사용할 수 있습니다.
- "any" 모든 유효한 PowerPC 또는 POWER 명령을 지정합니다. 중첩되는 명령 세트의 경우, 디폴트는 PowerPC 니모닉입니다.
- Expression 매개변수 값이 설정되지 않은 경우, dbx 프로그램은 디폴트 역어셈블리 모드를 사용합니다.
- $listwindow 함수의 근방에 있는 나열할 행 수와 list 부속 명령이 매개변수 없이 사용될 때 나열할 행 수를 지정합니다. 디폴트는 10행입니다.
- $mapaddrs 주소 맵핑을 시작합니다. $mapaddrs를 설정하지 않으면 주소 맵핑이 정지됩니다.
- $mnemonics 역어셈블리시에는 dbx 프로그램이 사용하는 니모닉 세트가 변경됩니다.
- "default" 지정된 명령 세트와 가장 근접하는 니모닉을 지정합니다.
- "pwr" POWER 구조에 대한 니모닉을 지정합니다.
- "ppc" 선택사항인 명령을 제외한 PowerPC 구조 책자에 정의된 니모닉을 지정합니다.
- Expression 매개변수 값이 설정되지 않은 경우, dbx 프로그램은 지정된 명령 세트와 가장 근접하는 니모닉을 사용합니다.
- $noargs 부속 명령에서 where, up, down, dump와 같은 인수를 생략합니다.
- $noflregs registers 부속 명령에서 부동 소수점 레지스터를 생략합니다.
- $octin 8진수로 주소를 해석합니다.
- $octints 8진수로 정수를 인쇄합니다.
- $repeat 입력된 명령이 없으면 이전 명령을 반복합니다.
- $sigblock 사용자 프로그램으로 신호를 블록화합니다.
- $stepignore 디버깅 정보를 사용할 수 없는 또다른 루틴을 호출하는 소스 행에서 step 명령이 수행될 때 dbx 명령의 동작을 제어합니다. 이 변수는 step 부속 명령이 디버깅 정보를 사용할 수 없는 대형 루틴으로 넘어갈 수 있도록 합니다. 다음 리스트에는 가능한 Expression 매개변수 값이 포함되어 있습니다. "function" dbx 명령에 대한 next 부속 명령의 함수를 수행합니다. 이것이 디폴트 값입니다. "module" 함수가 디버그 정보(예:시스템 라이브러리)를 사용할 수 없는 로드 모듈에 있는 경우, next 부속 명령의 함수를 수행합니다. "none" 백그라운드에서 소스 정보가 사용 가능한 명령에 도달할 때까지 dbx 명령에 대한 stepi 부속 명령 기능을 수행합니다. 그 시점에서 dbx는 실행이 정지되었던 위치를 표시합니다.
- $thcomp $thcomp가 설정되면, th- thread 명령에 의해 표시되는 정보는 압축된 형태로 표시됩니다.
- $unsafeassign assign문의 양 끝에서 엄격한 유형 검사를 중단합니다. $unsafeassign 변수가 설정되었더라도 assign문의 양 끝에는 크기가 다른 기억장치 유형이 포함되지 않을 수 있습니다.
- $unsafebounds 배열의 첨자 검사를 중단합니다.
- $unsafecall 서브루틴이나 함수 호출을 위한 인수에 대한 엄격한 유형 검사를 중단합니다.
- $unsafegoto goto 부속 명령 목적지 검사를 중단합니다.
- $vardim 경계를 모르는 상태에서 배열을 인쇄하는 경우 사용할 차원 범위를 지정합니다. 디폴트 값은 10입니다.
- $xdisplay multproc 부속 명령이나 screen 부속 명령과 함께 사용할 Xwindows 표시장치 이름을 지정합니다. 디폴트 값은 쉘 DISPLAY 변수의 값입니다.
- $unsafe 변수는 오류 발견시 dbx 디버그 프로그램의 사용을 제한합니다.
예제
나열될 디폴트 행 번호를 20으로 변경하려면 다음과 같이 입력하십시오.
set $listwindow=20
assign 부속 명령에 대한 유형 검사를 사용하지 않으려면 다음과 같이 입력하십시오.
set $unsafeassign
PowerPC 601 RISC 마이크로프로세서에 대한 기계 명령을 역어셈블하려면 다음과 같이 입력하십시오.
set $instructionset="601"
unset 부속 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Changing Print Output with Special Debug Program Variables도 참조하십시오.
set edit [vi, emacs] 또는 set -o [vi, emacs] 부속 명령
-o 또는 edit 옵션을 가진 set 부속 명령은 다음 편집 행 모드 중 하나를 작동하는 데 사용될 수 있습니다. set-o vi 또는 set edit vi 명령을 사용하면, vi 행 편집기의 입력 모드에 놓입니다. set -o emacs 또는 set edit emacs 명령을 사용하면, emacs 행 편집기의 입력 모드에 놓입니다.
예제
vi 행 편집기를 작동하려면, 다음과 같이 입력하십시오.
set-o vi 또는 set edit vi
sh 부속 명령 : sh [ Command ]
sh 부속 명령은 Command 매개변수에 지정된 명령을 실행 쉘로 전달합니다. SHELL 환경 변수는 사용될 쉘을 결정합니다. 디폴트는 sh 쉘입니다. 인수를 지정하지 않으면, 제어가 쉘로 이동합니다.
예제
ls 명령을 수행하려면 다음과 같이 입력하십시오.
sh ls
쉘로 나가려면 다음과 같이 입력하십시오.
sh
SHELL 환경 변수를 사용하려면 다음과 같이 입력하십시오.
sh echo $SHELL
AIX General Programming Concepts: Writing and Debugging Programs running shell commands from dbx를 참조하십시오.
skip 부속 명령 : skip [ Number ]
skip 부속 명령은 현재 정지점으로부터 응용프로그램의 실행을 계속합니다. Number 매개변수의 값과 동일한 수의 중단점이 생략되고 다음 중단점에 도달하거나 프로그램이 종료될 때 실행이 중단됩니다. Number 매개변수를 지정하지 않으면 디폴트는 1이 됩니다.
예제
두번째 중단점을 만날 때까지 계속 실행하려면 다음과 같이 입력하십시오.
skip 1
cont 부속 명령도 참조하십시오.
source 부속 명령 : source File
source 부속 명령은 File 매개변수가 지정한 파일로부터 dbx 부속 명령을 읽어들입니다.
예제
cmdfile 파일에서 dbx 부속 명령을 읽으려면 다음과 같이 입력하십시오.
source cmdfile
AIX General Programming Concepts: Writing and Debugging Programs Reading dbx Subcommands from a File을 참조하십시오.
status 부속 명령 : status [ >File ]
status 부속 명령은 현재 사용 중인 trace 및 stop 부속 명령을 표시합니다. > 플래그는 status 부속 명령의 출력을 File 매개변수에서 지정한 파일로 송신합니다.
플래그
>File 지정된 파일로 출력을 재지정합니다.
dbx 명령의 clear 부속 명령, delete 부속 명령, stop 부속 명령 및 trace 부속 명령을 참조하십시오.
또한, AIX General Programming Concepts: Writing and Debugging Programs Setting and Deleting Breakpoints도 참조하십시오.
step 부속 명령 : step [ Number ]
step 부속 명령은 응용프로그램의 소스 행을 수행합니다. Number 매개변수를 사용하여 실행될 행의 수를 지정하십시오. Number 매개변수를 생략하면, 디폴트는 1이 됩니다.
복수 thread 응용프로그램에서 step 부속 명령을 사용하면, 모든 사용자 thread는 조작중에 수행되지만 프로그램은 수행 중인 thread가 지정된 소스 행에 도달할 때까지 계속 실행됩니다. thread만이 수행되도록 하려면, set 부속 명령을 사용하여 $hold_next 변수를 설정하십시오. 이 변수를 설정하면 수행 중인 thread는 블록화된 thread 중 하나가 보유중인 잠금을 기다릴 수 있기 때문에 교착상태(deadlock)가 발생할 수 있습니다.
주: set 부속 명령의 $stepignore 변수를 사용하여 step 부속 명령의 동작을 제어하십시오. $stepignore 변수는 step 부속 명령이 디버깅 정보를 사용할 수 없는 대형 루틴으로 넘어갈 수 있도록 합니다.
예제
한 개의 소스 행 실행을 계속하려면, 다음과 같이 입력하십시오.
step
5개의 소스 행 실행을 계속하려면, 다음과 같이 입력하십시오.
step 5
dbx 프로그램이 한 단계인 printf 기능을 수행시키지 못하게 하려면, 다음의 예제 코드와 같이 입력하십시오.
60 printf ("hello world n");
다음과 같이 입력하십시오.
set $stepignore="function"; step
cont 부속 명령, goto 부속 명령, next 부속 명령, set 부속 명령 및 stepi 부속 명령을 참조하십시오.
stepi 부속 명령 : stepi [ Number ]
stepi 부속 명령은 응용프로그램의 명령을 수행합니다. Number 매개변수를 사용하여 실행될 명령의 수를 지정하십시오. Number 매개변수를 생략하면 디폴트는 1이 됩니다.
복수 thread 응용프로그램에서 사용될 경우, stepi 부속 명령은 수행 중인 thread만을 진행합니다. 다른 모든 사용자 thread는 정지된 채 남아 있습니다.
예제
한 개의 기계 명령 실행을 계속하려면, 다음과 같이 입력하십시오.
stepi
5개의 기계 명령 실행을 계속하려면 다음과 같이 입력하십시오.
stepi 5
gotoi 부속 명령, nexti 부속 명령, step 부속 명령을 참조하십시오.
stop 부속 명령 : stop { [Variable] [at SourceLine | in Procedure ] [ if Condition ]}
stop 부속 명령은 특정 조건이 충족되면 응용프로그램을 정지합니다. 다음과 같은 경우에 프로그램이 정지됩니다.
- if Condition 플래그를 사용할 때 Condition은 참입니다.
- in Procedure 플래그를 사용할 때 Procedure가 호출됩니다.
- Variable 매개변수를 지정하면 Variable이 변경됩니다.
- at SourceLine 플래그를 사용하면 SourceLine 행 번호에 도달합니다.
- SourceLine 변수는 :(콜론)과 정수가 뒤에 붙는 파일 이름 문자열로 또는 정수로 지정할 수 있습니다.
이러한 명령 다음에, dbx 디버그 프로그램은 사용자 명령의 결과로 만들어진 이벤트 메세지를 응답합니다. 메세지에는 명령에 대한 설명과 함께 중단점에 연관된 이벤트 ID가 들어 있습니다. 설명 구문은 사용자 명령과는 동일하지 않을 수도 있습니다. 예를 들면 다음과 같습니다.
stop in main
[1] stop in main
stop at 19 if x == 3
[2] stop at "hello.c":19 if x = 3
대괄호 안의 숫자는 중단점과 관련된 이벤트 식별자입니다. dbx 디버그 프로그램은 이벤트 번호를 각 stop 부속 명령에 연관시킵니다. 이벤트 중 하나의 결과로 프로그램이 중단되면, 현재 행과 함께 이벤트 식별자가 표시되어 어떤 이벤트가 프로그램을 정지시켰는지 알 수 있습니다. 사용자가 작성한 이벤트는 dbx가 작성한 이벤트와 합쳐져서, 이벤트 번호는 항상 순차적이지는 않을 수 있습니다.
이 번호를 보려면 status 부속 명령을 사용하십시오. status로부터의 출력을 파일로 재지정할 수 있습니다. delete 또는 clear 부속 명령을 사용하여 stop 부속 명령을 정지시키십시오.
복수 thread 응용프로그램에서 사용자 thread가 중단점과 만나게 되면 모든 사용자 thread가 정지됩니다. 아래의 예제 9와 같이, 사용자가 조건을 지정하지 않으면 소스 행이나 함수에 설정된 중단점은 행이나 함수를 실행하는 사용자 thread와 만나게 됩니다. 자동으로 조건을 지정하는 별명은 다음과 같습니다.
- bfth(Function, ThreadNumber)
- blth(SourceLine, ThreadNumber)
ThreadNumber는 thread 부속 명령이 보고한 대로의 기호로 된 thread 이름의 숫자 부분입니다(예를 들어, 5는 thread 이름 $t5의 ThreadNumber입니다). 별명은 실제로 다음에 표시된 확장된 부속 명령을 작성하는 마크로입니다.
- stopi at &Function if ($running_thread == ThreadNumber)
- stop at SourceLine if ($running_thread == ThreadNumber)
플래그
at SourceLine 행 번호를 지정합니다.
if Condition 조건을 참으로 지정합니다.
in Procedure 호출할 프로시듀어를 지정합니다.
예제
main 프로시듀어의 첫째 문장에서 실행을 정지하려면 다음과 같이 입력하십시오.
stop in main
변수 값 x가 실행 행 12에서 변경될 때 실행을 정지하려면, 다음과 같이 입력하십시오.
stop x at 12
파일 sample.c에 있는 행 5에서 실행을 정지하려면 다음과 같이 입력하십시오.
stop at "sample.c":5
dbx가 func1 내의 서브루틴을 실행할 때마다 x 값을 확인하려면, 다음과 같이 입력하십시오.
stop in func1 if x = 22
dbx가 func1을 실행할 때마다 x 값을 확인하려면 다음과 같이 입력하십시오.
stopi at &func1 if x = 22
Variable 값이 바뀔 때 프로그램을 정지하려면 다음과 같이 입력하십시오.
stop Variable
Condition이 참일 경우마다 프로그램을 정지하려면 다음과 같이 입력하십시오.
stop if (x > y) and (x < 2000)
다음 예제에서는 사용 중인 이벤트를 표시하고 삭제하는 방법을 나타냅니다.
status
[1] stop in main
[2] stop at "hello.c":19 if x = 3
delete 1
status
[2] stop at "hello.c":19 if x = 3
clear 19
status
(dbx)
delete 명령은 이벤트 식별자별로 이벤트를 삭제합니다. clear 명령은 행 번호별로 중단점을 삭제합니다.
thread $t5가 실행될 때만 func1 시작에 중단점을 위치시키려면, 다음 해당 명령 중의 하나를 입력하십시오.
stopi at &func1 if ($running_thread == 5)
또는
bfth(func1, 5)
clear 부속 명령, delete 부속 명령, stopi 부속 명령, trace 부속 명령을 참조하십시오. AIX General Programming Concepts: Writing and Debugging Programs의 Setting and Deleting Breakpoints도 참조하십시오.
stopi 부속 명령 : stopi { [Address] [at Address | in Procedure ] [ if Condition ]}
stopi 부속 명령은 지정된 위치에 정지를 설정합니다.
- ifCondition 플래그를 사용하는 경우, 조건 참이 되면 프로그램이 정지합니다.
- Address 매개변수를 사용하면, Address 내용이 변경될 때 프로그램이 정지합니다.
- at Address 플래그를 사용하면, 지정된 주소에 정지가 설정됩니다.
- e in Procedure 플래그를 사용하면, Procedure가 호출될 때 프로그램이 정지합니다.
플래그
if Condition 조건을 참으로 지정합니다.
in Procedure 호출할 프로시듀어를 지정합니다.
at Address 기계 명령 주소를 지정합니다.
예제
주소 0x100020f0에서 실행을 정지하려면 다음과 같이 입력하십시오.
stopi at 0x100020f0
주소 0x100020f0 의 내용을 변경하려면 다음과 같이 입력하십시오.
stopi 0x100020f0
주소 0x100020f0의 내용을 thread $t1이 변경할 때 실행을 정지하려면 다음과 같이 입력하십시오.
stopi 0x200020f0 if ($running_thread == 1)
stop 부속 명령도 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Debugging at the Machine Level with dbx도 참조하십시오.
thread 부속 명령 :
선택한 thread 표시 - thread { [ info ] [ - ] [ ThreadNumber ... ] } | current | run | susp | term | wait
개별 thread 선택 - thread current [ - ] ThreadNumber
thread 보류 또는 해제 - thread { hold | unhold } [ - ] [ ThreadNumber ... ]
표시된 옵션에 대한 도움말
thread {help}
thread 부속 명령은 사용자 thread를 표시하고 제어합니다.
thread 부속 명령의 첫번째 양식은 두 가지 형식으로 정보를 표시할 수 있습니다. thread 부속 명령이 th이면 표시되는 정보는 첫번째 형식입니다. thread 부속 명령이 th -이면 표시되는 정보는 두번째 형식입니다. 매개변수를 제공하지 않으면, 모든 사용자 thread에 대한 정보가 표시됩니다. 하나 이상의 ThreadNumber 매개변수를 제공하면 해당 사용자 thread에 대한 정보가 표시됩니다. thread 부속 명령이 thread를 표시하면, 현재 thread 행의 앞에는 >. 수행 중인 thread가 현재 thread와 동일하지 않으면, 그 행의 앞에는 *가 나타납니다. thread 부속 명령에 의해 두 가지 형식으로 표시되는 정보는 다음과 같습니다.
첫번째 형식의 thread 부속 명령에 의해 표시되는 정보는 다음과 같습니다.
thread 사용자 thread의 기호 이름을 $t ThreadNumber 양식으로 나타냅니다.
state-k 사용자 thread가 커널 thread에 접속되어 있는 경우, 커널 thread 상태를 나타냅니다. 각 상태는 수행 중이면 run, 대기중이면 wait, 일시중단된 경우면 susp, 종료되면 term입니다.
wchan 커널 thread가 대기 또는 정지 상태인 이벤트를 나타냅니다(사용자 thread가 커널 thread에 연결되어 있는 경우).
state-u 사용자 thread 상태입니다. 가능한 상태는 수행 중, 블록, 종료입니다.
k-tid 커널 thread 식별자를 나타냅니다(사용자 thread가 커널 thread에 연결되어 있는 경우).
mode 사용자 thread가 정지된 모드(커널 또는 사용자)임을 나타냅니다(사용자 thread가 커널 thread에 연결되어 있는 경우).
held 사용자 thread가 유지되고 있는지를 나타냅니다.
scope 사용자 thread의 경합 유효범위를 나타냅니다. 시스템이나 프로세스 경합 유효범위의 경우, 이것은 각각 sys나 pro가 됩니다.
function 사용자 thread 함수 이름을 나타냅니다.
두번째 형식의 thread 부속 명령으로 표시되는 정보는 다음과 같습니다. 디폴트로, thread 부속 명령 th -의 경우, 정보는 long 양식으로 표시됩니다.
thread 사용자 thread의 기호 이름을 $t ThreadNumber 양식으로 나타냅니다.
커널 thread 관련 정보
tid 사용자 thread 식별자입니다(사용자 thread가 커널 thread에 접속되어 있는 경우).
pri 커널 thread의 우선순위입니다.
sched 커널 thread의 스케줄링 방침입니다. 이는 스케줄링 방식에 따라 fifo는 fif, other는 oth, 라운드 로빈(round robin)은 rr로 표시됩니다.
state 사용자 thread가 커널 thread에 접속되어 있는 경우, 커널 thread 상태를 나타냅니다. 각각의 상태에 따라 실행중일 때는 run, 대기중일 때는 wait, 일시중단일 때는 susp, zombie 상태일 때는 zomb로 표시됩니다.
사용자 thread 관련 정보
tid 사용자 thread 식별자입니다.
pri userl thread의 우선순위입니다.
sched 사용자 thread의 스케줄 방침입니다. 이는 스케줄링 방식에 따라 fifo는 fif, other는 oth, 라운드 로빈(round robin)은 rr로 표시됩니다.
state 사용자 thread 상태입니다. 이는 수행 중, 작성 중, 일시중단, 블록, 수행 가능 또는 종료일 수 있습니다.
state 사용자 상태를 16진수로 나타냅니다.
flags pthread 플래그의 값을 16진수로 나타냅니다.
wchan 커널 thread가 대기 또는 정지 상태인 이벤트를 나타냅니다(사용자 thread가 커널 thread에 연결되어 있는 경우).
mode 사용자 thread가 정지된 모드(커널 또는 사용자)임을 나타냅니다(사용자 thread가 커널 thread에 연결되어 있는 경우).
held 사용자 thread가 유지되고 있는지를 나타냅니다.
scope 사용자 thread의 경합 범위를 나타냅니다. 이는 시스템 또는 프로세스 경합 범위의 경우 sys 또는 pro가 됩니다.
cancellation pending 취소가 지연중인지 여부를 나타냅니다.
state 취소의 모드 및 상태를 나타냅니다.
취소가 지연중이 아니고 상태 및 모드가 각각 작동 가능 및 지연됨이면 ed로 표시되고, 취소 상태 및 모드가 작동 가능 상태이고 비동기이면 ea로 표시되며, 모드가 작동 불능 상태이면 d로 표시됩니다.
최소가 지연중이고 취소 상태 및 모드가 각각 작동 가능 및 지연됨이면 ED로 표시되고, 취소 상태 및 모드가 작동 가능이고 비동기이면 EA로 표시되며, 모드가 작동 가능 상태가 아니면 D로 표시됩니다.
joinable thread가 결합 가능한지 여부를 나타냅니다.
boosted thread에 사용된 값을 나타냅니다.
function 사용자 thread 함수 이름을 나타냅니다.
cursig 현재 신호 값을 나타냅니다.
옵션 세트 $thcomp가 설정되면, 정보는 다음에 표시된 것과 같이 압축된 양식으로 표시됩니다.
m mode (k)ernel (u)ser
k k-state (r)unning (w)aiting (s)uspended (z)ombie
u u-state (r)unning (R)unnable (s)uspended (t)erminated
(b)locked (c)reating
h held (yes) (n)o
s scope (s)ystem (p)rocess
c cancellation not pending: (e)nabled & (d)eferred,
(e)nabled & (a)sync, (d)isabled
pending : (E)nabled & (D)eferred,
(E)nabled & (A)sync, (D)isabled
j joinable (yes) (n)o
b boosted value of boosted field in pthread structure
plk kernel thread (oth)er (fif)o (rr)-> round-robin
policy
plu user thread (oth)er (fif)o (rr)-> round-robin
policy
prk kernel thread hex number
policy
pru user thread hex number
policy
k-tid kernel thread id in hex
u-tid pthread id in hex
fl value of flags field in pthread structure in hex
sta value of state field in pthread structure in hex
cs value of the current signal
wchan event for which thread is waiting
function function name
thread 부속 명령의 두번째 양식은 현재 thread를 선택하는 데 사용됩니다. dbx 디버그 프로그램의 print, registers 및 where 부속 명령은 모두 현재 thread의 처리시 작용합니다. 현재 thread가 커널 모드에 있는 경우 registers 부속 명령은 레지스터를 표시할 수 없습니다.
thread 부속 명령의 세 번째 양식은 thread 실행을 제어하는 데 사용됩니다. thread는 hold 플래그를 사용하여 보류되거나 unhold 플래그를 사용하여 해제할 수 있습니다. 보류된 thread는 보류가 해제될 때까지 재개되지 않습니다.
주: dbx 디버그 프로그램의 print 부속 명령은 기호 thread 이름을 인지하며, 해당 오브젝트 상태를 표시하는 데 사용할 수 있습니다.
플래그
current ThreadNumber 매개변수가 제공되지 않으면, 현재 thread를 표시합니다. ThreadNumber 매개변수가 제공되면, 지정된 사용자 thread를 현재 thread로 선택합니다.
help th - 명령이 사용될 때 표시된 thread 옵션에 대한 모든 정보를 표시합니다.
hold ThreadNumber 매개변수가 제공되지 않은 경우, 모든 사용자 thread를 보류하고 표시합니다. 하나 이상의 ThreadNumber 매개변수가 제공되면 지정된 사용자 thread를 보류하고 표시합니다.
unhold ThreadNumber 매개변수가 제공되지 않은 경우, 이전에 보류했던 모든 사용자 thread를 해제하여 표시합니다. 하나 이상의 ThreadNumber 매개변수가 제공되면 지정된 사용자 thread를 해제하여 표시합니다.
info ThreadNumber 매개변수가 제공되지 않은 경우, 모든 사용자 thread를 long 양식으로 표시합니다. 하나 이상의 ThreadNumber 매개변수가 제공되면 지정된 사용자 thread 리스트를 long 양식으로 표시합니다.
위의 모든 플래그는 [-] 옵션을 취합니다. 이 옵션을 지정할 경우, set $thcomp 옵션을 설정하지 않으면 표시되는 thread 정보는 두번째 형식 및 long 양식으로 표시됩니다.
run run 상태에 있는 thread를 표시합니다.
susp susp 상태에 있는 thread를 표시합니다.
term term 상태에 있는 thread를 표시합니다.
wait wait 상태에 있는 thread를 표시합니다.
예제
대기 상태에 있는 thread에 대한 정보를 표시하려면, 다음과 같이 입력하십시오.
thread wait
출력은 다음과 유사합니다.
thread state-k wchan state-u k-tid mode held scope function
$t1 wait running 17381 u no pro main
$t3 wait running 8169 u no pro iothread
제공된 여러 thread에 대한 정보를 표시하려면, 다음과 같이 입력하십시오.
thread 1 3 4
출력은 다음과 유사합니다.
thread state-k wchan state-u k-tid mode held scope function
$t1 wait running 17381 u no pro main
$t3 wait running 8169 u no pro iothread
>$t4 run running 9669 u no pro save_thr
thread 4를 현재 thread로 하려면, 다음과 같이 입력하십시오.
thread current 4
thread 번호 2를 보류하려면, 다음과 같이 입력하십시오.
thread hold 2
두번째 형식으로 대기 상태에 있는 thread에 대한 정보를 표시하려면, 다음을 입력하십시오.
thread wait -
출력은 다음과 유사합니다.
thread m k u h s c j b kpl upl kpr upr k_tid u_tid fl sta wchan function
*$t1 u r w n p ed y 0 oth oth 61 1 0043e5 000001 51 004 main
$t3 u r w n p ed y 0 oth oth 61 1 001fe9 000102 51 004 iothread
>$t4 u r r n p ed y 0 oth oth 61 1 0025c5 000203 50 064 save_thr
두번째 형식으로 여러 주어진 thread에 대한 정보를 표시하려면, 다음과 같이 입력하십시오.
thread - 1 2 3
출력은 다음과 유사합니다.
thread m k u h s c j b kpl upl kpr upr k_tid u_tid fl sta wchan function
*$t1 u r w n p ed y 0 oth oth 61 1 0043e5 000001 51 004 main
$t3 u r w n p ed y 0 oth oth 61 1 00fe9 000102 51 004 iothread
>$t4 u r r n p ed y 0 oth oth 61 1 0025c5 000203 50 064 save_thr
attribute 부속 명령, condition 부속 명령, mutex 부속 명령, print 부속 명령, registers 부속 명령, where 부속 명령을 참조하십시오.
AIX Version 4.3 General Programming Concepts: Writing and Debugging Programs의 Creating Threads도 참조하십시오.
trace 부속 명령 : trace [ SourceLine | Expression at SourceLine | Procedure | [ Variable ] [ at SourceLine | in Procedure ] ] [ if Condition ]
trace 부속 명령은 프로그램이 수행할 때 지정된 프로시듀어, 기능, 소스 행, 표현식 또는 변수에 대한 추적 정보를 인쇄합니다. SourceLine 변수는 :(콜론)과 정수가 뒤에 붙는 파일 이름 문자열로 또는 정수로 지정할 수 있습니다. 조건을 지정할 수 있습니다. dbx 디버그 프로그램은 번호를 각 trace 부속 명령에 연관시킵니다. status 부속 명령을 사용하여 이 번호를 열람할 수 있습니다. 추적을 중단하려면 delete 부속 명령을 사용하십시오.
디폴트로서 추적은 프로세스에 기반을 두고 있습니다. thread 기반 추적을 하려면, 아래의 예제 8과 같은 조건으로 thread를 지정하십시오.
플래그
at SourceLine 추적중인 표현식이 있는 소스 행을 지정합니다.
if Condition 추적 시작 조건을 지정합니다. if Condition이 참일 때만 추적을 시작합니다.
in Procedure 사용할 프로시듀어를 지정하여 프로시듀어 또든 추적중인 변수를 찾습니다.
예제
각 호출을 printf 프로시듀어로 추적하려면 다음과 같이 입력하십시오.
trace printf
hello.c 파일에 있는 행 22의 각 실행을 추적하려면 다음과 같이 입력하십시오.
trace "hello.c":22
main 프로시듀어 내에서 x 변수에 대한 변경을 추적하려면 다음과 같이 입력하십시오.
trace x in main
데이타 주소 0x2004000을 추적하려면 다음과 같이 입력하십시오.
set $A=0x2004000
trace $A
주: tracei 부속 명령은 주소를 추적하기 위해 지정되었습니다.
지정된 Procedure가 사용 중일 때 사용자가 소스 행의 출력을 제한할 수 있습니다. 추적 정보를 만들어야 할 때 선택사항인 Condition을 지정하여 제어할 수 있습니다. 예를 들면 다음과 같습니다.
(dbx) trace in sub2
[1] trace in sub2
(dbx) run
trace in hellosub.c: 8 printf("%s",s);
trace in hellosub.c: 9 i = '5';
trace in hellosub.c: 10 }
프로시듀어가 호출되거나 복귀될 때마다 메세지를 표시할 수 있습니다. 프로시듀어가 호출되면, 정보에는 전달된 매개변수 및 호출 루틴 이름 등이 포함됩니다. 복귀하는 경우, 정보에는 Procedure의 리턴 값이 들어 있습니다. 예를 들면 다음과 같습니다.
(dbx) trace sub
[1] trace sub
(dbx) run
calling sub(s = "hello", a = -1, k = delete) from function main
returning "hello" from sub
프로그램이 지정된 소스 행에 도달할 때 Expression 값을 출력할 수 있습니다. 행 번호 및 파일 이름은 출력되지만, 소스 행은 출력되지 않습니다. 예를 들면 다음과 같습니다.
(dbx) trace x*17 at "hellosub.c":8 if (x > 0)
[1] trace x*17 at "hellosub.c":8 if x > 0
(dbx) run
at line 8 in file "hellosub.c": x*17 = 51
(dbx) trace x
[1] trace x
initially (at line 4 in "hello.c"): x = 0
after line 17 in "hello.c": x = 3
thread $t1이 만든 변수 x에 대한 변경을 추적하려면 다음과 같이 입력하십시오.
(dbx) trace x if ($running_thread == 1)
tracei 부속 명령도 참조하십시오.
tracei 부속 명령 : tracei [ [ Address ] [ at Address | in Procedure ] | Expression at Address ] [ if Condition ]
tracei 부속 명령은 다음과 같은 경우에 추적을 합니다.
- Address 플래그가 포함된 경우, Address 매개변수가 지정한 주소 내용을 변경합니다.
- at Address 매개변수가 지정되는 경우, at Address에 있는 명령이 수행됩니다.
- in Procedure 플래그가 포함되어 있는 경우, Procedure에서 지정한 프로시듀어가 사용됩니다.
- if Condition 플래그가 포함되어 있는 경우, Condition 매개변수가 지정한 조건은 참입니다.
플래그
at Address 주소를 지정합니다. 이 주소에서 명령이 실행될 때 추적이 가능합니다.
if Condition 조건을 지정합니다. 이 조건이 부합될 때 추적이 가능합니다.
in Procedure 프로시듀어를 지정합니다. 이 프로시듀어를 사용 중일 때 추적이 가능합니다.
예제
실행된 각 명령을 추적하려면 다음과 같이 입력하십시오.
tracei
주소 0x100020f0에서 명령이 실행될 때마다 추적하려면 다음과 같이 입력하십시오.
tracei at 0x100020f0
main 프로시듀어가 실행되고 있는 동안 메모리 위치 0x20004020 변경 내용을 추적하려면 다음과 같이 입력하십시오.
tracei 0x20004020 in main
thread $t4가 주소 0x100020f0에서 명령을 실행할 때마다 추적하려면 다음과 같이 입력하십시오.
tracei at 0x100020f0 if ($running_thread == 4)
trace 부속 명령을 사용하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Debugging at the Machine Level with dbx도 참조하십시오.
unalias 부속 명령 : unalias Name
unalias 부속 명령은 Name 매개변수가 지정한 별명을 삭제합니다.
예제
printx라고 명명된 별명을 삭제하려면 다음과 같이 입력하십시오.
unalias printx
alias 부속 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Creating Subcommand Aliases도 참조하십시오.
unset 부속 명령
unset Name
unset 부속 명령은 Name 매개변수가 지정한 이름과 관련된 dbx 디버그 프로그램 변수를 삭제합니다.
예제
부동 소수점 레지스터 표시를 금지하는 변수를 삭제하려면 다음과 같이 입력하십시오.
unset $noflregs
set 부속 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Changing Print Output With Special Debugging Variables도 참조하십시오.
up 부속 명령 : up [ Count ]
up 부속 명령은 현재 함수를 스택에서 Count 레벨 번호만큼 위로 이동시킵니다. 현재 함수는 이름을 분석하는 데 사용됩니다. Count 매개변수에 대한 디폴트는 1입니다.
예제
현재 함수를 스택 레벨 2보다 위쪽으로 이동하려면, 다음과 같이 입력하십시오.
up 2
스택에서 현재 기능을 표시하려면 다음과 같이 입력하십시오.
up 0
down 부속 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Changing the Current File or Procedure, Displaying Stack Trace도 참조하십시오.
use 부속 명령 : use [ Directory ... ]
use 부속 명령은 dbx 디버그 프로그램이 소스 파일을 찾을 때 탐색할 디렉토리 리스트를 설정합니다. 인수 없이 use 부속 명령을 지정하면, 탐색할 현재 디렉토리 리스트가 표시됩니다.
@ (at 기호)는 dbx 프로그램이 오브젝트 파일(있는 경우)에 있는 전체 경로 이름 정보를 찾도록 하는 특수 기호입니다. 사용자가 @라는 상대적인 디렉토리를 찾도록 하려면, 탐색 경로에 ./@를 사용해야 합니다.
use 부속 명령은 +(더하기 부호)를 사용하여 탐색할 디렉토리 리스트에 디렉토리를 추가합니다. +라는 디렉토리가 있으면, 디렉토리의 전체 경로 이름을 지정하십시오(예: ./+ 또는 /tmp/+).
예제
탐색할 디렉토리 리스트를 현재 디렉토리(.), 상위 디렉토리 (..), /tmp 디렉토리로 변경하려면 다음과 같이 입력하십시오.
use . .. /tmp
탐색할 디렉토리 리스트를 현재 디렉토리(.), 컴파일 시간에 소스 파일이 위치했던 디렉토리(@), ../source 디렉토리로 변경하려면 다음과 같이 입력하십시오.
use . @ ../source
/tmp2 탐색할 디렉토리를 디렉토리 리스트에 추가하려면 다음과 같이 입력하십시오.
use + /tmp2
edit 부속 명령, list 부속 명령도 참조하십시오.
whatis 부속 명령 : whatis Name
whatis 부속 명령은 Name의 선언을 표시합니다. 여기서, Name 매개변수는 변수, 프로시듀어 또는 함수 이름을 나타내며, 블록 이름으로 규정되는 경우도 있습니다.
주: dbx 디버그 프로그램이 수행되는 동안만 whatis 부속 명령을 사용하십시오.
예제
변수 x의 선언을 표시하려면 다음과 같이 입력하십시오.
whatis x
프로시듀어 main의 선언을 표시하려면, 다음과 같이 입력하십시오.
whatis main
main 함수 내에서 변수 x의 선언을 표시하려면 다음과 같이 입력하십시오.
whatis main.x
열거, 구조체 또는 공용체 태그(또는 Pascal의 해당 태크)의 선언을 인쇄하려면, $$TagName을 사용합니다.
(dbx) whatis $$status
enum $$status { run, create, delete, suspend };
where 부속 명령 : where [ >File ]
where 부속 명령은 활동중인 프로시듀어 및 함수 리스트를 표시합니다. >File 플래그를 사용하여, 이 부속 명령에 대한 출력을 지정된 파일로 재지정할 수 있습니다.
- >File 지정된 파일로 출력을 재지정합니다.
up 부속 명령 및 down 부속 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Displaying a Stack Trace도 참조하십시오.
whereis 부속 명령 : whereis Identifier
whereis 부속 명령은 이름이 지정된 식별자와 일치하는 모든 기호의 전체 규정을 표시합니다. 기호가 인쇄되는 순서는 중요하지 않습니다.
예제
이름이 x인 모든 기호에 대해 규정된 이름을 표시하려면 다음과 같이 입력하십시오.
whereis x
which 부속 명령도 참조하십시오.
which 부속 명령 : which Identifier
which 부속 명령은 주어진 식별자의 전체 규정을 표시합니다. 전체 규정은 식별자가 연관된 외부 블록 리스트로 구성됩니다.
예제
x 기호의 전체 규정을 표시하려면 다음과 같이 입력하십시오.
which x
whereis 부속 명령을 참조하십시오. 또한, AIX General Programming Concepts: Writing and Debugging Programs Scoping of Names도 참조하십시오.
File
a.out 오브젝트 코드를 포함하고 있는 오브젝트 파일. core core 덤프를 포함합니다. .dbxinit 초기화 명령을 포함합니다.
관련 정보
adb 명령, cc 명령. a.out 파일, core 파일.
AIX General Programming Concepts: Writing and Debugging Programs dbx Symbolic Debug Program Overview 및 Using the dbx Debug Program도 참조하십시오.
dbx 명령
목적 : 운영 시스템하에서 프로그램을 실행하고 디버그하기 위한 환경을 제공합니다.
'Linux and Unix' 카테고리의 다른 글
VIM에 사용중인 색상파일 (0) | 2017.10.22 |
---|---|
make의 내부 매크로중 헤깔리는 것들 (0) | 2017.10.22 |
.vimrc 파일 설정 팁 및 자질구레한 정보 (0) | 2017.10.22 |
VI(M) 기본 사용법 (0) | 2017.10.22 |
명령어 실행 시간 측정하기 (0) | 2017.10.22 |