comment added
This commit is contained in:
@ -177,6 +177,7 @@ printfinit(void)
|
||||
pr.locking = 1;
|
||||
}
|
||||
|
||||
// 打印当前调用栈的返回地址,实现简单的函数回溯,用于调试。
|
||||
void
|
||||
backtrace(void)
|
||||
{
|
||||
@ -185,11 +186,12 @@ backtrace(void)
|
||||
uint64 ra,fp = r_fp();//frame pointer -> address
|
||||
uint64 pre_fp = *((uint64*)(fp - 16));
|
||||
|
||||
// 只要当前fp和上一个fp在同一页内,就继续回溯
|
||||
while(PGROUNDDOWN(fp)==PGROUNDDOWN(pre_fp)){
|
||||
ra = *(uint64 *)(fp - 8);
|
||||
printf("%p\n", (void*)ra);
|
||||
fp = pre_fp;
|
||||
pre_fp = *((uint64*)(fp - 16));
|
||||
ra = *(uint64 *)(fp - 8); // 取出返回地址
|
||||
printf("%p\n", (void*)ra); // 打印返回地址
|
||||
fp = pre_fp; // 更新fp为上一个fp
|
||||
pre_fp = *((uint64*)(fp - 16)); // 获取新的上一个fp
|
||||
}
|
||||
|
||||
ra = *(uint64 *)(fp - 8);
|
||||
|
||||
Reference in New Issue
Block a user