Viết mã là một nửa trận chiến. Nó vẫn cần phải được thực hiện để hoạt động chính xác. IDE và các công cụ gỡ lỗi giúp chúng ta rất nhiều trong việc này.
Sử dụng IntelliJ IDEA làm ví dụ, tôi đề xuất làm quen với cách chúng ta có thể tìm hiểu điều gì xảy ra với mã của mình khi nó chạy. Gỡ lỗi là một chủ đề rộng, vì vậy bài đánh giá này không cung cấp khả năng lặn sâu, giống như thợ lặn. Nhưng tôi hy vọng chắc chắn sẽ được lặn với ống thở)
Tiếp theo, chúng ta cần chạy dự án mà chúng ta đã chọn trên máy chủ. Quá trình này được mô tả trong một tài liệu nhỏ có thể tìm thấy trong chính dự án:
Sau đó, trong nhật ký máy chủ, chúng ta có thể thấy dự án mới đã được “triển khai” như thế nào:
Sau đó, chúng ta đi đến trang
Nếu tất cả đều ổn, chúng ta sẽ thấy một thông báo về điều này bên dưới:
Nhấn Enter để đi đến nguồn tìm thấy:
Vì vậy, chúng ta thấy rằng khi đăng ký, memberController.register được gọi. Rõ ràng, đây phải là một loại lớp java nào đó. Bấm vào
Quả thực có một lớp học như vậy. Chúng ta hãy đi sâu vào nó. Rõ ràng, nên có một phương pháp đăng ký. Nhấp
Quả thực, chúng tôi đã tìm thấy nó. Rõ ràng, việc đăng ký diễn ra ở đây, trong memberRegistration.register . Nhấn Ctrl và click vào phương thức để “đi xuyên qua” nó:
Bây giờ chúng ta hãy đặt “điểm ngắt” hoặc Điểm dừng. Đây là điểm đánh dấu cho biết nơi thực thi mã sẽ tạm dừng. Lúc này chúng ta sẽ có cơ hội học hỏi được rất nhiều điều thú vị. Để đặt nó, bạn cần nhấp vào vị trí bên phải số dòng.
Trên trang http://localhost:8080/wildfly-hibernate4 điền vào các trường và nhấp vào nút Đăng ký. Biểu tượng ý tưởng trên bảng sẽ nhấp nháy:
Vào Idea các bạn có thể thấy có rất nhiều thông tin thú vị trong debug panel:
Tại đây bạn có thể thấy giá trị của các trường của đối tượng. Ví dụ: Thành viên đã đăng ký bao gồm những gì:
Tuyệt vời. Ta còn làm gì khác được nữa? Chúng ta có thể mở menu ngữ cảnh và chọn Đánh giá biểu thức ở đó (hoặc thông qua menu Chạy -> Đánh giá biểu thức). Tốt hơn nữa, trên bảng điều khiển trình gỡ lỗi:
Đây là một khả năng cực kỳ thú vị tại một điểm dừng, có quyền truy cập vào mọi thứ mà điểm mã đó có quyền truy cập, để thực thi bất kỳ mã nào có thể được thực thi tại thời điểm đó. Ví dụ:
Ngoài ra còn có các nút điều khiển trên bảng điều khiển trình gỡ lỗi chịu trách nhiệm về nơi bạn muốn di chuyển điều khiển luồng chương trình. Đó không phải là phép thuật sao?) Bằng cách nhấn nút F8 (Bước ra), chúng ta xem qua mã mà không cần nhập phương thức. Bằng cách nhấn F9, chúng tôi dừng việc duyệt qua các dòng mã bằng trình gỡ lỗi và cung cấp cho trình gỡ lỗi quyền kiểm soát việc thực thi chương trình. Nếu chúng ta nhấn F7 (Step Into), thì chúng ta sẽ xem qua mã, nhập từng phương thức mà chúng ta gặp trong quá trình thực hiện. Nhân tiện, hãy đặc biệt chú ý đến khối thông tin này:
Điều này hiển thị luồng chúng ta đang ở và các phương thức trên ngăn xếp của luồng hiện tại. Nhưng đó không phải là tất cả. Để thuận tiện, bạn có thể mở tab khung. Để làm điều này nó phải được kích hoạt:
Bây giờ trên tab khung, chúng ta thấy thông tin về quá trình chuyển đổi từ phương thức này sang phương thức khác, bởi vì bắt đầu xem qua mã bằng Step Into.
Như chúng ta thấy, không phải lúc nào chúng ta cũng được chuyển đến nơi chương trình hiện đang được thực thi. Chúng tôi hiện đang ở "getDelegate:469, Tóm tắtEntityManager(org.jboss.as.jpa.container)". Nhưng trên thực tế, chúng tôi đang thực hiện. Điều này được chứng minh bằng lớp được chỉ định bởi điều này:
Hãy nhìn vào điều này. Như chúng ta biết, nó trỏ đến đối tượng hiện tại. Chúng tôi đang ở TransactionScopedEntityManager. Tại sao Idea không thể hiển thị mã cho chúng tôi? Thực tế là IntelliJ Idea hiện không biết về bất kỳ TransactionScopedEntityManager nào, bởi vì nó không được kết nối với dự án của chúng tôi (nó không nằm trong phần phụ thuộc của dự án). Khi một máy chủ ứng dụng đang chạy, có rất nhiều thư viện khác nhau đang chạy bên trong nó. Nhưng chúng ta biết rất ít về họ, bởi vì... nói chung, chúng ta không cần đi sâu vào bên trong, chúng ta chỉ cần nó hoạt động. Nhưng đôi khi công việc hoặc sở thích thể thao đòi hỏi điều đó. Sau đó, bạn cần thông báo cho Idea về thư viện này để nó biết lấy mã lớp ở đâu.
Bây giờ chúng ta hãy chờ đợi kết quả. Anh ấy sẽ không để bạn phải chờ đợi)
Bây giờ, chúng ta cần tìm mã nguồn của nó ở đâu đó. Và có 2 lựa chọn:
Có lẽ chúng ta hãy sử dụng cái thứ hai. Chúng ta hãy tìm ở đó:
Bây giờ hãy chuyển sang mô tả sự phụ thuộc. Trên trang này bạn có thể tải xuống mã nguồn. Tuyệt vời, bây giờ chúng ta đã tải được mã xuống. Tất cả những gì còn lại là kết nối thư viện. Nó kết nối vô cùng đơn giản. Chúng ta cần mở cài đặt dự án:
Ở đó, chúng tôi chọn “Thư viện” và thêm mã nguồn nhận được vào phần “Nguồn”, và trong phần “Lớp”, chúng tôi chỉ ra chính tệp jar thư viện từ thư mục WildFly mà chúng tôi đã tìm thấy bằng Far Manager. Sau này, khi điều hướng qua F7, chúng ta sẽ thấy nội dung của lớp Tóm tắtEntityManager và TransactionScopedEntityManager và cũng sẽ có sẵn thông qua tìm kiếm theo lớp bằng cách sử dụng Ctrl+N.
Bây giờ điểm dừng sẽ chỉ kích hoạt khi tên là Maximilian. Bằng cách nhấp vào nút Thêm, bạn sẽ có sẵn một bộ cài đặt mở rộng cho Điểm nghỉ.
Và tạo quy tắc mới cho loại ngoại lệ đã chọn:
Ví dụ: đối với NPE:
#Viacheslav
Giới thiệu
Một phần của việc viết mã là gỡ lỗi nó. Và nếu nhiệm vụ của bạn bao gồm hỗ trợ mã, sẽ có nhiều lần gỡ lỗi hơn. Ngoài ra, với sự trợ giúp của tính năng gỡ lỗi, bạn có thể kiểm tra hoạt động của các thư viện và khung công tác được sử dụng một cách sâu sắc như thể bạn có thể đắm mình trong rừng mã của người khác. Đối với chuyến lặn của chúng tôi, chúng tôi sẽ cần:- Môi trường phát triển: Phiên bản cộng đồng ý tưởng IntelliJ miễn phí
- Maven đã cài đặt
- Máy chủ ứng dụng WildFly 12.0.0.Final
- Mã nguồn cho các ví dụ chính thức: Mã nguồn bắt đầu nhanh
bin\standalone.bat
\hibernate4\README.adoc
Như đã nêu trong tài liệu này, chúng ta cần chạy lệnh trong thư mục hibernate4: mvn clean package wildfly:deploy
Chúng tôi đang đợi thông báo rằng quá trình xây dựng đã hoàn tất thành công:
http://localhost:8080/wildfly-hibernate4
và sẽ hiển thị một trang có biểu mẫu “ Đăng ký thành viên ”. Vậy là quá trình chuẩn bị cho thí nghiệm của chúng ta đã hoàn tất và chúng ta có thể bắt đầu)) Sẽ có rất nhiều hình ảnh phía trước cho rõ ràng, vì vậy hãy chuẩn bị sẵn sàng)
Gỡ lỗi từ xa
Vì vậy, chúng ta cần định cấu hình chế độ Gỡ lỗi để IDE kiểm soát việc thực thi mã trên máy chủ ứng dụng. IntelliJ Idea có hai phiên bản: miễn phí (Cộng đồng) và trả phí (Cuối cùng). Loại thứ hai có thể được thử chính thức dưới dạng EAP. Trong phiên bản Ultimate, mọi thứ đều đơn giản - máy chủ ứng dụng có thể được khởi chạy trực tiếp từ IDE ở chế độ gỡ lỗi. Nhưng trong phiên bản Cộng đồng, bạn cần thực hiện một số thao tác theo cách thủ công. Do đó, hãy xem xét một trường hợp phức tạp hơn, tức là cài đặt trong phiên bản Cộng đồng. Phiên bản Cộng đồng có một số hạn chế. Đặc biệt, bạn không thể chạy máy chủ ứng dụng từ nó. Nhưng bạn có thể thiết lập gỡ lỗi từ xa (Remote Debug), khi ở đâu đó riêng biệt có một máy chủ đang chạy với ứng dụng chúng ta cần. Hãy sử dụng mô tả thiết lập từ đây: Gỡ lỗi từ xa Wildfly trong phiên bản cộng đồng IntelliJ Idea (thiết lập Cấu hình chạy từ xa cho cổng 8787). Sau khi cấu hình, chúng tôi khởi chạy cấu hình mới ở chế độ Gỡ lỗi:Quá trình gỡ lỗi
Hãy gỡ lỗi lưu bản ghi. Để làm được điều này, trước tiên chúng ta phải quyết định địa điểm mà chúng ta sẽ khám phá. Đánh giá qua cửa sổ, chúng ta cần nút “Đăng ký”. Hãy tìm nó trong mã. Vì vậy, chúng ta cần một phần tử, nó phải có dòng chữ: "Đăng ký". Hoặc cô ấy nên có một cái gì đó để làm với nó. Nhấp vàoCtrl+Shift+F
và tìm kiếm Đăng ký trong dấu ngoặc kép. Chúng tôi thấy rằng có một cái trên index.xhtml.
Ctrl+N
và tìm kiếm:
Ctrl+F12
và tìm phương thức đăng ký
Kết nối thư viện của bên thứ ba để gỡ lỗi
Đầu tiên, bản thân chúng ta cần hiểu loại thư viện nào cần được kết nối. Cách đầu tiên là khó nhất - tìm kiếm trên Internet. Tốc độ và kết quả của việc tìm ra kết quả phụ thuộc rất nhiều vào việc dự án được quản lý tốt như thế nào. Ví dụ: WildFly có một kho lưu trữ mở. Vì vậy, khi chúng tôi sử dụng Google “TransactionScopedEntityManager”, chúng tôi sẽ truy cập https://github.com/wildfly/wildfly/tree/master/jpa/subsystem và thấy rằng chúng tôi cần Wildfly-jpa. Phương pháp thứ hai là chính xác. Máy chủ ở đâu, hãy nhìn vào đó. Nhiều phương tiện khác nhau có thể giúp với điều này. Ví dụ: trên Windows có thể là Far Manager . Dưới đây là một ví dụ về thuật toán tìm kiếm. Sau khi cài đặt và khởi chạy nó, hãy sử dụng Tab để chuyển sang một trong các tab, sử dụngAlt+F1
tab bên trái hoặc Alt+F2
tab bên phải và chọn phân vùng chúng ta cần trên ổ cứng. Rất có thể chính thư mục Far Manager được mở trong Far Manager sau khi cài đặt. Để đi tới thư mục gốc của đĩa, nhấn Ctrl + \
. Sử dụng, Alt+F
mở cửa sổ tìm kiếm, bắt đầu nhập tên thư mục và nhấn Enter sau khi tìm thấy thư mục. Tìm kiếm này rất thông minh và làm nổi bật những thư mục phù hợp với văn bản tìm kiếm. Nếu bạn nhập các ký tự không có thư mục thì không thể nhập các ký tự đó. Bằng cách này chúng ta đi đến thư mục máy chủ ứng dụng. Giả sử chúng ta không biết các mô-đun được đặt ở đâu trên máy chủ. Có lẽ đây là lần đầu tiên trong đời bạn nghe về một loại WildFly nào đó. Vì vậy, hãy nhấn ngay vào đây Alt+F7
để tìm kiếm file. Vì vậy, logic ra lệnh: chúng ta cần một tệp có thư viện. Tức là chúng ta cần một cái lọ. Cần có một lớp TransactionScopedEntityManager bên trong. Bởi vì class = file, sau đó tìm “contains”. Đó là, một cái gì đó như thế này:
GO TO FULL VERSION