在使用Keil进行STM32的开发时,常常会遇到一个问题:鼠标点进某个函数的定义时,Keil并不会跳转到该函数的定义处。这个问题很烦人,也会造成我们的开发效率低下。下面从几个方面来探讨这个问题的原因。
Keil跳转到函数定义的关键是要知道这个函数定义在哪里。所以如果头文件没有正确的包含,Keil就无从知道这个函数定义的位置。因此,一定要保证头文件的include路径设置正确无误。
在Keil中,可以通过Options -> C/C++ -> Include Paths来对头文件路径进行设置。如果不知道自己的头文件路径在哪里,可以通过GCC编译器生成的错误信息来找到,查看错误信息的时候会显示哪个头文件无法找到。
有时候即使头文件正确包含了,Keil仍然无法找到函数定义的位置。这时候,就要检查一下这个函数定义在哪个文件中。如果定义在源文件中,那么无论操作多少次,鼠标点进去都不会成功。因为Keil没有将源文件的位置作为搜索范围。
所以,如果我们需要查看某个函数的定义,可以通过在函数名称上按下F12键,打开Call Graph窗口,从而查看函数被调用的位置和调用关系。如果找到了调用这个函数的函数名称,可以通过右键单击该函数名称,选择“Go to Definition”来跳转到该函数的定义处。
在进行代码混淆或者加密时,为了防止被反编译,可能会把某一个文件中的函数重命名,或者将函数的定义进行分离。这个时候,Keil就很难找到这个函数的定义了,因为现在这个函数不再是按照正常规则命名的函数了。
如果代码确实需要进行加密或混淆,请在加密或混淆前,先备份一份未加密或混淆的代码。这样,在需要查找函数定义位置的时候,就可以使用未加密或混淆的代码进行查找了。