티스토리 뷰
들어가며
- 간혹 IDE가 없는 환경에서 Java 애플리케이션을 디버깅 해야 할때가 있다.
- 이때 간단하게 사용할 수 있는 것이 JDK에 포함된 JDB 인데 기초적인 사용법만 알아도 유용하게 써먹을 수 있다.
JDB란
- JDB(Java Debugger)는 Java 클래스를 디버깅할 수 있는 간단한 Command-Line 디버거이다.
- JDB 명령어에 대한 설명은 JDB를 실행하여 -help를 통해서 볼 수 있다.
- 위치는 JDK 폴더/bin/jdb.exe
사용법
- 이번 포스트에서는 간단하게 특정 값을 확인하고자 할때를 기준으로 주로 쓰이는 사용법에 대해서 이야기 한다.
- 그리고 애플리케이션은 JAR를 통해서 실행한다고 가정한다.
JDB 실행 및 접속
- 먼저 애플리케이션을 실행한다.
- a.jar 파일을 실행하며 8000번 Socket을 열어둠
java -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y -jar a.jar
- 그 다음 JDB를 실행한다.
- 위치는 JDK 폴더/bin/jdb.exe
jdb -connect com.sun.jdi.SocketAttach:port=8000
//windows
jdb.exe -connect com.sun.jdi.SocketAttach:port=8000
- 아래 메시지가 출력되면 정상적으로 접속 된 것이다.
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
Initializing jdb ...
>
VM Started: No frames on the current call stack
main[1]
Break Point 설정
- Run을 하기 전에 원하는 위치에 Break Point를 걸어준다. 이때 방법은 크게 두가지이다.
- 이때 참고해야 할 점은 클래스를 적어줄 때 패키지명을 포함한 Full-Path로 적어줘야 함
- 모든 클래스들의 Full-Path를 출력하려면
classes
를 사용
- stop at: 특정 Line Number로 지정
//Service 클래스의 150번 째 줄에 BreakPoint
stop at com.my.package.service.Service:150
- stop in:특정 메소드로 지정
//Service 클래스의 start() 메소드에 BreakPoint
stop at com.my.package.service.Service.start
- clear: BreakPoint 삭제
//설정된 Break Point 삭제
clear <클래스 경로>:<라인 Number>
clear <클래스 경로>.<메소드명>
clear
실행
- 실행은
run
명령을 통해서 간단하게 수행 가능하다. - 이후 BreakPoint에 Stop되었을 때 Line을 이동하는 방법은 아래와 같다.
- step: 현재 라인 실행 (InteliJ의 Step Into)
- step up: 현재 메소드 리턴까지 실행 (InteliJ의 Step Out)
- next: 한 라인 건너띄기 (InteliJ의 Step Over)
값 확인
- print <expr>: 입력한 value에 대한 출력
//Example
$ main[1] print args
$ args = instance of java.lang.String[0] (id=1501)
- locals: 현재 stack에 해당되는 모든 지역변수 출력
//Example
main[1] locals
Method arguments:
args = instance of java.lang.String[0] (id=1501)
Local variables:
ETC
- 그 밖의 Command 들은 아래 JDB Help를 참고하자.
** command list **
connectors -- list available connectors and transports in this VM
run [class [args]] -- start execution of application's main class
threads [threadgroup] -- list threads
thread <thread id> -- set default thread
suspend [thread id(s)] -- suspend threads (default: all)
resume [thread id(s)] -- resume threads (default: all)
where [<thread id> | all] -- dump a thread's stack
wherei [<thread id> | all]-- dump a thread's stack, with pc info
up [n frames] -- move up a thread's stack
down [n frames] -- move down a thread's stack
kill <thread id> <expr> -- kill a thread with the given exception object
interrupt <thread id> -- interrupt a thread
print <expr> -- print value of expression
dump <expr> -- print all object information
eval <expr> -- evaluate expression (same as print)
set <lvalue> = <expr> -- assign new value to field/variable/array element
locals -- print all local variables in current stack frame
classes -- list currently known classes
class <class id> -- show details of named class
methods <class id> -- list a class's methods
fields <class id> -- list a class's fields
threadgroups -- list threadgroups
threadgroup <name> -- set current threadgroup
stop in <class id>.<method>[(argument_type,...)]
-- set a breakpoint in a method
stop at <class id>:<line> -- set a breakpoint at a line
clear <class id>.<method>[(argument_type,...)]
-- clear a breakpoint in a method
clear <class id>:<line> -- clear a breakpoint at a line
clear -- list breakpoints
catch [uncaught|caught|all] <class id>|<class pattern>
-- break when specified exception occurs
ignore [uncaught|caught|all] <class id>|<class pattern>
-- cancel 'catch' for the specified exception
watch [access|all] <class id>.<field name>
-- watch access/modifications to a field
unwatch [access|all] <class id>.<field name>
-- discontinue watching access/modifications to a field
trace [go] methods [thread]
-- trace method entries and exits.
-- All threads are suspended unless 'go' is specified
trace [go] method exit | exits [thread]
-- trace the current method's exit, or all methods' exits
-- All threads are suspended unless 'go' is specified
untrace [methods] -- stop tracing method entrys and/or exits
step -- execute current line
step up -- execute until the current method returns to its caller
stepi -- execute current instruction
next -- step one line (step OVER calls)
cont -- continue execution from breakpoint
list [line number|method] -- print source code
use (or sourcepath) [source file path]
-- display or change the source path
exclude [<class pattern>, ... | "none"]
-- do not report step or method events for specified classes
classpath -- print classpath info from target VM
monitor <command> -- execute command each time the program stops
monitor -- list monitors
unmonitor <monitor#> -- delete a monitor
read <filename> -- read and execute a command file
lock <expr> -- print lock info for an object
threadlocks [thread id] -- print lock info for a thread
pop -- pop the stack through and including the current frame
reenter -- same as pop, but current frame is reentered
redefine <class id> <class file name>
-- redefine the code for a class
disablegc <expr> -- prevent garbage collection of an object
enablegc <expr> -- permit garbage collection of an object
!! -- repeat last command
<n> <command> -- repeat command n times
# <command> -- discard (no-op)
help (or ?) -- list commands
version -- print version information
exit (or quit) -- exit debugger
<class id>: a full class name with package qualifiers
<class pattern>: a class name with a leading or trailing wildcard ('*')
<thread id>: thread number as reported in the 'threads' command
<expr>: a Java(TM) Programming Language expression.
Most common syntax is supported.
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] String <-> ZonedDate Time 변환 방법 (0) | 2020.11.06 |
---|---|
[Java] 알파벳 랜덤 조합(String) 생성 방법 (0) | 2020.11.06 |
[Java] "NoClassDefFoundError: javax/xml/soap/SOAPMessage.." 에러 발생시 해결방법 (0) | 2020.09.29 |
(Java) Gson 사용시 보기 좋은 Pretty Json String 변환하는 방법 (0) | 2020.08.25 |
[Java] 스트림 슬라이싱 방법 (0) | 2020.08.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 자전거 여행
- Java UI
- intelij
- 배낭 여행
- JavaFX
- 스프링부트
- 자전거
- effectivejava
- 이펙티브자바
- windows
- springboot
- 일본 배낭여행
- JavaFX 테이블뷰
- 방통대 과제물
- 텐트
- 이펙티브 자바
- 일본 자전거 여행
- TableView
- git
- effective java
- 자바
- JavaFX Window Close
- 이펙티브
- java
- JavaFX Table View
- 배낭여행
- JavaFX 종료
- 인텔리제이
- 일본여행
- 일본 여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함