在日常的应用程序调试中,经常会打印函数的调用关系,下面介绍一个简单打印函数被谁调用的方法。
函数内嵌汇编代码
unsigned int lr;
__asm__ __volatile__("mov %0, lr \n":"=r"(lr));
printf("func lr is 0x%x \n", lr);
测试代码
#include <stdio.h>
void fun2()
{
unsigned int lr;
__asm__ __volatile__("mov %0, lr \n":"=r"(lr));
printf("func lr is 0x%x \n", lr);
}
void fun1()
{
fun2();
}
int main()
{
fun1();
return 0;
}
打印和反汇编结果
func lr is 0x83fd
000083f4 <fun1>:
83f4: b580 push {r7, lr}
83f6: af00 add r7, sp, #0
83f8: f7ff ffec bl 83d4 <fun2>
83fc: bd80 pop {r7, pc}
83fe: bf00 nop