Remote debug trong Java

Chào mừng các bạn đã quay trở lại với thachleblog, đã lâu rồi chúng ta mới được gặp nhau nhỉ . Trong thời gian qua thì công việc của mình vẫn bình thường, vẫn research, đọc blog, chỉ là lười viết thôi : ))), hôm nay mới lại có hứng thú “cầm phím”, hehe.

Bài viết hôm nay mình sẽ cùng với các bạn tìm hiểu về remote debug trong Java. Bạn có muốn biết thế nào là remote debug? Làm thế nào để một project java có thể được remote debug? Chúng ta cùng bắt đầu nhé.

Thế nào là remote debug?

Thông thường, chúng ta debug project trực tiếp trên IDE ở máy local, cụ thể chúng ta sẽ dùng Netbeans, Eclipse, IntelliJ… để deploy project, sau đó đặt break point và tiến hành debug. Nhưng vì một lý do nào đó, chúng ta không thể deploy project trên máy local bằng IDE mà phải deploy ứng dụng ở một máy khác (remote). Sau đó chúng ta cũng vẫn sẽ debug ứng dụng đó bằng source code trên IDE của máy local. Đó chính là remote debug.

Sao phải xài remote debug?

Như mình đã để cập ở phần trên, vì một vài lý do nào đó mà chúng ta không thể deploy ứng dụng trên máy local, thông thường là do môi trường setup để deploy ứng dụng quá phức tạp, máy local cấu hình yếu… chúng ta sử dụng remote debug sẽ tiết kiệm được khá nhiều thời gian và công sức.

Đối với trên, có một cách thông thường vẫn thường dùng để giải quyết đó là đặt log. Tuy nhiên việc đặt log lại tốn công hơn do đó nếu có thể, chúng ta vẫn ưu tiên chọn remote debug.

Làm thế nào để remote debug?

Rất đơn giản, Java cung cấp sẵn tính năng remote debug, chúng ta chỉ cần truyền vào thông số -Xdebug cho VM lúc start chương trình. Ví dụ mình thường deploy ứng dụng của mình như sau:

java -Xdebug -Xrunjdwp:transport=dt_socket,suspend=n,server=y,address=9998 -jar MYAPP.jar

Trong đó:

MYAPP.jar  là ứng dụng của mình đã được build, –Xdebug là lệnh dùng để enable tính năng remote debug

-Xrunjdwp:transport=dt_socket ứng dụng publish message thông qua transport là socket và giao thức JDWP (Java Debug Wire Protocol). Từ Java 5 trở đi, chúng ta có thể sử dụng -agentlib:jdwp thay cho -Xdebug và Xrunjdwp

server=y,address=9998 ứng dụng sẽ được debug ở server được deploy với port là 9998

suspend=n:JVM sẽ start ở chế độ suppend cho đến khi được debug…

Enable tính năng remote debug của ứng dụng rồi, chúng ta chỉ việc debug ở local thôi, đối với Netbeans chúng ta sẽ vào  Debug – Attach Debugger
Remote debug trong Java

Các tham số:

transport: dt_socket,

host là ip server mình deploy ứng dụng và port là gia trị tham số address ở trên.

Các bạn cũng có thể xem các config remote debug cho eclipse ở đây

Lưu ý: ứng dụng chạy ở chế độ remote debug sẽ bị ảnh hưởng đến performance, do đó chỉ sử dụng chế độ này ở môi trường dev hoặc stagging. Môi trường production mà bạn để chế độ này coi chừng được ra đường code : )))

Vừa rồi là phần giới thiệu của mình về remote debug trong Java. Trước giờ đi làm toàn sử dụng phương pháp này và thấy khá là hữu ích. Các bạn đã biết phương pháp này chưa và có kinh nghiệm nào muốn chia sẻ không? Vui lòng comment bên dưới nhé. Cảm ơn và hẹn gặp lại các bạn ở các bài viết sau.

Tham khảo thêm:

https://www.ibm.com/developerworks/library/os-eclipse-javadebug/

2 thoughts on “Remote debug trong Java

Tham gia bình luận