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

posted @ 2021-02-27 11:34  wjcdx  阅读(528)  评论(0编辑  收藏  举报