• 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

  • 相关阅读:
    Python基础(6)--条件、循环
    sql中limit和汇总函数的集合使用
    mysql查看表结构
    Axure RP Extension for Chrome
    安装android studio报错Failed to install Intel HAXM.
    java8 环境变量设置
    C、C++文件操作大全
    sqlite3 sqlite3_prepare、sqlite3_step使用
    C/C++获取当前系统时间
    C++ 字符串转化成浮点型
  • 原文地址:https://www.cnblogs.com/wjcdx/p/14455184.html
Copyright © 2020-2023  润新知