Source Insight阅读Linux Kernel误解析__read_mostly问题解决
https://mp.weixin.qq.com/s/WIg7jyD8FCFapKQ7gj03xA
Source Insight is a powerful project-oriented programming editor, code browser, and analyzer that helps you understand code, while you work and plan. Source Insight has built-in dynamic analysis for C/C++, C#, Java, Objective-C, and more.
使用Source Insight阅读Linux内核代码是很方便的,面对那么多的代码文件,也可以做到很快的响应。但同时也存在一些小的痛点,比如本文将要介绍的__read_mostly的误解析问题,就导致代码跟踪中断。
1. __read_mostly误解析
在跟踪数据帧接收流程的过程中,驱动接收完数据包之后,会调用netif_receive_skb把帧交给协议栈处理,在跟踪过程中,会发现ptype_all是黑色的:
因为是黑色的,所以ptype_all没有被Source Insight识别到,无法方便的跟踪到它是如何定义的。
有一个稍微绕一点的方法,就是使用Reference全局查找:
查找的结果如下:
可以发现第一行就是ptype_all的定义:
根据代码着色,可以发现Source Insight把这一行里的__read_mostly误解析为了变量名,而ptype_all只是其修饰符。
从Symbols窗口可以看到,误解析的变量还有很多:
2. __read_mostly误解析的解决
虽然查找Reference可以解决问题,但是毕竟有点绕,要是能够直接使用Ctrl+鼠标单击就能跳转到正确的定义位置就好了。
因为这个问题只有在阅读Linux内核源码的工程中存在,所以这里提供一个在Project范围内解决该问题的方法。
-----------------------------------------------------------------------------
这是一篇付费文章,请移步付费阅读全文,谢谢!
文章链接:https://mp.weixin.qq.com/s/WIg7jyD8FCFapKQ7gj03xA