Có cách nào ghi log lại tất cả các hàm đã thực thi ko

mình có tìm trên mạng thì thấy có công cụ stack trace debug, mình đặt 1 breakpoint ở 1 hàm nào đó, thì nó sẽ cho mình thấy stack các hàm mà sẽ gọi có liên quan đến hàm đó
vd:

như hình trên mình đặt breakpoint tại hàm b2.1 thì sẽ thấy được call stack :
main() > b() > b2() > b2.1()

giờ mình muốn nó hiển thị hết tất cả các hàm chương trình đã từng call luôn

vd:
main() > a() >a1() > a2()
main() > b() > b1()
main() > b() >b2() > b2.1()

thì làm thế nào hoặc có tool nào ghi đc log toàn bộ các hàm đã đc call trong khi chương trình hoạt động không nhỉ

Php có mà, bạn chưa search?
Php print call stack

cái này nó chỉ call stack tại 1 điểm break point nào đó thôi bạn, ý mình đang muốn là log lại toàn bộ hoạt động luôn, bạn ko thấy cái vd của mình à, nếu var_dum tại 1 hàm thì chỉ thấy đc các callstack của hàm đó thôi

Không biết bạn đã google như thế nào, chứ đây là link mình tìm được: https://kpayne.me/2013/12/24/write-your-own-code-profiler-in-php/

Và đây là code *tham khảo*:
declare(ticks=1);
register_tick_function('do_profile');

func_one();

function do_profile() {
	$bt = debug_backtrace();

	if (count($bt) <=1) {
		return;
	}
	$frame = $bt[1];

	$function = $frame['function'];
	echo  str_repeat('   ', count($bt)-2) . $function . PHP_EOL;
	unset($bt);
}

function func_one() {
	while (false);
	func_two();
	func_four();
}

function func_two() {
	while (false);
	func_three();
}

function func_three() {
	while (false);
}

function func_four() {
	while (false);
}

Sample output

PS: mình không biết code PHP

2 Likes

ok mình đã thử và kết quả

đây là vị trí bắt đầu chạy của toàn bộ app laravel

mình đặt code debug backtrace vào ngay trước vị trí đó

kết quả chả có gì print ra cả

cách giải quyết này chỉ hoạt động với code đơn giản thôi, và mình kéo xuống đọc thì nó có câu thế này

You can only profile using tickable events. The PHP manual defines a tick as:

An event that occurs for every N low-level tickable statements executed by the parser… Not all statements are tickable. Typically, condition expressions and argument expressions are not tickable.

nên đây chỉ là 1 giải pháp cục bộ kiểm tra từng hàm, mà hàm đó bạn đã biết nó có thể tickable hay chưa, mà nếu là như vậy mình sài luôn chức năng debug của ide cho nhanh?

à mình tìm đc rồi

2 Likes

Theo bạn thì code do_profile của bạn nó sẽ in ra đâu?
Rồi Lavarel nó handle cả cái webpage như thế nào?

Học võ, bạn học 1 cú đấm thẳng vào mặt, ra ngoài thực tế, bạn gặp 1 tên cao 1m7 cũng muốn đấm thẳng để trúng mặt, gặp 1 tên cao 2m3 cũng muốn đấm thẳng để trúng mặt, gặp tên 1m3 cũng muốn đấm thẳng để trúng mặt mà chẳng biết hướng lên/xuống tí xíu, rồi lại tự hỏi sao nó là không trúng mặt đối thủ à?

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?