dbx와 core 파일을 분석할때는 다음과 같이 하자.
우선 첫째로 현재 해당 core파일을 생성한 바이너리 부터 확인해보자.
file 다음 core 파일을 입력하면 현재 core 파일의 [비트], [생성한 바이너리명] 을 알 수 있다.
$> file core
core_: AIX core file 64-bit, server
그 다음 core 파일과 dbx를 실행 시켜보자.
실행 방법은 dbx [바이너리경로] [코어파일경로]
dbx가 실행 된 뒤 where 을 치면 차세한 오류 내역을 확인할 수 있다.
$> dbx server core
(dbx) where
.
.
warning: “/lib/libi18n.a(shr_64.o)” has changed since core creation
warning: “/lib/libiconv.a(shr4_64.o)” has changed since core creation
warning: “/usr/mqm/lib64/libmqmcs.a(shr.o)” has changed since core creation
warning: “/usr/mqm/lib64/libmqz.a(libmqz.o)” has changed since core creation
warning: “/lib/libC.a(shr2_64.o)” has changed since core creation
warning: “/lib/libnsl.a(shr_64.o)” has changed since core creation
warning: “/lib/libC.a(ansi_64.o)” has changed since core creation
warning: “/lib/libc.a(shr_64.o)” has changed since core creation
IOT/Abort trap in pthread_kill at 0x900000000aa37d0
0x900000000aa37d0 (pthread_kill+0xb0) e8410028 ld r2,0x28(r1)
(dbx) q
뭐.. 이런식으로 확인한다.
dbx로 Running Process를 분석할때는 아래와 같다
$> dbx -d<depth> -a <pid>
ex) dbx -d 300 -a 12345
dbx에서 thread 정보를 확인하고자 할때는
(dbx) thread
(dbx) thread info <thread no.>
특정 프로세서의 thread 상황은
(dbx) ps -p <pid> -mo THREAD
file 와 [디렉토리 경로]
list [start] , [end]
또는 바로 수정하려면 edit를 사용하면 된다.
dbx에서 사용가능한 명령어들은 다음과 같다.
addcmd alias assign attribute barrier call
case catch clear cleari condition corefile
coremap cont delcmd delete detach disable
display(/) down dump edit enable fd
file frame func goto gotoi handler
help ignore kthread list listi malloc
map move multproc mutex spinlock next
nexti onceblock plugin pluginload pluginunload print
proc prompt pthread quit registers rerun
resource return run rwlock screen search(/?)
set sh skip source status step
stepi stop stophwp stopi thread tls
tnext tnexti trace tracehwp tracei tskip
tstep tstepi tstop tstophwp tstopi ttrace
ttracehwp ttracei unalias unset up use
whatis where whereis which
gdb에서는 break <linenumber> 이지만 dbx에서는 stop <linenumber> 인듯하다.
디버깅을 하기 위해서는 –g옵션을 주고 컴파일/링크 해야 한다. 만약 링크가 libg.a를 찾을 수 없다고 하면서 실패하게 되면, /usr/lib/ligb.a를 갖고 있지 않기 때문이다. 그 파일은 특별한 라이브러리로서 디버깅 가능 C라이브러리이다. libc 패키지에 포함되어 있거나 또는 libc 소스 코드를 받아서 컴파일 하면 생긴다. /usr/lib/libc.a를 /usr/lib/libg.a로 링크 시켜도 된다.
또한 AIX에서 ulimit로 코어파일을 생성하도록 설정해줘야 한다.
-c 옵션으로 생성하는 코어파일의 block 크기를 지정할 수 있다. block 크기는 시스템에 따라 다르다
코어 파일 생성을 가능케 하려고 한다면 그것을 다시 가능케 하는 셀의 내장 명령을 사용한다.
만약C쉘 호환 쉘(tcsh)을 쓰고 있다면 다음과 같이 명령을 내린다.
% limit core unlimited
만약 본쉘류( sh , bash , zsh , pdksh )를 사용하고 있다면,
$ ulimit –c unlimited
와 같은 명령을 내린다.
코어파일을 함께 사용하기 위해선 다음과 같이 한다. (gdb의 경우)
% gdb program core
자세한 메뉴얼은 아래에 써 놓습니다.
출처 : http://alladdin.tistory.com/21
———————————————-
dbx 명령
목적
디버그할 환경을 제공하고 프로그램을 실행합니다.
구문
dbx [ -a ProcessID ] [ -c CommandFile ] [ -d NestingDepth ] [ -I Directory ] [ -E DebugEnvironment ] [ -p oldpath=newpath:…| pathfile ] [ -k ] [ -u ] [ -F ] [ -r ] [ -x ] [ ObjectFile [ CoreFile ] ]
설명
dbx 명령은 C, C++, Pascal 및 FORTRAN 프로그램에 대한 디버그를 제공하여, 사용자가 다음과 같은 작업을 수행할 수 있도록 합니다.
- 오브젝트 및 코어 파일 검사.
- 프로그램 실행을 위한 제어 환경 제공.
- 선택한 문장에 중단점을 설정하거나 한 번에 한 행씩 프로그램 실행.
- 변수를 사용하여 디버그한 후 올바른 형식으로 표시.
ObjectFile 매개변수는 컴파일러가 만들어 내는 오브젝트(실행 가능) 파일입니다. dbx 명령에 필요한 정보를 만들기 위해 프로그램 컴파일 시 -g(기호 테이블 작성) 플래그를 사용합니다.
주: 오브젝트 파일을 컴파일할 경우 cc 명령의 -g 플래그를 사용해야 합니다. -g 플래그를 사용하지 않거나 strip 명령으로 xcoff 파일에서 기호 참조가 제거된 경우, dbx 명령의 사용 범위는 제한됩니다.
-c 플래그를 지정하지 않으면 dbx 명령은 사용자의 $HOME 디렉토리의 .dbxinit 파일을 검사합니다. 그런 다음, 사용자의 현재 디렉토리에서 .dbxinit 파일을 검사합니다. .dbxinit 파일이 현재 디렉토리에 존재하면, 이 파일이 사용자의 $HOME 디렉토리에 있는 .dbxinit 파일을 대체합니다. .dbxinit 파일이 사용자의 $HOME 디렉토리 또는 현재 디렉토리에 존재하면, 디버그 세션이 시작될 때 이 파일의 부속 명령이 실행됩니다. 편집기를 사용하여 .dbxinit 파일을 작성하십시오.
ObjectFile을 지정하지 않으면, dbx는 디버그할 오브젝트 파일 이름을 요청합니다. 디폴트는 a.out입니다. 코어 파일이 현재 디렉토리에 존재하거나 CoreFile 매개변수가 지정되어 있으면, dbx는 프로그램에 이상이 있는 위치를 보고합니다. 코어 이미지에 보유된 변수, 레지스터 및 메모리는 ObjectFile의 실행이 시작될 때까지 검사됩니다. 그 시점에 dbx 디버그 프로그램은 명령을 위한 프롬프트를 리턴합니다.
표현식 처리
dbx 프로그램은 광범위한 표현식을 사용합니다. dbx 디버그 프로그램에 C 및 Pascal 구문의 공통적인 기능의 일부와, 여러 가지 FORTRAN 확장자를 가진 표현식을 지정할 수 있습니다.
디버그 프로그램에서 자주 사용되는 연산자는 다음과 같습니다.
* 또는 ^ | 간접 선언이나 포인터 참조를 표시합니다. |
[ ] 또는 ( ) | 첨자 배열 표현식을 표시합니다. |
. | 포인터 및 구조체와 함께 이 필드 참조 연산자를 사용합니다. 이것은 C 연산자인 -> (화살표)를 사용하지 않고도 가능합니다. |
& | 변수 주소를 알 수 있습니다. |
.. | 배열의 하위 섹션을 지정할 때 상하한을 구분합니다. 예제 : n[1..4]. |
디버그 프로그램에서 사용되는 연산자 유형은 다음과 같습니다.
대수표현식 | =, –, *, /(부동소수의 나눗셈), div(정수의 나눗셈), mod, exp(지수연산) |
비트 단위 연산 | –, I, bitand, xor, ~. <<, >> |
논리적 | or, and, not, II, && |
비교 | <, >, <=, >=, < > or !=, = or == |
기타 | (유형 이름), 크기 |
논리적 표현식과 비교 표현식이 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 | 표준 입력(STDIN)으로부터 읽기 전에 파일에 있는 dbx 부속 명령을 실행합니다. $HOME 디렉토리에 지정된 파일을 먼저 처리한 다음, 현재 디렉토리에 있는 파일을 처리합니다. 현재 디렉토리에 있는 명령 파일이 $HOME 디렉토리에 있는 명령 파일보다 우선적으로 처리됩니다. 지정된 파일이$HOME 디렉토리 또는 현재 디렉토리에 존재하지 않으면, 경고 메시지가 표시됩니다. source 부속 명령은 dbx 프로그램이 시작될 때 한 번 사용됩니다. |
-d NestingDepth | 프로그램 블록의 중첩 한계를 설정합니다. 디폴트 중첩 행 수는 25입니다. |
-E DebugEnvironment | 디버그 프로그램에 대한 환경 변수를 지정합니다. |
-p oldpath=newpath:…| pathfile | oldpath=newpath 형식으로 코어 파일을 조사할 경우 라이브러리 경로에 대한 대체를 지정합니다.oldpath는 대체될 기존 값(코어 파일에 저장된 대로)을 지정하고 newpath는 대체할 새로운 값을 지정합니다. 이들은 전체 또는 부분, 상대 또는 절대 경로입니다. 복수의 대체를 콜론으로 구분하여 지정할 수 있습니다. 또다른 방법으로, -p 플래그를 사용하여 이전에 설명된 형식으로 맵핑을 읽을 파일의 이름을 지정할 수 있습니다. 맵핑을 파일에서 읽을 때 행당 하나의 맵핑만이 허용됩니다. |
-F | 레이지(lazy) 읽기 모드를 끄고 dbx 명령에서 시작 시 모든 기호를 읽게 하는데 사용할 수 있습니다. 디폴트로, 레이지(lazy) 읽기 모드는 온(on) 상태입니다. 이는 dbx 세션을 초기화하는 데 필요한 기호 테이블 정보만을 읽습니다. 이 모드에서, dbx는 기호 정보를 읽지 않은 국지 변수 및 유형은 읽지 않습니다. 따라서, whereis i와 같은 명령은 각 함수 내의 국지 변수 i의 모든 경우에 대해서 보여줄 수는 없습니다. |
-I Directory | (대문자 i) 소스 파일을 검색한 디렉토리 리스트의 Directory 변수에서 지정한 디렉토리가 포함됩니다. 디폴트는 다음 디렉토리에서 소스 파일을 찾는 것입니다.
|
-k | 메모리 주소를 대응시킵니다. 커널 디버깅에 사용될 수 있습니다. |
-r | 즉시 오브젝트 파일을 실행합니다. 성공적으로 종료되면, dbx 디버그 프로그램이 종료됩니다. 그렇지 않으면, 디버그 프로그램으로 들어가게 되고 종료된 원인을 보여줍니다.
|
-u | dbx 명령은 파일 이름 기호 앞에 @(at 기호)를 붙입니다. 이 플래그는 모호한 기호 이름이 생기는 것을 방지해 줍니다. |
-x | dbx 명령이 FORTRAN 소스 코드에서 발생한 기호로부터 _(뒤에 붙은 밑줄) 문자를 삭제하지 못하도록 합니다. 이 플래그를 사용하면 dbx에서 밑줄친 문자를 제외하고 동일한 기호(예제: xxx 및xxx_)를 구분할 수 있습니다. |
예제
- 다음 예제는 프로세스와 동시에 dbx 디버그 프로그램을 시작하는 방법에 대해 설명합니다. 예제는 samp.c라는 프로그램을 사용합니다. 이 C 프로그램은 먼저 기호 테이블 참조사항이 들어 있는 오브젝트 파일을 작성하기 위해 -g 플래그를 사용하여 컴파일됩니다. 이런 경우, samp 프로그램은 다음 사항을 표시합니다.
$ cc -g samp.c -o samp
samp 프로그램이 실행 중일 때 운영 시스템은 버스 오류를 알리고 다음과 같이 사용자의 현재 작업 디렉토리에 코어 이미지를 작성합니다.
$ 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에 의해 시작된 것처럼 지금 프로세스를 조회하고 디버그할 수 있습니다.
- dbx를 looper에 연결하려면 프로세스 ID를 확인해야 합니다. 백그라운드 프로세스로서 looper를 실행하지 않았으면, 다른 Xwindow를 열어 두어야 합니다. 이 Xwindow 창에서, 다음을 입력하십시오.
- 실행 파일인 objefile의 소스 파일을 검색하기 위한 디렉토리 리스트에 디렉토리를 추가하려면, 다음을 입력하십시오.
$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 플래그는 사용자가 코어 이미지를 가지고 있지 않더라도 메모리에서 사용자의 프로세스 상태를 검사할 수 있도록 합니다.
- 디버그 프로그램에 대한 환경 변수를 지정하려면, 다음을 입력하십시오.
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 | 프로그램이 종료되거나 다른 중단점과 만나게 될 때까지 현재의 정지 지점에서 응용프로그램 실행을 계속합니다. |
corefile | 코어 파일에 대한 상위 레벨 데이터를 표시합니다. |
delete | 지정된 이벤트 숫자에 해당하는 추적과 정지를 제거합니다. |
detach | 응용프로그램을 계속 실행하고 디버그 프로그램을 종료합니다. |
disable | 지정된 이벤트 숫자에 해당하는 추적 및 정지를 사용 불가능하게 합니다. |
display memory | 메모리 내용을 표시합니다. |
down | 스택 아래로 현재 기능을 이동합니다. |
dump | 지정된 프로시저에 있는 변수 이름과 값을 표시합니다. |
edit | 지정된 파일에서 편집기를 시작합니다. |
enable | 지정된 이벤트 숫자에 해당하는 추적 및 정지를 사용 가능하게 합니다. |
fd | 파일 설명자 정보를 표시합니다. |
file | 현재의 소스 파일을 지정된 파일로 변경합니다. |
func | 현재의 기능을 지정된 프로시저나 기능으로 변경합니다. |
goto | 지정된 소스 행이 다음 실행 행이 되도록 합니다. |
gotoi | 프로그램 계수기 주소를 변경합니다. |
handler | pthreads atfork 또는 취소 정리 처리기에 대한 정보를 표시합니다. |
help | dbx 부속 명령 및 주제에 대한 도움말 정보를 표시합니다. |
ignore | 신호가 응용프로그램으로 보내지기 전에 신호 트랩을 정지합니다. |
kthread | 커널 스레드에 대한 정보를 표시합니다. |
list | 현재 소스 파일의 행을 표시합니다. |
listi | 응용프로그램으로부터 명령어를 나열합니다. |
malloc | malloc 서브시스템의 프로그램 사용에 대한 정보를 표시합니다. |
map | 응용프로그램의 로드 특성에 관한 정보를 표시합니다. |
move | 다음 행이 표시되도록 변경합니다. |
multproc | 멀티프로세스 디버깅을 사용 가능하게 하거나 사용 불가능하게 합니다. |
mutex | 전체 또는 선택된 mutexes에 관한 정보를 표시합니다. |
next | 다음 소스 행까지 응용프로그램을 실행합니다. |
nexti | 다음 기계 명령어까지 응용프로그램을 실행합니다. |
onceblock | 1회 블록에 대한 정보를 표시합니다. |
plugin | 플러그인 부속 명령을 호출하거나 사용 가능한 플러그인의 이름을 표시합니다. |
pluginload | 플러그인을 로드합니다. |
pluginunload | 플러그인을 로드 해제합니다. |
표현식 값을 인쇄하거나 프로시저를 실행하고, 그 프로시저의 리턴 코드를 인쇄합니다. | |
proc | 프로세스에 대한 정보를 표시합니다. |
prompt | dbx 명령 프롬프트를 변경합니다. |
quit | dbx 디버그 프로그램을 정지합니다. |
registers | 모든 범용 레지스터, 시스템 제어 레지스터, 부동소수점 레지스터, 현재 명령어 레지스터의 값을 표시합니다. |
rerun | 이전 인수로 응용프로그램을 실행하기 시작합니다. |
resource | pthread가 소유하거나 대기하는 자원에 대한 정보를 표시합니다. |
return | 지정된 프로시저로 복귀할 때까지 응용프로그램 실행을 계속합니다. |
rwlock | Rwlocks에 대한 정보를 표시합니다. |
run | 응용프로그램 실행을 시작합니다. |
screen | dbx 명령과의 상호작용을 위해 Xwindow를 엽니다. |
set | dbx 디버그 프로그램 변수 값을 정의합니다. |
sh | 명령을 실행할 쉘로 전달합니다. |
skip | 현재의 정지 지점에서 응용프로그램 실행을 계속합니다. |
source | 파일로부터 dbx 부속 명령을 읽어들입니다. |
status | 사용 중인 trace와 stop 부속 명령을 표시합니다. |
step | 하나의 소스 행을 실행합니다. |
stepi | 하나의 기계 명령어를 실행합니다. |
stophwp | 하드웨어 경계점 정지를 설정합니다. |
stop | 응용프로그램 실행을 정지합니다. |
stopi | 지정된 위치에 정지를 설정합니다. |
thread | 스레드를 표시하고 제어합니다. |
trace | 추적 정보를 인쇄합니다. |
tracehwp | 하드웨어 경계점 추적을 설정합니다. |
tracei | 추적을 실행합니다. |
unalias | 별명을 제거합니다. |
unset | 변수를 삭제합니다. |
up | 스택 위로 현재 기능을 이동합니다. |
use | 소스 파일을 찾을 때 디렉토리 리스트를 찾도록 설정합니다. |
whatis | 응용프로그램 구성요소 선언을 표시합니다. |
where | 사용 중인 프로시저와 함수 리스트를 표시합니다. |
whereis | 이름이 지정된 ID와 일치하는 모든 기호에 대한 전체 조건을 표시합니다. |
which | 주어진 ID에 대한 전체 조건을 표시합니다. |
/ 부속 명령
/ [ RegularExpression [ / ] ]
/ 부속 명령은 현재 소스 파일에서 앞쪽으로 RegularExpression 매개변수에서 지정한 패턴을 검색합니다. 인수 없이 / 부속 명령을 입력하면dbx는 이전 정규식을 파일의 앞쪽으로 검색합니다. 검색은 파일의 끝을 만나면 다시 처음부터 검색하기 시작합니다.
예제
- 현재 소스 파일에서 12라는 숫자에 대해 앞쪽으로 검색하려면 다음을 입력하십시오.
/ 12
- 이전 검색을 반복하려면, 다음을 입력하십시오.
/
? (search) 부속 명령 및 regcmp 서브루틴을 참조하십시오.
? 부속 명령
? [ RegularExpression [ ? ] ]
? 부속 명령은 RegularExpression 매개변수에서 지정한 패턴에 대해 현재 소스 파일의 역방향으로 검색합니다. 인수 없이 ? 부속 명령을 입력하면 dbx 명령은 이전 정규식을 뒷쪽(역방향)으로 검색합니다. 검색은 파일의 끝을 만나면 다시 처음부터 검색하기 시작합니다.
예제
- 현재 소스 파일에서 문자 z에 대해 뒤쪽으로 검색하려면, 다음을 입력하십시오.
?z
- 이전 검색을 반복하려면, 다음을 입력하십시오.
?
/(search) 부속 명령 및 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 변수=표현식
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, enter:
assign Y = "Hello World"
- 유형 검사 기능을 사용하지 않으려면, 다음과 같이 입력하여 dbx 디버그 프로그램 변수 $unsafeassign을 설정하십시오.
set $unsafeassign
Displaying and Modifying Variables를 참조하십시오.
attribute 부속 명령
attribute [ AttributeNumber … ]
Attribute 부속 명령은 사용자 스레드, mutex 또는 AttributeNumber 매개변수에 의해 정의된 조건 속성 오브젝트에 대한 정보를 표시합니다. 매개변수를 지정하지 않으면, 모든 속성 오브젝트가 나열됩니다.
나열된 각 속성 오브젝트에 다음과 같은 정보가 표시됩니다.
attr | $aAttributeNumber 형식으로 속성 오브젝트의 기호 이름을 나타냅니다. |
obj_addr | 속성 오브젝트의 주소를 나타냅니다. |
type | 속성 오브젝트의 유형을 나타냅니다. 각각 thr, mutex 또는 사용자 스레드용 cond, mutexes 및 조건 변수 등이 될 수 있습니다. |
state | 속성 오브젝트 상태를 나타냅니다. valid나 inval이 될 수 있습니다. |
stack | 스레드 속성 오브젝트의 스택 크기 속성을 나타냅니다. |
scope | 스레드 속성 오브젝트의 유효범위 속성을 나타냅니다. 이것은 스레드의 경합 유효범위를 결정하고, 자원을 서로 차지하려는 스레드 세트를 지정합니다. 시스템이나 프로세스 경합 유효범위에 대한 값은 sys나 pro가 될 수 있습니다. |
prio | 스레드 속성 오브젝트의 우선순위 속성을 나타냅니다. |
sched | 스레드 속성 오브젝트의 스케줄 방식의 속성을 나타냅니다. 이 속성은 스케줄 방식을 제어하는데, fifo, rr (라운드 로빈) 또는 other가 될 수 있습니다. |
p-shar | mutex나 condition 속성 오브젝트의 프로세스 공유 속성을 나타냅니다. mutex나 condition은 다른 프로세스에 속하는 스레드가 여기에 액세스할 수 있으면, 프로세스를 공유합니다. 값은 yes나 no가 될 수 있습니다. |
protocol | mutex의 프로토콜 속성을 나타냅니다. 이 속성에서는 스레드 우선순위에서 mutex를 보류하는 효과를 결정합니다. 값은 no_prio, prio 또는 protect가 될 수 있습니다. |
clock | 조건 속성 오브젝트의 시계 속성을 표시합니다. 이 속성은 스레드가 시간종료에 지정된 대로 조건 변수에 대해 대기할 때 사용해야 하는 시계를 판별합니다. 값은 realtime 또는 monotonic이 될 수 있습니다. |
주:
- 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 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그의 Creating Threads, Mutexes 사용 및 Using Condition Variables를 참조하십시오.
call 부속 명령
call Procedure ( [ 매개변수] )
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 부속 명령과 Handling Signals를 참조하십시오.
clear 부속 명령
clear SourceLine
clear 부속 명령은 주어진 소스 행에서 모든 정지(stop)를 제거합니다. SourceLine 매개변수는 두 가지 형식으로 지정될 수 있습니다.
- 정수로 지정
- :(콜론)과 정수 앞에 오는 파일 이름 문자열로 지정
예제
19 행에서 중단점 설정을 제거하려면 다음을 입력하십시오.
clear 19
cleari 부속 명령 및 delete 부속 명령. AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Setting and Deleting Breakpoints를 참조하십시오.
cleari 부속 명령
cleariAddress
cleari 부속 명령은 Address 매개변수에서 지정한 주소의 모든 중단점을 지웁니다.
예제
- 주소 0x100001b4에서 중단점 설정을 제거하려면 다음을 입력하십시오.
cleari 0x100001b4
- main() 프로시저 주소에서 중단점 설정을 제거하려면 다음을 입력하십시오.
cleari &main
clear 부속 명령, delete 부속 명령, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Setting and Deleting Breakpoints를 참조하십시오.
condition 부속 명령
condition [ wait | nowait | ConditionNumber … ]
condition 부속 명령은 하나 이상의 조건 변수에 대한 정보를 표시합니다. 하나 이상의 ConditionNumber 매개변수가 주어지면, condition부속 명령은 지정된 조건 변수에 대한 정보를 표시합니다. 플래그나 매개변수를 지정하지 않으면, condition 부속 명령은 모든 조건 변수를 나열합니다.
각 조건에 대해 나열되는 정보는 다음과 같습니다.
cv | $cConditionNumber 형식으로 조건 변수의 기호 이름을 나타냅니다. |
obj_addr | 조건 변수의 메모리 주소를 나타냅니다. |
clock | 조건 변수의 시계 속성을 표시합니다. |
num_wait | 조건 변수에서 대기 중인 스레드의 갯수를 나타냅니다. |
waiters | 조건 변수에서 대기 중인 사용자 스레드를 나열합니다. |
주: dbx 디버그 프로그램의 print 부속 명령은 기호로 된 조건 변수 이름을 인식하며, 해당 오브젝트의 상태를 표시하는 데 사용될 수 있습니다.
플래그
wait | 대기 중인 스레드가 있는 조건 변수를 표시합니다. |
nowait | 대기 중인 스레드가 없는 조건 변수를 표시합니다. |
예제
- 모든 조건 변수에 관한 정보를 표시하려면 다음을 입력하십시오.
condition
- 대기 중인 스레드가 있는 모든 조건 변수에 관한 정보를 표시하려면 다음을 입력하십시오.
- 조건 변수 3에 관한 정보를 표시하려면 다음을 입력하십시오.
condition 3
출력은 다음과 유사합니다.
cv obj_addr num_wait waiters $c3 0x20003290 0
attribute 부속 명령, mutex 부속 명령, print 부속 명령 및 thread 부속 명령을 참조하십시오.
또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그의 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 부속 명령을 참조하십시오.
corefile 부속 명령
corefile 부속 명령은 실행 파일 이름, 코어 파일 형식 버전 정보, 사용 가능한 데이터를 표시하는 플래그, 고장을 야기한 신호, 코어를 덤프한 프로세스의 실행 모드를 비롯하여, 코어 파일의 헤더에 있는 정보를 표시합니다.
delete 부속 명령
delete { Number … | all }
delete 부속 명령은 응용프로그램에 설명되어 있는 추적 및 정지를 해제합니다. 해제될 추적 및 정지는 Number 매개변수에 의해 지정될 수 있으며, 모든 추적 및 정지는 all 플래그를 사용하여 해제될 수 있습니다. dbx 프로그램별로 추적 및 정지에 연관된 숫자를 표시하려면status 부속 명령을 사용하십시오.
플래그
all | 추적과 정지를 모두 제거합니다. |
예제
- 응용프로그램에서 모든 추적 및 정지를 해제하려면, 다음을 입력하십시오.
delete all
- 이벤트 번호 4에 대한 추적 및 정지를 해제하려면, 다음을 입력하십시오.
delete 4
clear 부속 명령, cleari 부속 명령, status 부속 명령 및 AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Setting and Deleting Breakpoints를 참조하십시오.
detach 부속 명령
detach [ SignalNumber | SignalName ]
detach 부속 명령은 응용프로그램의 실행을 계속하고 디버그 프로그램을 종료합니다. 신호는 다음의 두 가지 방법 가운데 한가지로 지정될 수 있습니다.
- SignalName 매개변수를 사용한 이름
- SignalNumber 매개변수를 사용한 숫자신호 이름은 대소문자를 구분하지 않으며 SIG 접두어는 선택적입니다.
신호를 지정하면, 프로그램은 그 신호를 받은 것으로 간주하고 실행을 계속합니다. 신호를 지정하지 않으면, 프로그램은 정지가 발생하지 않았던 것처럼 실행을 계속합니다.
예제
- 응용프로그램의 실행을 계속하고 dbx를 종료하려면 다음을 입력하십시오.
detach
- 응용프로그램에서 SIGREQUEST 신호를 받더라도 dbx를 종료하고 응용프로그램 실행을 계속하려면 다음을 입력하십시오.
detach SIGREQUEST
Using the dbx Debug Program을 참조하십시오.
disable 부속 명령
disable { Number … all }
disable 부속 명령은 디버그 이벤트와 연관된 추적 및 정지를 사용 불가능하게 합니다. 사용 불가능하게 할 추적 및 정지는 Number 매개변수를 통해 지정할 수 있으며, 모든 추적 및 정지는 all 플래그를 사용하여 사용 불가능하게 할 수 있습니다. dbx 디버그 프로그램에 의해 추적 및 정지에 연관된 이벤트 숫자를 표시하려면 status 부속 명령을 사용하십시오.
플래그
all | 추적과 정지를 모두 제거합니다. |
예제
- 응용프로그램에서 모든 추적 및 정지를 사용 불가능하게 하려면 다음을 입력하십시오.
disable all
- 이벤트 번호 4에 대한 추적 및 정지를 사용 불가능하게 하려면 다음을 입력하십시오.
disable 4
자세한 정보는 enable 부속 명령, delete 부속 명령, status 부속 명령을 참조하십시오.
또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Setting and Deleting Breakpoints를 참조하십시오.
display memory 부속 명령
{ Address,Address/ | Address/ [ Count ] } [ Mode ] [ >File ]
display memory 부속 명령에는 명령을 초기화하는 키워드가 없으며 다음과 같은 요인으로 제어되는 메모리의 일부분을 표시합니다.
표시되는 메모리 범위는 다음 중의 하나를 지정하면 제어됩니다.
- 두 개의 Address 매개변수또는
- 시작점을 나타내는 하나의 Address 매개변수와, 그 Address로부터 표시되는 행의 갯수를 결정하는 Count.
앞에 &(앰퍼샌드)를 가진 이름으로 기호 주소를 지정하십시오. 주소는 다른 주소 및 연산자 +(더하기 부호), -(빼기 부호), *로 이루어진 표현식이 될 수 있습니다. 괄호 안에 들어 있는 표현식은 주소로 해석합니다.
- 메모리를 표시하는 형식은 Mode 매개변수가 제어합니다. Mode 매개변수의 디폴드는 현재 모드입니다. Mode의 초기값은 X입니다.
b | 8진수로 바이트를 인쇄합니다. |
c | 문자로 바이트를 인쇄합니다. |
d | 10진수로 축약형 단어를 인쇄합니다. |
D | 10진수로 긴 단어를 인쇄합니다. |
f | 단일 정밀도의 실수를 인쇄합니다. |
g | 이중 정밀도 실수를 인쇄합니다. |
h | 16진수로 바이트를 인쇄합니다. |
i | 기계 명령어를 인쇄합니다. |
lld | 8바이트의 부호가 있는 10진수를 인쇄합니다. |
llu | 8바이트의 부호가 없는 10진수를 인쇄합니다. |
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 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Examining Memory Addresses를 참조하십시오.
down 부속 명령
down [ Count ]
down 부속 명령은 현재의 함수를 Count 레벨 번호 아래로 이동시킵니다. 현재 함수는 이름을 분석하는 데 사용됩니다. Count 매개변수에 대한 디폴트는 1입니다.
예제
- 스택을 한 레벨 아래로 이동하려면 다음을 입력하십시오.
아래로
- 스택을 세 레벨 아래로 이동하려면 다음을 입력하십시오.
down 3
up 부속 명령, where 부속 명령 및 AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Displaying a Stack Trace를 참조하십시오.
dump 부속 명령
dump [ Procedure ] [ >File ]
dump 부속 명령은 지정된 프로시저 내의 모든 변수 이름과 값을 표시합니다. Procedure 매개변수는 .(마침표)이며, 모든 사용 중에 있는 변수가 표시됩니다. Procedure 매개변수를 지정하지 않으면, 현재 프로시저가 사용됩니다. >File 플래그를 사용하면 출력은 지정된 파일로 방향 재지정됩니다.
플래그
>File | 지정된 파일로 출력을 방향 재지정합니다. |
예제
- 현재 프로시저에 있는 변수 이름과 값을 표시하려면 다음을 입력하십시오.
dump
- add_count 프로시저에 있는 변수 이름과 값을 표시하려면 다음을 입력하십시오.
dump add_count
- 현재 프로시저에 있는 변수 이름과 값을 var.list 파일로 방향 재지정하려면 다음을 입력하십시오.
dump > var.list
Displaying and Modifying Variables AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서를 참조하십시오.
edit 부속 명령
edit [ Procedure | File ]
edit 부속 명령은 지정된 파일에서 편집기를 실행시킵니다. 파일은 File 매개변수 또는 Procedure 매개변수를 지정하여 지정할 수 있으며, 여기서 편집기는 해당 프로시저가 포함되어 있는 파일에서 호출됩니다. 파일을 지정하지 않으면, 현재 소스 파일에서 편집기가 실행됩니다. 디폴트는 vi 편집기입니다. EDITOR 환경 변수를 원하는 편집기의 이름으로 재설정하여 디폴트를 변경할 수 있습니다.
예제
- 현재 소스 파일에서 편집기를 시작하려면 다음을 입력하십시오.
edit
- main.c 파일에서 편집기를 시작하려면 다음을 입력하십시오.
edit main.c
- do_count() 프로시저가 포함된 파일에서 편집기를 시작하려면 다음을 입력하십시오.
edit do_count
list 부속 명령, vi 또는 vedit 명령을 참조하십시오. AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Changing the Current File or Procedure 및 Displaying the Current File을 참조하십시오.
enable 부속 명령
enable { Number … all }
enable 부속 명령은 디버그 이벤트와 연관된 추적 및 정지를 사용 가능하게 합니다. 사용 가능하게 할 추적 및 정지는 Number 매개변수를 통해 지정할 수 있으며, 모든 추적 및 정지는 all 플래그를 사용하여 사용 가능하게 할 수 있습니다. dbx 디버그 프로그램에 의해 추적 및 정지에 연관된 이벤트 숫자를 표시하려면 status 부속 명령을 사용하십시오.
플래그
all | 추적과 정지를 모두 제거합니다. |
예제
- 응용프로그램에서 모든 추적 및 정지를 사용 가능하게 하려면 다음을 입력하십시오.
enable all
- 이벤트 번호 4에 대한 추적 및 정지를 사용 가능하게 하려면 다음을 입력하십시오.
enable 4
자세한 정보는 disable 부속 명령, delete 부속 명령, status 부속 명령을 참조하십시오.
또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Setting and Deleting Breakpoints를 참조하십시오.
fd 부속 명령
fd [ raw ] [ start [ end ] ]
fd 부속 명령은 파일 설명자 정보를 표시합니다. raw 옵션을 사용하면 출력이 원시 16진 형식으로 표시됩니다. 다른 선택적 인수에는 start와 end 색인이 포함됩니다. 색인을 지정하지 않으면, 사용 가능한 모든 파일 설명자에 대한 정보가 표시됩니다. 하나의 색인을 사용하면 단일 파일 설명자가 표시되고 두 개를 사용하면 포함 범위가 표시됩니다.
예제
- 16진으로 된 모든 파일 설명자에 대한 정보를 보려면 다음을 입력하십시오.
fd raw
- 3 – 5 범위의 파일 설명자에 대한 정보를 보려면 다음을 입력하십시오.
fd 3 5
file 부속 명령
file [ File ]
file 부속 명령은 현재 소스 파일을 File 매개변수에서 지정한 파일로 변경합니다. 그 파일에 쓰지는 않습니다. File 매개변수에 파일에 대한 전체 경로 이름을 지정할 수 있습니다. File 매개변수에 경로가 지정되어 있지 않으면, dbx 프로그램은 사용 경로를 검색하여 파일을 찾으려고 합니다. File 매개변수를 지정하지 않으면, file 부속 명령은 현재 소스 파일의 이름을 표시합니다. 경로를 알 수 있는 경우, file 부속 명령은 파일의 전체 또는 상대 경로도 표시합니다.
예제
- 현재 소스 파일을 main.c 파일로 변경하려면 다음을 입력하십시오.
file main.c
- 현재 소스 파일 이름을 표시하려면, 다음을 입력하십시오.
file
func 부속 명령을 참조하십시오. AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Changing the Current File or Procedure 및 Displaying the Current File을 참조하십시오.
func 부속 명령
func [ Procedure ]
func 부속 명령은 현재 함수를 Procedure 매개변수에서 지정한 프로시저나 함수로 변경합니다. Procedure 매개변수를 지정하지 않으면, 디폴트 현재 함수가 표시됩니다. 현재 기능을 내재적으로 변경하면 현재 소스 파일은 새로운 함수가 포함된 파일로 변경됩니다. 이름 해석에 사용된 현재 유효범위도 변경됩니다.
예제
- 현재 함수를 do_count 프로시저로 변경하려면 다음을 입력하십시오.
func do_count
- 현재 함수 이름을 표시하려면, 다음을 입력하십시오.
func
file 부속 명령을 참조하십시오. AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Changing the Current File or Procedure를 참조하십시오.
goto 부속 명령
gotoSourceLine
goto 부속 명령은 지정된 소스 행이 다음에 실행되도록 합니다. 일반적으로, 소스 행은 현재 소스 행과 동일한 함수 내에 들어 있어야 합니다. 이 제한사항을 대체하려면 set 부속 명령에 $unsafegoto 플래그를 사용하십시오.
예제
다음 행이 행 6에서 실행되도록 변경하려면 다음을 입력하십시오.
goto 6
cont 부속 명령, gotoi 부속 명령 및 set 부속 명령을 참조하십시오.
gotoi 부속 명령
gotoi Address
gotoi 부속 명령은 프로그램 계수기 주소를 Address 매개변수에서 지정한 주소로 변경합니다.
예제
주소를 0x100002b4로 변경하려면 다음을 입력하십시오.
gotoi 0x100002b4
goto 부속 명령을 참조하십시오.
handler 부속 명령
handler { atfork | cancel_cleanup [ all | pthread id ] }
handler 부속 명령은 각각 pthread_atfork 및 pthread_cleanup_push를 사용하여 등록된 atfork 또는 취소 정리 처리기에 대한 정보를 표시합니다. atfork 옵션을 사용하면 pre, parent 및 child atfork 처리기로 등록된 루틴의 이름이 표시됩니다(비posix 준수 atfork 처리기의 경우 각각의 인수도 같이 표시됩니다). 특정 pthread를 지정하는 선택적 pthread id 매개변수나 모든 pthread를 지정하는 all 매개변수와 함께cancel_cleanup 옵션을 사용하면 등록된 모든 취소 정리 처리기가 표시됩니다. 어느 매개변수도 지정하지 않으면, 현재 pthread의 취소 정리 처리기가 표시됩니다(있는 경우).
예제
- 등록된 모든 atfork 처리기에 대한 정보를 보려면 다음을 입력하십시오.
handler atfork
- 현재 pthread에 대해 등록된 취소 정리 처리기에 대한 정보를 보려면 다음을 입력하십시오.
handler cancel_cleanup
- $t2라고 하는 pthread 오브젝트에 대해 등록된 취소 정리 처리기에 대한 정보를 보려면 다음을 입력하십시오.
handler cancel_cleanup 2
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 | 스레드 관련 오브젝트에 액세스하기 위한 dbx 부속 명령을 나열합니다. |
expressions | dbx 표현식 구문과 연산자를 설명합니다. |
scope | dbx가 유효범위가 다른 이름을 어떻게 결정하는지를 설명합니다. |
set_variables | 사용법 설명과 함께 dbx 디버그 변수를 나열합니다. |
usage | 간략한 설명과 함께 일반 dbx 부속 명령을 나열합니다. |
예제
- 사용 가능한 dbx 부속 명령과 주제를 모두 나열하려면 다음을 입력하십시오.
도움말
- 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 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Handling Signals를 참조하십시오.
kthread 부속 명령
kthread [ raw ] [ info | ru ] [ tid ]
kthread 부속 명령은 커널 스레드에 대한 정보를 표시합니다. raw 옵션을 사용하면 사용자가 읽기 쉬운 형식으로 표시 가능한지 여부에 관계없이 모든 출력이 16진으로 표시됩니다. 인수를 사용하지 않으면 모든 커널 스레드에 대한 요약 정보가 표시됩니다. 숫자 스레드 ID를 제공하면 dbx는 단일 스레드에 대한 정보를 표시합니다. info 옵션은 사용자 스레드 구조를 통해 스레드에 대한 자세한 출력을 생성합니다. ru 옵션을 사용하면 ti_ru 데이터 멤버를 표시합니다. 여기에는 사용 정보가 포함됩니다.
사용자 스레드에 대한 자세한 정보는 thread 부속 명령을 참조하십시오.
예제
- 현재 실행 중인 스레드에 대한 정보를 찾으려면, 먼저 명령행에 다음과 같이 입력하여 모든 스레드에 대한 정보를 확보해야 합니다.
kthread
dbx가 프로세스를 정지하기 바로 전에 실행 중이었던(또는 실행 가능했던) 스레드에 별표가 표시됩니다. 출력을 기초로 올바른 스레드 ID를 선택하고 다음을 입력하십시오.
kthread info tid
- 모든 스레드에 대한 자원 정보를 16진으로 보려면 다음을 입력하십시오.
kthread raw ru
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 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의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 제품군 또는 POWER PC 구조의 명령을 디어셈블할 수 있습니다. 디폴트 모드에서는 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 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Debugging at the Machine Level with dbx를 참조하십시오.
malloc 부속 명령
malloc [ > File ]
옵션이 없는 malloc 부속 명령은 프로세스가 시작한 이후의 malloc 사용 통계 요약과 사용 가능하게 된 옵션 및 할당 정책 리스트를 인쇄합니다.
malloc [ allocation [ { address | size | heap | pid | tid | time } { “<” | “==” | “>” “!=” ] } Value ] ] [ > File ]
malloc 부속 명령에 대한 allocation 옵션은 프로세스가 현재 보유하는 모든 할당을 분류된 리스트로 표시합니다. 선택적 attribute RELOP value 인수를 사용하면 활성 할당 선택 범위가 좁혀집니다.
malloc [ freespace [ { address | size | heap } { “<” | “==” | “>” | “!=” ] } Value ] ] [ > File ]
malloc 부속 명령에 대한 freespace 옵션은 프로세스 힙에서 사용 가능한 모든 여유 공간을 분류된 리스트로 표시합니다. 선택적 attribute RELOP value 인수를 사용하면 여유 공간 노드 선택 범위가 좁혀집니다.
플래그
> File | 지정된 파일로 출력을 방향 재지정합니다. |
자세한 정보는 AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서 malloc 서브시스템을 사용한 시스템 메모리 할당을 참조하십시오.
map 부속 명령
map { [Format] [ entry ModuleNumber [ , ModuleNumber ] | Address | SymbolName ] [ > File ] }
map 부속 명령은 응용프로그램의 로드 부분에 대한 특징을 표시합니다. 이 정보에는 로드된 각 모듈의 모듈 이름, 멤버 이름, 텍스트 기점, 텍스트 끝, 텍스트 길이, 데이터 기점, 데이터 끝, 데이터 길이 및 파일 설명자가 포함될 수 있습니다. 표시할 항목은 다음 방식으로 지정할 수 있습니다.
- ModuleNumber 매개변수를 사용하여 단일 항목 지정
- 쉼표로 구분되는 두 개의 ModuleNumber 매개변수를 사용하여 항목 범위 지정
- Address 매개변수를 사용하여 로드된 모듈로 해석될 주소 지정
- SymbolName 매개변수를 사용하여 로드된 모듈로 해석될 기호 이름 지정
위의 스펙을 전혀 사용하지 않고 호출한 경우, map 부속 명령은 응용프로그램의 모든 로드 부분에 대한 정보를 표시합니다.
Format 인수는 로드된 모듈 설명에 대한 출력 모드를 지정합니다. 다음 리스트에 가능한 Format 인수 값이 있습니다.
abbr | 축약된 출력 모드를 지정합니다. 이 출력은 로드된 모듈마다 해당 모듈의 항목 번호, 모듈 이름 및 선택적 멤버 이름을 포함하는 단일 행으로 구성됩니다. |
normal | 정상적인 출력 모드를 지정합니다. 이 출력은 로드된 각 모듈의 이름, 항목 번호, 모듈 이름, 멤버 이름, 텍스트 기점, 텍스트 길이, 데이터 기점, 데이터 길이 및 파일 설명자로 구성됩니다. |
raw | 원시 출력 모드를 지정합니다. 이 출력은 모듈마다 항목 번호, 선택적 멤버 이름이 같이 있는 모듈 이름, 텍스트 기점, 텍스트 끝, 텍스트 길이, 데이터 기점, 데이터 끝, 데이터 길이 및 파일 설명자 필드들을 공백으로 구분하여 포함하는 형식화되지 단일 행으로 구성됩니다. |
verbose | 상세 출력 모드를 지정합니다. 이 출력은 로드된 각 모듈의 이름, 항목 번호, 모듈 이름, 멤버 이름, 텍스트 기점, 텍스트 끝, 텍스트 길이, 데이터 기점, 데이터 끝, 데이터 길이 및 파일 설명자로 구성됩니다. |
Format 매개변수를 지정하지 않으면, DBX는 $mapformat 내부 변수 값을 사용합니다. Format 매개변수를 지정하지 않고 $mapformat을 설정하지 않은 경우, DBX는 정규 모드로 로드된 모듈 정보를 표시합니다.
플래그
> File | 지정된 파일로 출력을 방향 재지정합니다. |
entry ModuleNumber [ , ModuleNumber ] | 표시할 모듈 또는 모듈 범위를 지정합니다. |
예제
- 로드된 모든 모듈을 축약 모드로 나열하려면 다음을 입력하십시오.
map abbr
- 로드된 모듈 3 – 5를 상세 모드로 나열하려면 다음을 입력하십시오.
map verbose entry 3,5
- 주소 0x20001000을 포함하는 로드된 모듈을 나열하려면 다음을 입력하십시오.
map 0x20001000
- foo 변수를 포함하는 로드된 모듈을 나열하려면 다음을 입력하십시오.
map foo
자세한 정보는 $mapformat 내부 변수를 참조하십시오. AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서에서 dbx로 시스템 레벨에서 디버깅도 참조하십시오.
move 부속 명령
moveSourceLine
move 부속 명령은 표시할 다음 행을 SourceLine 매개변수에서 지정한 행으로 변경합니다. 이 부속 명령은 @(at 기호) 변수의 값을 변경합니다.
SourceLine 변수는 :(콜론)과 정수가 뒤에 붙는 파일 이름 문자열로 또는 정수로 지정할 수 있습니다.
예제
- 나열할 다음 행을 12 행으로 변경하려면 다음을 입력하십시오.
move 12
- 나열할 다음 행을 sample.c 파일에 있는 5 행으로 변경하려면 다음을 입력하십시오.
move "sample.c":5
list 부속 명령을 참조하십시오. AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Displaying the Current File을 참조하십시오.
multproc 부속 명령
multproc [ on |parent|child| off ]
multproc 부속 명령은 분기 실행되고 초과 프로세스가 작성되었을 때 dbx 디버그 프로그램의 작동을 지정합니다. on 플래그는 분기의 하위 경로를 디버그하기 위해 새로운 dbx 세션을 작성하도록 지정하는 데 사용됩니다. 원래 dbx는 상위 경로의 디버그를 계속합니다. parent 플래그와 child 플래그를 사용하여 수행해야할 분기의 단일 경로를 지정합니다. off 플래그를 제외한 모든 플래그를 사용하면 dbx는 초과 프로세스를 수행합니다. off 플래그는 멀티프로세스 디버깅을 사용 불가능하게 합니다. 플래그를 지정하지 않으면, multproc 부속 명령은 멀티프로세스 디버깅의 현재 상태를 리턴합니다.
dbx 프로그램은 멀티프로세스 디버깅을 위해 Xwindows를 사용합니다. dbx 프로그램은 다중 프로세스에 필요한 만큼의 창을 엽니다. 각 하위 창의 제목은 서브프로세스의 프로세스 ID(pid)입니다. 프로세스간을 전환하려면, Xwindows 처리 기법을 사용하여 dbx 세션이 표시된 창을 활성화하십시오. 시스템에서 Xwindows를 지원하지 않으면 디버거가 분기될 때 경고 메시지가 발행되고 dbx 프로그램은 상위 프로세스만 디버깅을 계속합니다. 멀티프로세스 디버깅은 다음과 같은 이유로 성공하지 못할 수도 있습니다.
- dbx 프로그램이 Xwindows 환경에서 실행되지 않을 경우
- Xwindows는 실행되지만 dbx 전역 변수 $xdisplay가 유효한 표시장치 이름으로 설정되지 않은 경우 $xdisplay 변수는 쉘 DISPLAY 환경 변수로 초기화됩니다. setName=Expressiondbx 부속 명령을 사용하여 표시장치 이름을 변경할 수 있습니다.
- /tmp 디렉토리에서는 디버깅 프로그램에 대한 읽기나 쓰기 액세스를 허용하지 않습니다. dbx 프로그램은 Xwindow 환경을 제어할 때 이 디렉토리에 적은 공간을 필요로 합니다.
- 시스템이 새로운 Xwindow를 수용할 자원을 충분히 가지고 있지 못한 경우.
$xdisplay가 원격 표시장치로 설정되면, 사용자는 새로 작성된 Xwindow를 보지 못할 수도 있습니다. $xdisplay 설정이 올바르지 못하면, Xwindows 또는 다른 시스템 자원이 장애의 원인을 알려줍니다.
dbx 프로그램은 서로 다른 장애 유형을 구별하지 못하지만, 부속 명령이 실패했을 때 다음과 같은 메시지를 수신합니다.
경고: dbx 부속 명령 다중 프로세스가 실패했습니다. dbx에서 사용 불가능한 다중 프로세스를 계속하려고 했습니다.
새로 작성되는 창을 사용자 정의로 구성하려면 .Xdefaults 파일에 있는 dbx_term 응용프로그램 이름으로 정의할 수 있습니다.
플래그
on | 멀티프로세스 디버깅이 가능합니다. |
off | 멀티프로세스 디버깅이 불가능합니다. |
예제
- 멀티프로세스 디버깅의 현재 상태를 검사하려면, 다음을 입력하십시오.
multproc
- 멀티프로세스 디버깅을 사용하려면, 다음을 입력하십시오.
multproc on
- 멀티프로세스 디버깅을 사용 불가능하게 하려면, 다음을 입력하십시오.
multproc off
screen 부속 명령과 fork 서브루틴을 참조하십시오. AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Debugging Programs Involving Multiple Processes를 참조하십시오.
mutex 부속 명령
mutex [ lock | unlock | thnum | utid | MutexNumber … ]
mutex 부속 명령은 mutex에 대한 정보를 표시합니다. MutexNumber 매개변수가 제공되면, mutex 부속 명령은 지정된 mutex에 대한 정보를 표시합니다. 플래그나 매개변수를 지정하지 않으면, mutex 부속 명령은 모든 mutex에 대한 정보를 표시합니다.
각 mutex에 나열되는 정보는 다음과 같습니다.
mutex | $mMutexNumber 형식으로 mutex의 기호 이름을 나타냅니다. |
type | mutex의 유형, 즉 non-rec(비재귀), recursi(재귀) 또는 fast를 나타냅니다. |
obj_addr | mutex의 메모리 주소를 나타냅니다. |
lock | mutex의 잠금 상태, 즉 mutex가 잠겼으면 예, 잠기지 않았으면 아니오를 나타냅니다. |
owner | mutex가 잠금 상태인 경우에 mutex를 갖는 사용자 스레드의 기호 이름을 나타냅니다. |
blockers | 이 mutex 변수에 블록화되어 있는 사용자 스레드를 나열합니다. |
주: dbx 디버그 프로그램의 print 부속 명령은 기호로 된 mutex 이름을 인식하며, 해당 오브젝트의 상태를 표시하는 데 사용될 수 있습니다.
플래그
lock | 잠금 상태인 mutex에 관한 정보를 표시합니다. |
unlock | 잠금 상태가 아닌 mutex에 관한 정보를 표시합니다. |
thnum | 특정 스레드가 보유하는 모든 mutex에 대한 정보를 표시합니다. |
utid | 사용자 스레드 id가 주어진 사용자 스레드 id와 일치하는 사용자 스레드가 보유하는 모든 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
- 사용자 스레드 id가 0x0001인 스레드가 보유하는 모든 mutex에 대한 정보를 표시하려면 다음을 입력하십시오.
mutex utid 0x0001
attribute 부속 명령, condition 부속 명령, print 부속 명령, thread 부속 명령을 참조하십시오.
또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그의 Using Mutexes를 참조하십시오.
next 부속 명령
next [ Number ]
next 부속 명령은 소스의 다음 행까지 응용프로그램을 실행합니다. Number 매개변수는 next 부속 명령이 실행될 횟수를 지정합니다.Number 매개변수를 지정하지 않으면, next는 한 번만 실행됩니다.
복수의 스레드 응용프로그램에서 next 부속 명령을 실행하면, 모든 사용자 스레드는 조작 중에 실행되지만 프로그램은 실행 중인 스레드가 지정된 소스 행에 도달할 때까지 계속 실행됩니다. 스레드만이 실행되도록 하려면, set 부속 명령을 사용하여 $hold_next 변수를 설정하십시오. 이 변수를 설정하면 실행 중인 스레드는 블록화된 스레드 중 하나가 보유 중인 잠금을 기다릴 수 있기 때문에 교착 상태가 발생할 수 있습니다.
예제
- 다음 소스 행까지 실행을 계속하려면 다음을 입력하십시오.
next
- 현재 소스 행 다음의 세 번째 소스 행까지 실행을 계속하려면 다음을 입력하십시오.
next 3
cont 부속 명령, goto 부속 명령, nexti 부속 명령, set 부속 명령 및 step 부속 명령을 참조하십시오.
nexti 부속 명령
nexti [ Number ]
nexti 부속 명령은 다음 명령까지 응용프로그램을 실행합니다. Number 매개변수는 nexti 부속 명령이 실행될 횟수를 지정합니다. Number매개변수를 지정하지 않으면, nexti는 한 번만 실행됩니다.
복수의 스레드 응용프로그램에서 nexti 부속 명령을 실행하면, 모든 사용자 스레드는 조작 중에 실행되지만 프로그램은 실행 중인 스레드가 지정된 명령에 도달할 때까지 계속 실행됩니다. 스레드만이 실행되도록 하려면, set 부속 명령을 사용하여 $hold_next 변수를 설정하십시오. 이 변수를 설정하면 실행 중인 스레드는 블록화된 스레드 중 하나가 보유 중인 잠금을 기다릴 수 있기 때문에 교착 상태가 발생할 수 있습니다.
예제
- 다음 기계 명령어까지 실행을 계속하려면 다음을 입력하십시오.
nexti
- 현재 기계 명령어 다음의 세 번째 기계 명령어까지 실행을 계속하려면 다음을 입력하십시오.
nexti 3
gotoi 부속 명령, next 부속 명령, set 부속 명령 및 stepi 부속 명령을 참조하십시오. 또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Running a Program at the Machine Level을 참조하십시오.
onceblock 부속 명령
onceblock [ uninit | done ]
onceblock 부속 명령은 pthread_once 루틴을 사용하여 등록한 초기화 코드 블록에 대한 정보를 표시합니다. 인수가 없을 경우, 등록된 모든 1회 블록에 대한 정보가 표시됩니다. 선택적 uninit 및 done 플래그는 각각 실행하지 않았거나 이미 실행한 1회 블록만 표시합니다. 숫자 1회 ID를 제공하면 단일 1회 블록에 대한 정보가 표시됩니다.
예제
- 1회 블록이 아직 실행되지 않았는지 보려면 다음을 입력하십시오.
onceblock uninit
플러그인 부속 명령
plugin [ Name [ Command ] ]
플러그인 부속 명령은 Command 매개변수로 지정한 명령을 Name 매개변수로 지정한 플러그인으로 전달합니다. 매개변수가 지정되지 않으면, 사용 가능한 모든 플러그인의 이름이 표시됩니다.
예제
- 사용 가능한 모든 플러그인을 나열하려면, 다음을 입력하십시오.
plugin
- “sample”이라는 플러그인의 부속 명령 “help”를 호출하려면 다음을 입력하십시오.
plugin sample help
- “xyz“라는 플러그인의 부속 명령 “interpret 0x20000688“을 호출하려면 다음을 입력하십시오.
plugin xyz interpret 0x20000688
pluginload 부속 명령 및 pluginunload 부속 명령을 참조하십시오. AIX 5L 버전 5.3 일반 프로그래밍 개념에서 dbx 플러그인 프레임워크의 개발도 참조하십시오.
pluginload 부속 명령
pluginload File
pluginload 부속 명령은 File 매개변수로 지정된 플러그인을 로드합니다. File 매개변수는 플러그인에 대한 경로를 지정해야 합니다.
예제
“/home/user/dbx_plugins/libdbx_sample.so“에 있는 “sample“이라는 플러그인을 로드하려면 다음을 입력하십시오.
pluginload /home/user/dbx_plugins/libdbx_sample.so
plugin 부속 명령 및 pluginunload 부속 명령을 참조하십시오. AIX 5L 버전 5.3 일반 프로그래밍 개념에서 dbx 플러그인 프레임워크의 개발도 참조하십시오.
pluginunload 부속 명령
pluginunload Name
pluginunload 부속 명령은 Name 매개변수가 지정한 플러그인을 로드 해제합니다.
예제
“sample” 플러그인을 로드 해제하려면, 다음을 입력하십시오.
pluginunload sample
plugin 부속 명령 및 pluginload 부속 명령을 참조하십시오. AIX 5L 버전 5.3 일반 프로그래밍 개념에서 dbx 플러그인 프레임워크의 개발도 참조하십시오.
print 부속 명령
print Expression …
printProcedure ( [ Parameters ] )
print 부속 명령은 다음 중의 한 가지를 수행합니다.
- Expression 매개변수에서 지정한 표현식 리스트의 값을 인쇄합니다.
- Procedure 매개변수에서 지정한 프로시저를 실행하고 해당 프로시저의 리턴값을 인쇄합니다. 매개변수는 프로시저로 전달됩니다.
예제
- 왼쪽으로 2비트 이동한 x 값과 y 값을 표시하려면 다음을 입력하십시오.
print x, y << 2
- 인수 0과 함께 sbrk 루틴을 호출하여 리턴값을 표시하려면 다음을 입력하십시오.
print sbrk(0)
assign 부속 명령, call 부속 명령 및 set 부속 명령을 참조하십시오.
proc 부속 명령
proc [ raw ] [ cred | cru | ru | sigflags | signal ]
proc 부속 명령은 프로세스에 대한 정보를 표시합니다. raw 옵션을 사용하면 사용자가 읽기 쉬운 형식의 해석 값보다는 16진으로 출력이 표시됩니다. 추가 인수 없이 proc 부속 명령을 사용하면 사용자 프로세스 데이터 구조에 저장된 대로, 프로세스에 대한 일반 정보를 출력합니다. cred 옵션은 프로세스 신임을 설명하는 pi_cred 데이터 멤버 내용을 표시합니다. cru 및 ru 옵션은 각각 자원 사용 정보를 포함하는 데이터 멤버 pi_cru 및 pi_ru를 표시합니다. sigflags 및 signal 옵션은 현재 신호 상태와 등록된 신호 처리기에 관련된 정보를 pi_sigflags 및pi_signal 데이터 멤버에 포함된 그대로 표시합니다.
예제
- 현재 프로세스(또는 코어 파일)에 대한 자원 사용 정보를 원시 16진으로 보려면 다음을 입력하십시오.
proc raw ru
- 신호 처리기 정보를 보려면 다음을 입력하십시오.
proc signal
prompt 부속 명령
prompt [ “String” ]
prompt 부속 명령은 dbx 명령 프롬프트를 String 매개변수가 지정한 문자열로 변경합니다.
예제
프롬프트를 dbx>로 변경하려면, 다음을 입력하십시오.
prompt "dbx>"
AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Defining a New dbx Prompt를 참조하십시오.
quit 부속 명령
quit
quit 부속 명령은 dbx 디버깅 세션에서 실행 중인 모든 프로세스를 종료합니다.
detach 부속 명령을 참조하십시오.
registers 부속 명령
registers [ >File ]
registers 부속 명령은 범용 레지스터, 시스템 제어 레지스터, 부동소수점 레지스터, 현재 명령 레지스터를 표시합니다.
- 범용 레지스터는 $rNumber 변수가 지정하는데, 여기서 Number 매개변수는 레지스터 번호를 나타냅니다.
주: 레지스터 값을 0xdeadbeef 16진수의 값으로 설정할 수 있습니다. 0xdeadbeef 16진 값은 프로세스 초기화시 범용 레지스터에 지정된 초기 값입니다.
- 부동소수점 레지스터는 $frNumber 변수로 표시됩니다. 디폴트로, 부동소수점 레지스터는 표시되지 않습니다. 부동소수점 레지스터를 표시하려면 unset $noflregs dbx 부속 명령을 사용합니다.
주: 현재 스레드가 커널 모드에 있는 경우에는 registers 부속 명령이 레지스터를 표시할 수 없습니다.
플래그
>File | 지정된 파일로 출력을 방향 재지정합니다. |
set 부속 명령과 unset 부속 명령을 참조하십시오. 또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 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 부속 명령을 참조하십시오.
resource 부속 명령
resource { owner | waiter } [ all | pthread id ]
resource 부속 명령은 현재 보유하고 있거나 대기 중인 자원 pthread에 대한 정보를 표시합니다. 첫 번째 인수(필수)는 자원을 소유하거나 자원을 대기 중인 pthread를 보는 데 관심이 있는지 여부를 표시합니다. 두 번째 인수는 모든 pthread, 아니면 특정 pthread를 표시하기 위해 사용할 수 있습니다. 전혀 지정하지 않으면, 현재 pthread에 관련된 정보만 표시됩니다(적용 가능할 경우).
예제
- 현재 pthread가 자원을 보유하는지 확인하려면 다음을 입력하십시오.
resource owner
- pthread가 대기 중인 자원을 보려면 다음을 입력하십시오.
resource waiter all
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[#] | 쓰기 상태에 있는 스레드입니다. #는 쓰기 상태에 있는 스레드의 총 수입니다. |
rsleep[#] | 읽기 상태에 있는 스레드입니다. #는 읽기 상태에 있는 스레드의 총 수입니다. |
주: 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 프로그램은 서로 다른 장애 유형을 구별하지 못하지만, 부속 명령이 실패했을 때 다음과 같은 메시지를 송신합니다.
경고: dbx 부속 명령 화면이 실패했습니다. dbx는 계속 진행합니다.
$xdisplay가 원격 표시장치로 설정되면, 사용자는 새로 작성된 Xwindow를 보지 못할 수도 있습니다. $xdisplay 설정이 올바르지 못하면, Xwindows 또는 다른 시스템 자원이 문제점을 보고합니다.
새로 작성되는 창을 사용자 정의로 구성하려면 .Xdefaults 파일에 있는 dbx_term 응용프로그램 이름으로 정의할 수 있습니다.
예제
dbx 명령 상호작용을 위해 Xwindow를 열려면 다음을 입력하십시오.
screen
AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Separating dbx Output From Program Output 및 AIX 5L Version 5.3 AIXwindows Programming Guide의 AIXwindows overview를 참조하십시오.
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 부속 명령 중에 실행하는 스레드를 제외한 모든 스레드를 보류합니다. 이 변수를 설정하면 실행 중인 스레드는 블록화된 스레드 중 하나가 보유 중인 잠금을 기다릴 수 있기 때문에 교착 상태가 발생할 수 있습니다. |
$ignoreifhandler | 등록된 처리기가 있는 사용자 프로그램이 신호를 수신할 때는 정지하지 마십시오. |
$ignoreload | 프로그램에서 load , unload 또는 loadbind 서브루틴을 수행할 경우 정지하지 않습니다. |
$ignorenonbptrap | 사용자 프로그램에 비중단점 트랩 명령어가 있으며 등록된 SIGTRAP 처리기가 있으면 정지하지 마십시오. |
$instructionset | 디폴트 디어셈블리 모드를 대체합니다. 다음 리스트에는 가능한 Expression 매개변수 값이 포함되어 있습니다.
Expression 매개변수에 대한 값을 설정하지 않은 경우 dbx 프로그램에서는 디폴트 어셈블리 모드를 사용합니다. |
$java | 설정 시, Java 응용프로그램을 디버그하기 위해 모드에 dbx를 위치시켜 다음 변수도 설정합니다. 설정 해제 시, 다음 변수도 설정 해제합니다.
|
$listwindow | 함수의 주위에 있는 나열할 행 수와 list 부속 명령이 매개변수 없이 사용될 때 나열할 행 수를 지정합니다. 디폴트는 10행입니다. |
$mapaddrs | 주소 맵핑을 시작합니다. $mapaddrs를 설정하지 않으면 주소 맵핑이 정지됩니다. |
$mapformat | map 부속 명령의 디폴트 출력 모드를 지정합니다.
Expression 매개변수에 값을 설정하지 않은 경우, dbx 프로그램은 “normal” 출력 모드를 사용합니다. |
$mnemonics | 디어셈블링할 경우 dbx 프로그램에서 사용할 니모닉 세트를 변경합니다.
Expression 매개변수에 대한 값을 설정하지 않은 경우 dbx 프로그램에서는 지정한 명령 세트와 가장 가깝게 일치하는 니모닉을 사용합니다. |
$noargs | 부속 명령에서 where, up, down, dump와 같은 인수를 생략합니다. |
$noflregs | registers 부속 명령에서 부동소수점 레지스터의 표시를 생략합니다. |
$octin | 8진수로 주소를 해석합니다. |
$octints | 8진수로 정수를 인쇄합니다. |
$pretty | print 부속 명령과 함께 pretty printed 형식으로 복합 C 및 C++ 데이터 구조(strut, union, array)를 표시합니다.
|
$repeat | 입력된 명령이 없으면 이전 명령을 반복합니다. |
$sigblock | 사용자 프로그램으로 신호를 블록화합니다. |
$stepignore | 디버깅 정보를 사용할 수 없는 또다른 루틴을 호출하는 소스 행에서 step 명령이 실행될 때 dbx 명령의 작동을 제어합니다. 이 변수는 step 부속 명령이 디버깅 정보를 사용할 수 없는 대형 루틴으로 넘어갈 수 있도록 합니다. 다음 리스트에는 가능한 Expression 매개변수 값이 포함되어 있습니다.
|
$thcomp | $thcomp가 설정되면, th- 스레드 명령에 의해 표시되는 정보는 압축된 형태로 표시됩니다. |
$unsafeassign | assign 문의 양 면 사이의 엄격한 유형 검사를 중단합니다. $unsafeassign 변수가 설정되었더라도 assign문의 양 끝에는 크기가 다른 기억영역 유형이 포함되지 않을 수 있습니다. |
$unsafebounds | 배열의 첨자 검사를 중단합니다. |
$unsafecall | 서브루틴이나 함수 호출을 위한 인수에 대한 엄격한 유형 검사를 중단합니다. |
$unsafegoto | goto 부속 명령 대상 검사를 중단합니다. |
$vardim | 경계를 모르는 상태에서 배열을 인쇄하는 경우 사용할 차원 범위를 지정합니다. 디폴트 값은 10입니다. |
$xdisplay | multproc 부속 명령이나 screen 부속 명령과 함께 사용할 Xwindows 표시장치 이름을 지정합니다. 디폴트 값은 쉘 DISPLAY 변수의 값입니다. |
$unsafe 변수는 오류 발견 시 dbx 디버그 프로그램의 사용을 제한합니다.
예제
- 나열될 디폴트 행 번호를 20으로 변경하려면 다음을 입력하십시오.
set $listwindow=20
- assign 부속 명령에서 유형 검사를 사용하지 않으려면 다음을 입력하십시오.
set $unsafeassign
- AIX 5.1 이전 버전에 대하여 PowerPC 601 RISC 마이크로프로세서에 대한 기계 명령어를 디어셈블하려면, 다음을 입력하십시오.
set $instructionset="601"
unset 부속 명령을 참조하십시오. 또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 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 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Running Shell Commands from dbx를 참조하십시오.
skip 부속 명령
skip [ Number ]
skip 부속 명령은 현재 정지점으로부터 응용프로그램의 실행을 계속합니다. Number 매개변수의 값과 동일한 수의 중단점이 생략되고 다음 중단점에 도달하거나 프로그램이 종료될 때 실행이 중단됩니다. Number 매개변수를 지정하지 않으면 디폴트는 1이 됩니다.
예제
두 번째 중단점을 만날 때까지 계속 실행하려면 다음을 입력하십시오.
skip 1
cont 부속 명령도 참조하십시오.
source 부속 명령
sourceFile
source 부속 명령은 File 매개변수에서 지정한 파일로부터 dbx 부속 명령을 읽습니다.
예제
cmdfile 파일에서 dbx 부속 명령을 읽으려면 다음을 입력하십시오.
source cmdfile
AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Reading dbx Subcommands from a File을 참조하십시오.
status 부속 명령
status [ >File ]
status 부속 명령은 모든 사용자 정의 중단점, 추적점 및 감시점을 표시합니다. status 부속 명령은 사용 가능하게 된 이벤트는 이벤트 번호를 대괄호로 묶어서 나열하고 사용 불가능하게 된 이벤트는 점으로 이벤트 번호를 묶어서 나열합니다. > 플래그는 status 부속 명령의 출력을 File 매개변수에 지정한 파일로 전송합니다.
플래그
>File | File로 출력을 방향 재지정합니다. |
예제
- 모든 사용자 정의 중단점, 추적점 및 감시점을 표시하려면 다음을 입력하십시오.
status
출력은 다음과 유사합니다.
[1] stop at 13 [2] stop at 14 .3. stop at 15 .4. stop at 16 [5] stop at 17
위의 예제 출력에서, 이벤트 3 및 4는 사용 불가능합니다.
dbx명령의clear 부속 명령, delete 부속 명령, stop 부속 명령 및 trace 부속 명령을 참조하십시오.
또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Setting and Deleting Breakpoints를 참조하십시오.
step 부속 명령
step [ Number ]
step 부속 명령은 응용프로그램의 소스 행을 실행합니다. Number 매개변수를 사용하여 실행될 행의 수를 지정하십시오. Number 매개변수를 생략하면, 디폴트는 1이 됩니다.
복수 스레드 응용프로그램에서 step 부속 명령을 사용하면, 모든 사용자 스레드는 조작 중에 실행되지만 프로그램은 실행 중인 스레드가 지정된 소스 행에 도달할 때까지 계속 실행됩니다. 스레드만이 실행되도록 하려면, set 부속 명령을 사용하여 $hold_next 변수를 설정하십시오. 이 변수를 설정하면 실행 중인 스레드는 블록화된 스레드 중 하나가 보유 중인 잠금을 기다릴 수 있기 때문에 교착 상태가 발생할 수 있습니다.
주: step 부속 명령의 작동을 제어하려면 set 부속 명령의 $stepignore 변수를 사용합니다. $stepignore 변수는 step 부속 명령이 디버깅 정보를 사용할 수 없는 대형 루틴으로 넘어갈 수 있도록 합니다.
예제
- 한 개의 소스 행 실행을 계속하려면, 다음을 입력하십시오.
step
- 5개의 소스 행 실행을 계속하려면, 다음을 입력하십시오.
step 5
- 다음 예제 코드
60 printf ("hello world ₩n")에서 설명한 것처럼 dbx 프로그램에서 printf 함수를 단일 단계처리하지 못하게 하려면
다음을 입력하십시오.
set $stepignore="function"; step
cont 부속 명령, goto 부속 명령, next 부속 명령, set 부속 명령, stepi 부속 명령을 참조하십시오.
stepi 부속 명령
stepi [ Number ]
stepi 부속 명령은 응용프로그램의 명령을 실행합니다. Number 매개변수를 사용하여 실행될 명령의 수를 지정하십시오. Number 매개변수를 생략하면 디폴트는 1이 됩니다.
복수 스레드 응용프로그램에서 사용될 경우, stepi 부속 명령은 실행 중인 스레드만을 진행합니다. 다른 모든 사용자 스레드는 정지된 채 남아 있습니다.
예제
- 한 개의 기계 명령 실행을 계속하려면, 다음을 입력하십시오.
stepi
- 5개의 기계 명령 실행을 계속하려면 다음을 입력하십시오.
stepi 5
gotoi 부속 명령, nexti 부속 명령, step 부속 명령을 참조하십시오.
stop 부속 명령
stop { [Variable] [ at SourceLine | in Procedure | on load [“ModuleName“] ] [ if Condition ]}
stop 부속 명령은 특정 조건이 충족되면 응용프로그램을 정지합니다. 다음과 같은 경우에 프로그램이 정지됩니다.
- if Condition 플래그를 사용하면 Condition이 참이 됩니다.
- in Procedure 플래그를 사용하면 Procedure가 호출됩니다.
- Variable 매개변수를 지정하면 Variable 매개변수가 변경됩니다.
- at SourceLine 플래그를 사용하면 SourceLine 행 번호에 도달합니다.SourceLine 변수는 :(콜론)과 정수가 뒤에 붙는 파일 이름 문자열로 또는 정수로 지정할 수 있습니다.
- ModuleName 로드 모듈은 on load 플래그를 사용하고 ModuleName 매개변수를 지정한 경우에 로드 또는 로드 해제됩니다.선택적 ModuleName 변수를 단일 모듈 이름으로, 또는 다음 형식과 같이 멤버 이름과 쌍을 이루는 모듈 이름으로 지정할 수 있습니다.
ModuleName(MemberName)
- 로드된 모듈은 on load 플래그를 사용하고 ModuleName 매개변수를 지정하지 않은 경우에 로드 또는 로드 해제됩니다.
이 명령 다음에 dbx 디버그 프로그램은 사용자 명령 결과로 구성한 이벤트를 보고하는 메시지로 응답합니다. 메시지에는 명령에 대한 설명과 함께 중단점에 연관된 이벤트 ID가 들어 있습니다. 설명 구문은 사용자 명령과는 동일하지 않을 수도 있습니다. 예를 들면 다음과 같습니다.
stop in main
[1] stop in main
stop at 19 if x == 3
[2] stop at "hello.c":19 if x = 3
대괄호 안의 숫자는 중단점과 관련된 이벤트 ID입니다. dbx 디버그 프로그램은 이벤트 번호를 각 stop 부속 명령에 연관시킵니다. 이벤트 중 하나의 결과로 프로그램이 중단되면, 현재 행과 함께 이벤트 ID가 표시되어 어떤 이벤트가 프로그램을 정지시켰는지 알 수 있습니다. 사용자가 작성한 이벤트는 dbx가 작성한 이벤트와 합쳐져서, 이벤트 번호는 항상 순차적이지 않을 수 있습니다.
status 부속 명령을 사용하여 이 번호를 열람할 수 있습니다. status로부터의 출력을 파일로 방향 재지정할 수 있습니다. delete 또는 clear부속 명령을 사용하여 stop 부속 명령을 정지시키십시오.
복수 스레드 응용프로그램에서 사용자 스레드가 중단점과 만나게 되면 모든 사용자 스레드가 정지됩니다. 아래 예제 9에서 설명한 것처럼 조건을 지정하지 않으면 행이나 함수를 실행하는 사용자 스레드에서 소스 행이나 함수의 중단점 설정을 히트합니다. 자동으로 조건을 지정하는 별명은 다음과 같습니다.
- bfth(Function, ThreadNumber)
- blth(SourceLine, ThreadNumber)
ThreadNumber는 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 | 호출할 프로시저를 지정합니다. |
on load ModuleName | 모니터할 로드된 모듈을 지정합니다. |
예제
- 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 명령은 이벤트 ID별로 이벤트를 삭제합니다. clear 명령은 행 번호별로 중단점을 삭제합니다.
- thread $t5가 실행될 때만 func1 시작에 중단점을 위치시키려면, 다음 해당 명령 중의 하나를 입력하십시오.
stopi at &func1 if ($running_thread == 5)
또는
bfth(func1, 5)
- 모듈이 로드 또는 로드 해제될 때 프로그램을 정지하려면 다음을 입력하십시오.
stop on load
- Module 모듈이 로드 또는 로드 해제될 때마다 프로그램을 정지하려면 다음을 입력하십시오.
stop on load "Module"
- Module 모듈의 Member 멤버가 로드 또는 로드 해제될 때마다 프로그램을 정지하려면 다음을 입력하십시오.
stop on load "Module(Member)"
clear 부속 명령, delete 부속 명령, stopi 부속 명령 및 trace 부속 명령을 참조하십시오. 또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Setting and Deleting Breakpoints를 참조하십시오.
stophwp 부속 명령
stophwp Address Size
stophwp 부속 명령은 지정된 메모리 영역에 대한 하드웨어 경계점 정지를 설정합니다. 프로그램은 영역의 내용이 변경될 때 정지됩니다.
- stophwp 부속 명령의 성공은 하드웨어에 따라 다릅니다. 이 기능은 모델 630, PowerPC 시스템 이상에서만 사용 가능합니다.
- 단일 경계점만을 설정할 수 있는 하드웨어 제한의 결과로, 활성 경계점 이벤트가 stophwp 및 tracehwp를 사용하여 하드웨어 경계점 이벤트를 추가 작성하려고 시도할 때 충돌로 작용합니다. 따라서, 새로운 이벤트를 작성하기 전에 이전 이벤트를 삭제해야 합니다. 또한 활성 소프트웨어 경계점이 존재하므로써(일부 stop 및 trace 부속 명령 호출에 의해 작성되는) 하드웨어 경계점의 성능 이점이 무효화되므로, 이러한 종류의 이벤트 또한 하드웨어 경계점을 작성하기 전에 삭제해야 하는 충돌로 작용합니다.
예제
- 1. 주소 0x200004e8에서 시작하는 4바이트 메모리 영역의 내용이 변경될 때 프로그램을 정지하려면, 다음을 입력하십시오.
stophwp 0x200004e8 4
tracehwp 부속 명령을 참조하십시오.
stopi 부속 명령
stopi { [Address] [ at Address | in Procedure ] [ if Condition ]}
stopi 부속 명령은 지정된 위치에 정지를 설정합니다.
- if Condition 플래그를 사용하면 조건 참이 지정될 경우 프로그램이 정지합니다.
- Address 매개변수를 사용하면 Address의 내용이 변경될 경우 프로그램이 정지합니다.
- at Address 플래그를 사용하면 지정한 주소에 정지가 설정됩니다.
- e inProcedure 플래그를 사용하면, Procedure가 호출될 때 프로그램이 정지합니다.
플래그
if Condition | 조건을 참으로 지정합니다. |
in Procedure | 호출할 프로시저를 지정합니다. |
at Address | 기계 명령 주소를 지정합니다. |
예제
- 주소 0x100020f0에서 실행을 정지하려면 다음을 입력하십시오.
stopi at 0x100020f0
- 주소 0x100020f0 의 내용을 변경하려면 다음을 입력하십시오.
stopi 0x100020f0
- 주소 0x100020f0의 내용을 스레드 $t1이 변경할 때 실행을 정지하려면 다음을 입력하십시오.
stopi 0x200020f0 if ($running_thread == 1)
stop 부속 명령을 참조하십시오. 또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Debugging at the Machine Level with dbx를 참조하십시오.
thread 부속 명령
선택한 스레드 표시
thread { [ info ] [ – ] [ ThreadNumber … ] } | current | run | susp | term | wait
개별 스레드 선택
thread current [ – ] ThreadNumber
스레드 보류 또는 해제
thread { hold | unhold } [ – ] [ ThreadNumber … ]
표시된 옵션에 대한 도움말
thread {help}
thread 부속 명령은 사용자 스레드를 표시하고 제어합니다.
thread 부속 명령의 첫 번째 양식은 두 가지 형식으로 정보를 표시할 수 있습니다. thread 부속 명령이 th이면 표시되는 정보는 첫 번째 형식입니다. thread 부속 명령이 th –이면 표시되는 정보는 두 번째 형식입니다. 매개변수를 제공하지 않으면, 모든 사용자 스레드에 대한 정보가 표시됩니다. 하나 이상의 ThreadNumber 매개변수를 제공하면 해당 사용자 스레드에 대한 정보가 표시됩니다. thread 부속 명령이 스레드를 표시하면, 현재 스레드 행의 앞에는 >가 있습니다. 실행 중인 스레드가 현재 스레드와 동일하지 않으면, 그 행의 앞에는 *가 나타납니다. thread 부속 명령에 의해 두 가지 형식으로 표시되는 정보는 다음과 같습니다.
첫 번째 형식으로 thread 부속 명령에서 표시하는 정보는 다음과 같습니다.
thread | $tThreadNumber 형식으로 사용자 스레드의 기호로 된 이름을 나타냅니다. |
state-k | 사용자 스레드가 커널 스레드에 접속되어 있는 경우, 커널 스레드 상태를 나타냅니다. 각 상태는 실행 중이면 실행, 대기 중이면 wait, 일시 중단된 경우면 susp, 종료되면 term입니다. |
wchan | 커널 스레드가 대기 또는 정지 상태인 이벤트를 나타냅니다(사용자 스레드가 커널 스레드에 연결되어 있는 경우). |
state-u | 사용자 스레드 상태입니다. 가능한 상태는 실행 중, 블록, 종료입니다. |
k-tid | 커널 스레드 ID를 나타냅니다(사용자 스레드가 커널 스레드에 연결되어 있는 경우). |
mode | 사용자 스레드가 정지된 모드(커널 또는 사용자)임을 나타냅니다(사용자 스레드가 커널 스레드에 연결되어 있는 경우). |
held | 사용자 스레드가 유지되고 있는지를 나타냅니다. |
scope | 사용자 스레드의 경합 유효범위를 나타냅니다. 시스템이나 프로세스 경합 유효범위의 경우, 이것은 각각 sys나 pro가 됩니다. |
function | 사용자 스레드 함수 이름을 나타냅니다. |
두 번째 형식의 thread 부속 명령으로 표시되는 정보는 다음과 같습니다. 디폴트로, thread 부속 명령 th –의 경우, 정보는 long 양식으로 표시됩니다.
thread | $tThreadNumber 형식으로 사용자 스레드의 기호로 된 이름을 나타냅니다. |
커널 스레드 관련 정보
tid | 사용자 스레드 ID입니다(사용자 스레드가 커널 스레드에 접속되어 있는 경우). |
pri | 커널 스레드의 우선순위입니다. |
sched | 커널 스레드의 스케줄링 정책입니다. 이는 스케줄링 방식에 따라 fifo는 fif, other는 oth, 라운드 로빈(round robin)은 rr로 표시됩니다. |
state | 사용자 스레드가 커널 스레드에 접속되어 있는 경우, 커널 스레드 상태를 나타냅니다. 각각의 상태에 따라 실행 중일 때는 run, 대기 중일 때는 wait, 일시 중단일 때는 susp, zombie 상태일 때는 zomb로 표시됩니다. |
사용자 스레드 관련 정보
tid | 사용자 스레드 ID입니다. |
pri | userl 스레드의 우선순위입니다. |
sched | 사용자 스레드의 스케줄 정책입니다. 이는 스케줄링 방식에 따라 fifo는 fif, other는 oth, 라운드 로빈(round robin)은 rr로 표시됩니다. |
state | 사용자 스레드 상태입니다. 이는 실행 중, 작성 중, 일시 중단, 블록, 실행 가능 또는 종료일 수 있습니다. |
state | 사용자 상태를 16진수로 나타냅니다. |
flags | pthread 플래그의 값을 16진수로 나타냅니다. |
wchan | 커널 스레드가 대기 또는 정지 상태인 이벤트를 나타냅니다(사용자 스레드가 커널 스레드에 연결되어 있는 경우). |
mode | 사용자 스레드가 정지된 모드(커널 또는 사용자)임을 나타냅니다(사용자 스레드가 커널 스레드에 연결되어 있는 경우). |
held | 사용자 스레드가 유지되고 있는지를 나타냅니다. |
scope | 사용자 스레드의 경합 범위를 나타냅니다. 이는 시스템 또는 프로세스 경합 범위의 경우 sys 또는 pro가 됩니다. |
cancellation |
|
joinable | 스레드가 결합 가능한지 여부를 나타냅니다. |
boosted | 스레드에 사용된 값을 나타냅니다. |
function | 사용자 스레드 함수 이름을 나타냅니다. |
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 부속 명령의 두 번째 양식은 현재 스레드를 선택하는 데 사용됩니다. dbx 디버그 프로그램의 print, register 및 where 부속 명령은 모두 현재 스레드에 따라 작업을 수행합니다. 현재 스레드가 커널 모드에 있는 경우 registers 부속 명령은 레지스터를 표시할 수 없습니다.
thread 부속 명령의 세 번째 양식은 스레드 실행을 제어하는 데 사용됩니다. 스레드는 hold 플래그를 사용하여 보류되거나 unhold 플래그를 사용하여 해제할 수 있습니다. 보류된 스레드는 보류가 해제될 때까지 재개되지 않습니다.
주: dbx 디버그 프로그램의 print 부속 명령은 기호로 된 스레드 이름을 인식하며, 해당 오브젝트의 상태를 표시하는 데 사용될 수 있습니다.
플래그
current | ThreadNumber 매개변수가 제공되지 않으면, 현재 스레드를 표시합니다. ThreadNumber 매개변수가 제공되면, 지정된 사용자 스레드를 현재 스레드로 선택합니다. |
help | th – 명령이 사용될 때 표시된 스레드 옵션에 대한 모든 정보를 표시합니다. |
hold | ThreadNumber 매개변수가 제공되지 않은 경우, 모든 사용자 스레드를 보류하고 표시합니다. 하나 이상의ThreadNumber 매개변수가 제공되면 지정된 사용자 스레드를 보류하고 표시합니다. |
unhold | ThreadNumber 매개변수가 제공되지 않은 경우, 이전에 보류했던 모든 사용자 스레드를 해제하여 표시합니다. 하나 이상의 ThreadNumber 매개변수가 제공되면 지정된 사용자 스레드를 해제하여 표시합니다. |
info | ThreadNumber 매개변수가 제공되지 않은 경우, 모든 사용자 스레드를 long 양식으로 표시합니다. 하나 이상의 ThreadNumber 매개변수가 제공되면 지정된 사용자 스레드 리스트를 long 양식으로 표시합니다.
위의 모든 플래그는 [-] 옵션을 취합니다. 이 옵션을 지정할 경우, set $thcomp 옵션을 설정하지 않으면 표시되는 스레드 정보는 두 번째 형식 및 long 양식으로 표시됩니다. |
run | run 상태에 있는 스레드를 표시합니다. |
susp | susp 상태에 있는 스레드를 표시합니다. |
term | term 상태에 있는 스레드를 표시합니다. |
wait | wait 상태에 있는 스레드를 표시합니다. |
예제
- 대기 상태에 있는 스레드에 대한 정보를 표시하려면, 다음을 입력하십시오.
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 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 번호 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 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그의 Creating Threads를 참조하십시오.
trace 부속 명령
trace [ SourceLine | Expression at SourceLine | Procedure | [ Variable ] [ at SourceLine | in Procedure ] | on load ModuleName ] [if Condition ]
trace 부속 명령은 프로그램이 실행할 때 지정된 프로시저, 기능, 소스 행, 표현식 또는 변수에 대한 추적 정보를 인쇄합니다. SourceLine 변수는 :(콜론)과 정수가 뒤에 붙는 파일 이름 문자열로 또는 정수로 지정할 수 있습니다. 조건을 지정할 수 있습니다. dbx 디버그 프로그램은 번호를 각 trace 부속 명령에 연관시킵니다. status 부속 명령을 사용하여 이 번호를 열람할 수 있습니다. 추적을 중단하려면 delete 부속 명령을 사용하십시오.
trace 부속 명령은 디버그된 프로세스에서 모듈을 로드하거나 로드 해제할 때 추적 정보를 표시할 수 있습니다. 선택적 ModuleName 매개변수를 단일 모듈 이름으로, 또는 다음 형식과 같이 멤버 이름과 쌍을 이루는 모듈 이름으로 지정할 수 있습니다.
ModuleName(MemberName)
on load 플래그를 ModuleName 매개변수 없이 사용할 경우, dbx는 모든 모듈의 로드 및 로드 해제를 추적합니다.
디폴트로서 추적은 프로세스에 기반을 두고 있습니다. 스레드 기반 추적을 하려면 아래 예제 8에서 설명한 것처럼 조건에 스레드를 지정합니다.
플래그
at SourceLine | 추적 중인 표현식이 있는 소스 행을 지정합니다. |
if Condition | 추적 시작 조건을 지정합니다. ifCondition이 참일 때만 추적을 시작합니다. |
in Procedure | 사용할 프로시저를 지정하여 프로시저 또는 추적 중인 변수를 찾습니다. |
on load ModuleName | 모니터할 로드 모듈을 지정합니다. |
예제
- 각 호출을 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
- $t1 스레드에서 만든 x 변수에 대한 변경 사항을 추적하려면 다음을 입력하십시오.
(dbx) trace x if ($running_thread == 1)
- 모든 모듈의 로드 또는 로드 해제를 추적하려면 다음을 입력하십시오.
trace on load
- Module 모듈의 specificity 또는 로드 해제를 추적하려면 다음을 입력하십시오.
trace on load "Module"
- Module 모듈에서 Member 멤버의 로드 또는 로드 해제를 추적하려면 다음을 입력하십시오.
trace on load "Module(Member)"
또한 tracei 부속 명령을 참조하십시오.
tracehwp 부속 명령
tracehwp Address Size
tracehwp 부속 명령은 지정된 메모리 영역에 대한 하드웨어 경계점 정지를 설정합니다. dbx 디버그 프로그램은 영역의 내용이 변경될 때 추적 정보를 인쇄합니다.
- tracehwp 부속 명령의 성공은 하드웨어에 따라 다릅니다. 이 기능은 모델 630, PowerPC 시스템 이상에서만 사용 가능합니다.
- 단일 경계점만을 설정할 수 있는 하드웨어 제한의 결과로, 활성 경계점 이벤트가 stophwp 및 tracehwp를 사용하여 하드웨어 경계점 이벤트를 추가 작성하려고 시도할 때 충돌로 작용합니다. 따라서, 새로운 이벤트를 작성하기 전에 이전 이벤트를 삭제해야 합니다. 또한 활성 소프트웨어 경계점이 존재하므로써(일부 stop 및 trace 부속 명령 호출에 의해 작성되는) 하드웨어 경계점의 성능 이점이 무효화되므로, 이러한 종류의 이벤트 또한 하드웨어 경계점을 작성하기 전에 삭제해야 하는 충돌로 작용합니다.
예제
- 주소 0x200004e8에서 시작하는 4바이트 메모리 영역의 내용이 변경될 때마다 추적하려면, 다음을 입력하십시오.
tracehwp 0x200004e8 4
stophwp 부속 명령을 참조하십시오.
tracei 부속 명령
tracei [ [ Address ] [ at Address | in Procedure ] | Expression at Address ] [ if Condition ]
tracei 부속 명령은 다음과 같은 경우에 추적을 합니다.
- Address 플래그가 포함되어 있는 경우 Address 플래그에서 지정한 주소의 내용이 변경되었을 때.
- at Address 매개변수를 지정한 경우 at Address 명령이 실행되었을 때.
- inProcedure 플래그가 포함되어 있는 경우 Procedure에서 지저안 프로시저가 활성화되었을 때.
- ifCondition 플래그가 포함된 경우 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 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Debugging at the Machine Level with dbx를 참조하십시오.
unalias 부속 명령
unaliasName
unalias 부속 명령은 Name 매개변수가 지정한 별명을 삭제합니다.
예제
printx라는 이름의 별명을 삭제하려면 다음을 입력하십시오.
unalias printx
alias 부속 명령을 참조하십시오. 또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Creating Subcommand Aliases를 참조하십시오.
unset 부속 명령
unsetName
unset 부속 명령은 Name 매개변수가 지정한 이름과 관련된 dbx 디버그 프로그램 변수를 삭제합니다.
예제
부동소수점 레지스터 표시를 금지하는 변수를 삭제하려면 다음을 입력하십시오.
unset $noflregs
set 부속 명령을 참조하십시오. 또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Changing Print Output With Special Debugging Variables를 참조하십시오.
up 부속 명령
up [ Count ]
up 부속 명령은 현재 함수를 스택에서 Count 레벨 번호만큼 위로 이동시킵니다. 현재 함수는 이름을 분석하는 데 사용됩니다. Count 매개변수에 대한 디폴트는 1입니다.
예제
- 현재 함수를 스택 레벨 2보다 위쪽으로 이동하려면, 다음을 입력하십시오.
up 2
- 스택에서 현재 기능을 표시하려면 다음을 입력하십시오.
up 0
down 부속 명령을 참조하십시오. 또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Changing the Current File or Procedure 및 Displaying a Stack Trace를 참조하십시오.
use 부속 명령
use [ { + | Directory | ‘[‘RegularExpression = NewPath‘]’ } … ]
use 부속 명령은 dbx 디버그 프로그램이 소스 파일을 찾을 때 검색할 디렉토리 리스트와 적용할 경로 맵핑을 설정합니다. 인수 없이 use 부속 명령을 지정하면, 검색할 현재 디렉토리 리스트와 적용될 경로 맵핑이 표시됩니다.
@(at 기호)는 dbx 프로그램이 오브젝트 파일(있는 경우)에 있는 전체 경로 이름 정보를 찾도록 하는 특수 디렉토리입니다. 사용자가 @라는 상대적인 디렉토리를 찾도록 하려면, 검색 경로에 ./@를 사용해야 합니다.
use 부속 명령은 +(더하기 부호)를 사용하여 검색할 디렉토리 리스트에 디렉토리나 맵핑을 추가합니다. +는 use 부속 명령에 입력으로 지정한 경우 디렉토리 및 맵핑의 현재 리스트를 나타냅니다. 디렉토리나 맵핑을 현재 리스트 끝에 추가하려면, +를 새 디렉토리나 맵핑 이전에 지정해야 합니다. 디렉토리를 현재 리스트의 맨 앞에 추가하려면, +를 새 디렉토리나 맵핑 다음에 지정해야 합니다. +라는 디렉토리가 있으면, 디렉토리의 전체 경로 이름을 지정하십시오(예: ./+ 또는 /tmp/+).
use 부속 명령은 [ 및 ](대괄호)로 묶인 문자열을 해석합니다. 이 문자열에는 경로 맵핑으로 =(등호)가 있습니다. 이 경로 맵핑은 특수 @ 디렉토리와 함께 사용됩니다. 이 맵핑을 사용하면 소스 파일의 전체 디렉토리 구조가 컴파일 후 다시 할당된 경우에 사용자가 소스 파일 위치를 쉽게 표시할 수 있습니다.
디버깅 중 소스 파일을 찾을 때 다음 규칙이 적용됩니다.
- 리스트의 디렉토리는 지정된 순서대로 평가됩니다.
- 리스트에 있는 디렉토리를 평가할 때, 디렉토리에서 지정된 파일을 검색합니다. 파일이 디렉토리에 있고 읽기 가능하면 이 파일이 사용됩니다.
- 특수 @ 디렉토리를 평가할 때, 하나 이상의 경로 맵핑을 지정할 경우, 경로 맵핑의 RegularExpression 부분이 오브젝트 파일에서 파일의 전체 경로 이름 정보 중 처음 n자와 일치하고 경로 맵핑의 NewPath 부분 대체로 읽기 가능한 파일이 생성되면, 이 파일이 사용됩니다.
- 특수 @ 디렉토리를 평가할 때, 경로 맵핑을 지정하지 않았거나 일치사항이 전혀 없으면, 파일의 전체 경로 이름 정보에 해당되는 디렉토리를 검색합니다. 파일이 디렉토리에 있고 읽기 가능하면 이 파일이 사용됩니다.
- 둘 이상의 경로 맵핑에서 읽기 가능 파일을 생성할 경우, RegularExpression이 파일의 전체 경로 이름 중 대부분의 문자(1 … n)와 일치하는 경로 맵핑(즉, 가장 특정한 경로 맵핑)이 적용되고 해당 결과 파일이 사용됩니다.
- 둘 이상의 경로 맵핑에서 읽기 가능 파일을 생성하고 각 경로 맵핑의 특수성이 동일할 경우, 리스트의 맨 앞에 가까운 경로 맵핑이 적용되고 해당 결과 파일이 사용됩니다.
예제
- 검색할 디렉토리 리스트를 현재 디렉토리(.), 상위 디렉토리(..), /tmp 디렉토리로 변경하려면 다음을 입력하십시오.
use . .. /tmp
- 검색할 디렉토리 리스트를 현재 디렉토리(.), 컴파일 시간에 소스 파일이 위치했던 디렉토리(@), ../source 디렉토리로 변경하려면 다음을 입력하십시오.
use . @ ../source
- /tmp2 디렉토리를 검색할 디렉토리 리스트에 추가하려면 다음을 입력하십시오.
use + /tmp2
- /tmp3 디렉토리를 검색할 디렉토리 리스트의 맨 앞에 추가하려면 다음을 입력하십시오.
use /tmp3 +
- 전체 경로 이름 정보가 /home/developer로 시작하는 소스 파일이 현재 /mnt에 있음을 표시하려면 다음을 입력하십시오.
use + [/home/developer=/mnt]
- dbx 프로그램이 /latest에서 처음 찾도록 지시했는데 파일이 해당 위치에 없을 경우 /stable에서 /home/developer로 시작하는 전체 경로 이름 정보를 갖는 파일을 찾도록 하려면 다음을 입력하십시오.
use + [/home/developer=/latest] [/home/developer=/stable]
또한, edit 부속 명령과 list 부속 명령을 참조하십시오.
whatis 부속 명령
whatisName
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 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Displaying a Stack Trace를 참조하십시오.
whereis 부속 명령
whereisIdentifier
whereis 부속 명령은 이름이 지정된 ID와 일치하는 모든 기호의 전체 규정을 표시합니다. 기호가 인쇄되는 순서는 중요하지 않습니다.
예제
이름이 x인 모든 기호에 대해 규정화된 이름을 표시하려면 다음을 입력하십시오.
whereis x
which 부속 명령을 참조하십시오.
which 부속 명령
which Identifier
which 부속 명령은 주어진 ID의 전체 규정을 표시합니다. 전체 규정은 ID가 연관된 외부 블록 리스트로 구성됩니다.
예제
x 기호의 전체 규정을 표시하려면 다음을 입력하십시오.
which x
whereis 부속 명령을 참조하십시오. 또한, AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 Scoping of Names를 참조하십시오.
파일
a.out | 오브젝트 코드를 포함하고 있는 오브젝트 파일. |
core | 코어 덤프를 포함합니다. |
.dbxinit | 초기화 명령을 포함합니다. |
관련 정보
adb 명령, cc 명령.
AIX 5L 버전 5.3 일반 프로그래밍 개념: 프로그램 작성 및 디버그에서의 dbx Symbolic Debug Program Overview 및 Using the dbx Debug Program.