sách gpt4 ăn đã đi

Cách in thông tin gỡ lỗi dấu vết trong PHP

In lại Tác giả: qq735679552 Thời gian cập nhật: 27-09-2022 22:32:09 26 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN về cách in thông tin theo dõi và gỡ lỗi trong PHP này được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.

Đối với hầu hết các ngôn ngữ được biên dịch, chẳng hạn như C, Java và C#, chúng ta có thể dễ dàng thực hiện gỡ lỗi điểm dừng, nhưng đối với PHP, bạn phải cài đặt XDebug và thực hiện các cấu hình phức tạp trong trình chỉnh sửa để đạt được khả năng gỡ lỗi điểm dừng. Tuy nhiên, nếu bạn chỉ gỡ lỗi và xem truy ngược ngăn xếp, PHP thực sự đã chuẩn bị sẵn cho chúng ta hai hàm, cho phép chúng ta dễ dàng xem trạng thái gọi của chương trình khi nó đang chạy.

gỡ lỗi_quay_lại()

Như có thể thấy từ nghĩa đen của phương pháp này, nó có nghĩa là gỡ lỗi truy nguyên và những gì được trả về là một mảng thông tin truy nguyên.

php" id="highlighter_950269">
?
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
chức năng a_kiểm tra( $str )
{
     tiếng vọng "Xin chào: $str" , PHP_EOL;
     var_dump(debug_backtrace());
}
 
var_dump(debug_backtrace());
 
a_kiểm tra( "MỘT" );
 
// Xin chào: A/Users/zhangyue/MyDoc/blogpost/dev-blog/php/202004/source/PHP thông tin gỡ lỗi theo dõi in.php:7:
// mảng(1) {
// [0] =>
// mảng(4) {
// 'tập tin' =>
// string(93) "/Users/zhangyue/MyDoc/blogpost/dev-blog/php/202004/source/PHP thông tin gỡ lỗi theo dõi in ấn.php"
// 'dòng' =>
// số nguyên(12)
// 'chức năng' =>
// chuỗi(6) "a_test"
// 'đối số' =>
// mảng(1) {
// [0] =>
// chuỗi(1) "A"
// }
// }
// }

Phương thức này phải được gọi trong một hàm và sẽ không có nội dung khi sử dụng ngoài phương thức hàm. Đánh giá từ nội dung, nó xuất ra __FILE__, __LINE__, __FUNCTION__, $argv và các thông tin khác về chức năng này. Trên thực tế, nó có liên quan đến chức năng hiện đang in dòng này.

Tất nhiên, chúng ta cũng có thể lồng thêm một vài lớp hàm nữa để xem nội dung in ra là gì.

?
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
chức năng b_kiểm tra(){
     c_kiểm tra();
}
 
chức năng c_kiểm tra(){
     a_kiểm tra( "b -> c -> a" );
}
 
b_kiểm tra();
 
// Xin chào: b -> c -> a
// /Users/zhangyue/MyDoc/blogpost/dev-blog/php/202004/source/PHP thông tin gỡ lỗi theo dõi in ấn.php:7:
// mảng(3) {
// [0] =>
// mảng(4) {
// 'tập tin' =>
// string(93) "/Users/zhangyue/MyDoc/blogpost/dev-blog/php/202004/source/PHP thông tin gỡ lỗi theo dõi in ấn.php"
// 'dòng' =>
// số nguyên(37)
// 'chức năng' =>
// chuỗi(6) "a_test"
// 'đối số' =>
// mảng(1) {
// [0] =>
// chuỗi(11) "b -> c -> a"
// }
// }
// [1] =>
// mảng(4) {
// 'tập tin' =>
// string(93) "/Users/zhangyue/MyDoc/blogpost/dev-blog/php/202004/source/PHP thông tin gỡ lỗi theo dõi in ấn.php"
// 'dòng' =>
// số nguyên(33)
// 'chức năng' =>
// chuỗi(6) "c_test"
// 'đối số' =>
// mảng(0) {
// }
// }
// [2] =>
// mảng(4) {
// 'tập tin' =>
// string(93) "/Users/zhangyue/MyDoc/blogpost/dev-blog/php/202004/source/PHP thông tin gỡ lỗi theo dõi in ấn.php"
// 'dòng' =>
// số nguyên(40)
// 'chức năng' =>
// chuỗi(6) "b_test"
// 'đối số' =>
// mảng(0) {
// }
// }
// }

Đúng vậy, thứ tự đầu ra của một mảng là thứ tự thực hiện của một ngăn xếp. b_test() được gọi đầu tiên nên nó nằm ở cuối ngăn xếp và đầu ra tương ứng là phần tử cuối cùng trong mảng.

Các phương pháp sử dụng tương tự được sử dụng trong các lớp.

?
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
lớp học MỘT{
     chức năng kiểm tra_a(){
         $cái này ->kiểm tra_b();
     }
     chức năng kiểm tra_b(){
         var_dump(debug_backtrace());
     }
}
 
$ một = mới MỘT();
$ một ->kiểm tra_a();
 
// /Users/zhangyue/MyDoc/blogpost/dev-blog/php/202004/source/PHP thông tin gỡ lỗi theo dõi in ấn.php:90:
// mảng(2) {
// [0] =>
// mảng(7) {
// 'tập tin' =>
// string(93) "/Users/zhangyue/MyDoc/blogpost/dev-blog/php/202004/source/PHP thông tin gỡ lỗi theo dõi in ấn.php"
// 'dòng' =>
// số nguyên(87)
// 'chức năng' =>
// chuỗi(6) "test_b"
// 'lớp' =>
// chuỗi(1) "A"
// 'đối tượng' =>
// lớp A#1 (0) {
// }
// 'kiểu' =>
// chuỗi(2) "->"
// 'đối số' =>
// mảng(0) {
// }
// }
// [1] =>
// mảng(7) {
// 'tập tin' =>
// string(93) "/Users/zhangyue/MyDoc/blogpost/dev-blog/php/202004/source/PHP thông tin gỡ lỗi theo dõi in ấn.php"
// 'dòng' =>
// số nguyên(95)
// 'chức năng' =>
// chuỗi(6) "test_a"
// 'lớp' =>
// chuỗi(1) "A"
// 'đối tượng' =>
// lớp A#1 (0) {
// }
// 'kiểu' =>
// chuỗi(2) "->"
// 'đối số' =>
// mảng(0) {
// }
// }
// }

Khi được sử dụng trong một lớp, sẽ có thêm một trường đối tượng trong mục mảng, trường này hiển thị thông tin về lớp nơi đặt phương thức này.

Khai báo hàm của debug_backtrace() là:

?
1
debug_backtrace ([ int $tùy chọn = DEBUG_BACKTRACE_PROVIDE_OBJECT [, int $giới hạn = 0 ]] ) : mảng

Trong số đó, các tùy chọn có hai hằng số có thể được xác định. DEBUG_BACKTRACE_PROVIDE_OBJECT cho biết có điền vào chỉ mục của "đối tượng" hay không; DEBUG_BACKTRACE_IGNORE_ARGS cho biết có nên bỏ qua chỉ mục của "args" hay không, bao gồm tất cả các tham số hàm/phương thức, điều này có thể tiết kiệm chi phí bộ nhớ. giới hạn có thể được sử dụng để giới hạn số lượng khung ngăn xếp được trả về. Giá trị mặc định là 0 để trả về tất cả các ngăn xếp.

debug_backtrace() và phương thức debug_print_backtrace() được giới thiệu bên dưới hỗ trợ mã trong các tệp yêu cầu/bao gồm và eval(). Khi nhúng một tệp, đường dẫn đến tệp được nhúng sẽ được xuất ra.

gỡ lỗi_in_quay_lại()

Phương thức này cũng có thể được nhìn thấy từ tên. Nó sẽ in trực tiếp nội dung truy nguyên. Khai báo chức năng của nó giống như debug_backtrace(), nhưng $options mặc định là DEBUG_BACKTRACE_IGNORE_ARGS, có nghĩa là nó chỉ in tệp và số dòng nơi lệnh gọi được thực hiện. làm ra.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
chức năng Một() {
     b();
}
 
chức năng b() {
     c();
}
 
chức năng c(){
     gỡ lỗi_in_lại_theo_dõi();
}
 
Một();
 
#0 c() được gọi tại [/Users/zhangyue/MyDoc/blogpost/dev-blog/php/202004/source/PHP print theo dõi thông tin gỡ lỗi theo dõi.php:144]
#1 b() được gọi tại [/Users/zhangyue/MyDoc/blogpost/dev-blog/php/202004/source/PHP print theo dõi thông tin gỡ lỗi theo dõi.php:140]
#2 a() được gọi tại [/Users/zhangyue/MyDoc/blogpost/dev-blog/php/202004/source/PHP print theo dõi thông tin gỡ lỗi theo dõi.php:151]

Ngoài ra, hàm này không cần sử dụng var_dump() hoặc print_r() cho đầu ra. Nếu bạn sử dụng trực tiếp hàm này thì nó sẽ xuất ra. Nó cho phép chúng ta debug rất nhanh chóng và thuận tiện. Ví dụ, trong các framework lớn như laravel, khi bộ điều khiển cần xem thông tin ngăn xếp, chúng ta có thể sử dụng debug_print_backtrace() để xem nhanh tình huống lệnh gọi ngăn xếp hiện tại. Nếu debug_backtrace() không chỉ định $options, nó sẽ chiếm dung lượng bộ nhớ rất lớn hoặc không thể hiển thị đầy đủ.

Tóm tắt

Hai hàm được giới thiệu hôm nay có thể giúp chúng ta gỡ lỗi mã hoặc hiểu tình huống gọi của một khung một cách linh hoạt. Tất nhiên, trong những trường hợp chính thức, vẫn nên sử dụng Xdebug với sự hỗ trợ của trình soạn thảo để gỡ lỗi điểm dừng, vì chúng ta không thể thấy những thay đổi trong các biến bằng cách sử dụng debug_backtrace().

Mã kiểm tra:

github.com/zhangyue050… 。

Trên đây là chi tiết về cách PHP in thông tin theo dõi và gỡ lỗi. Để biết thêm thông tin về thông tin gỡ lỗi in PHP, vui lòng theo dõi các bài viết liên quan khác của tôi! .

Liên kết gốc: https://juejin.cn/post/6948616771351871525.

Cuối cùng, bài viết về cách PHP in thông tin truy tìm và gỡ lỗi kết thúc tại đây. Nếu bạn muốn biết thêm về cách PHP in thông tin truy tìm và gỡ lỗi, vui lòng tìm kiếm các bài viết về CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. blog tương lai! .

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress