Hướng dẫn Stacktrace - hướng dẫn nhận dạng và fix lỗi

  • Chào bạn, hãy đăng ký hoặc đăng nhập để tham gia cùng bọn mình và sử dụng được đầy đủ chức năng của diễn đàn :).

Banbeucmas

DEVELOPER
THÀNH VIÊN
F TO PAY RESPECT
12/7/16
9,983
1,518
950
22
Hà Nội, Việt Nam
Vâng stacktrace, bình thường thì những bạn mới code sẽ để ý cái này, nên trước khi đăng 1 bài hỏi về lỗi thì nên đọc cái này trước.
Lưu ý: Không phải là thằng nào cũng phải biết code để hiểu cái này, những ai dùng plugin cũng có thể đọc để giúp mấy thím làm plugin
Mình sẽ sub cái bài viết này từ Bukkit nhé

Stacktrace là gì?
Đơn giản, nó là cái dòng lỗi bù lù bù lòa mà mấy bạn không hiểu được ý
Cụ thể nó như thế này:


Khó đọc thế, làm sao sửa?
Chắc bạn nào cũng nói vậy thôi, vì nhìn đống dòng đấy thì ko hiểu gì được, nah dễ nhìn lắm, lấy ví dụ từ cái stacktrace trên nhé:


Đã có 2 cái dòng chữ in đậm:
1. Dòng đầu ghi NullPointerException, là 1 lỗi xảy ra khi có gì bị null là nó sẽ báo (tức là không có giá trị đi kèm), khó hình dung cho mấy bạn code đúng không, nhìn nhé.

PHP:
ItemStack item = null;

//Dòng dưới sẽ ném NullPointerException do item giá trị là null
ItemMeta meta = item.getItemMeta();
Hay như thế này
PHP:
ItemStack item;

//Dòng dưới sẽ ném NullPointerException do item không có giá trị được gán
ItemMeta meta = item.getItemMeta();

Nói chung, khi có 1 biến null tương đương với việc nó không được gán 1 giá trị.

2. Dòng thứ 2 ghi nơi xảy ra lỗi, chính xác là dòng có lỗi đấy và tên class nơi xảy ra lỗi

Đễ fix thì hãy phân tích cái dòng lênh đó ra, như 2 dòng code ví dụ trên, mình sẽ compile lại plugin với dòng code như thế này

PHP:
ItemStack item;
System.out.println(item);

//Dòng dưới sẽ ném NullPointerException do item không có giá trị được gán
ItemMeta meta = item.getItemMeta();
Khi đó, cái bảng đen (hay console) sẽ hiện ra như thế này:
Mã:
null
Vậy thì mình biết: "À, item bị null, phải gán giá trị cho nó"
Và code sau khi fix sẽ như thế này:
PHP:
ItemStack item = new ItemStack(Material.DIAMOND_PICKAXE);

//Không còn lỗi xảy ra nữa, vì Item bây giờ đã có giá trị
ItemMeta meta = item.getItemMeta();
Nói chung thì trong đống dòng đấy, bạn sẽ tìm thấy được 2 thứ
1. Tên lỗi
2. Vị trị lỗi

Thế thôi, và viếc sửa sẽ nằm trong khả năng của ban, piece of cake.
 
Chỉnh sửa cuối:

Banbeucmas

DEVELOPER
THÀNH VIÊN
F TO PAY RESPECT
12/7/16
9,983
1,518
950
22
Hà Nội, Việt Nam

Banbeucmas

DEVELOPER
THÀNH VIÊN
F TO PAY RESPECT
12/7/16
9,983
1,518
950
22
Hà Nội, Việt Nam
PHP làm là sao @@ khó hỉu vkl
Code Java nhưng box code ko có phần dành cho Java nên mình đành để box PHP
 

Banbeucmas

DEVELOPER
THÀNH VIÊN
F TO PAY RESPECT
12/7/16
9,983
1,518
950
22
Hà Nội, Việt Nam

Banbeucmas

DEVELOPER
THÀNH VIÊN
F TO PAY RESPECT
12/7/16
9,983
1,518
950
22
Hà Nội, Việt Nam

MasterClaus

DEVELOPER
SPECIALIST
SUPPORTER
THÀNH VIÊN
12/7/16
483
1,374
620
HCM
minefs.net
Những người đã học code thì đây là điều cần bản nhất cần phải biết → không cần thiết
 

Banbeucmas

DEVELOPER
THÀNH VIÊN
F TO PAY RESPECT
12/7/16
9,983
1,518
950
22
Hà Nội, Việt Nam
Những người đã học code thì đây là điều cần bản nhất cần phải biết → không cần thiết
Mình vẫn đăng thôi, lần nữa bài này từ bukkit.org mà
 

Nekoo

THÀNH VIÊN
26/7/16
470
96
410
Đà Nẵng
nhìn chả hỉu gì :(((((((((( vào codeanywhere học không có lí thuyết cơ bản nhìn éo hỉu gì :(( thế là từ đó mất hết hứng học :'(
 

Banbeucmas

DEVELOPER
THÀNH VIÊN
F TO PAY RESPECT
12/7/16
9,983
1,518
950
22
Hà Nội, Việt Nam
nhìn chả hỉu gì :(((((((((( vào codeanywhere học không có lí thuyết cơ bản nhìn éo hỉu gì :(( thế là từ đó mất hết hứng học :'(
Ko thích codeanywhere lắm
Đợi rảnh làm 1 thread dịch đề bài codecademy cho
 

Nekoo

THÀNH VIÊN
26/7/16
470
96
410
Đà Nẵng
Ko thích codeanywhere lắm
Đợi rảnh làm 1 thread dịch đề bài codecademy cho
ý là học cái hci trc để có lý thuyết căn bản í . Nhìn mấy cái dngf code ko hỉu j hết
 

IcyLovely

THÀNH VIÊN
31/8/16
18
10
140
23
tphcm
ý là học cái hci trc để có lý thuyết căn bản í . Nhìn mấy cái dngf code ko hỉu j hết
Học java căn bản trước rồi mới đến bukkit programming nhé
 

Banbeucmas

DEVELOPER
THÀNH VIÊN
F TO PAY RESPECT
12/7/16
9,983
1,518
950
22
Hà Nội, Việt Nam
ý là học cái hci trc để có lý thuyết căn bản í . Nhìn mấy cái dngf code ko hỉu j hết
Học java căn bản trước rồi mới đến bukkit programming nhé
Lập trình vốn hack não rồi nhỉ.
Đừng nhảy vào Bukkit API khi chưa hoc Java.
Mình cũng gặp khó khăn như bạn mà, ai mới học chả thế. Nếu như muốn học Java qua ngôn ngữ khác thì học C++ trước, mình có thể đưa bạn 1 vài bài căn bản
Nếu đã quen với dòng lệnh của C++ rồi thì sang Java sẽ đỡ nhức đầu hơn
 

Nekoo

THÀNH VIÊN
26/7/16
470
96
410
Đà Nẵng
Lập trình vốn hack não rồi nhỉ.
Đừng nhảy vào Bukkit API khi chưa hoc Java.
Mình cũng gặp khó khăn như bạn mà, ai mới học chả thế. Nếu như muốn học Java qua ngôn ngữ khác thì học C++ trước, mình có thể đưa bạn 1 vài bài căn bản
Nếu đã quen với dòng lệnh của C++ rồi thì sang Java sẽ đỡ nhức đầu hơn
cho em link học c++ cơ bnar
 

Banbeucmas

DEVELOPER
THÀNH VIÊN
F TO PAY RESPECT
12/7/16
9,983
1,518
950
22
Hà Nội, Việt Nam
cho em link học c++ cơ bnar
Cái này thì anh mình học KHTN dạy, pm mình đi rồi mình hương dẫn