关于在拿到别人的代码,完全不清楚原先逻辑出现bug如何排查并且修复问题

就拿公司的会议项目,由于直接使用的是第三方的demo改一改就上线的,近期遇到一个bug,其他开发人员产生的,到我手上是如何在5分钟之内迅速找到问题所在并且修复的

bug:flutter项目出现的bug是在切换中英文后我们自己写的菜单按钮会消失

这个很好找,如果有一定的观察力是可以直接定位到是哪个文件的,现在就从零开始找这个文件

出现问题的界面是进入会议室底部弹窗里面的菜单

首先从main.dart开始

runApp(MeetingAppLocalizationsScope(child: MeetingApp()));

MeetingApp这个类的关键代码在SplashPage

MaterialApp(
      home: SplashPage(),
    )

SplashPage里面就是一个开屏展示,然后跳转首页

NavUtils.pushNamedAndRemoveUntil(context, RouterName.homePage);

这就很快定位到首页了,首页里面有加入会议的逻辑,找到加入会议这块

navigatorState.push(MaterialPageRoute(
        builder: (context) => MeetingUIRouter(
          roomContext: roomContext,
          arguments: meetingArguments,
        ),
      ));

MaterialPage(
            name: _RouterName.inMeeting,
            key: ValueKey((_RouterName.inMeeting, uiNavigator.roomContext)),
            child: Builder(
              builder: (context) => MeetingPage(uiNavigator.meetingArguments),
            ),
          ),

从这里跳转到会议中去的最终的界面是meetingpage这个类

这里基本上就是出问题的界面了,在开发工具右侧可以看到该类中所有的方法,这个时候最快速的方式就是通过右侧找到对应的方法名称,这个bug出现在菜单弹窗,找到方法名为

_showMorePopupMenu

关键逻辑在

final widgets = _fullMoreMenuItemList
        .where((e) => shouldShowMenu(e, isMoreMenuItem: true))
        .map((e) => menuItem2Widget(e, isMoreMenuItem: true))
        .whereType<Widget>()
        .toList(growable: false);

发现有一层where的过滤,bug的表现是菜单在切换语言后会丢失,那很大可能就是这个过滤导致丢失了,追到shouldShowMenu方法中去

if (!item.isValid) return false;

最可疑的是上面的判断,其他的判断基本和我们新添加的菜单无关,只有这里会影响到我们新增的菜单,item的类型是一个NEMeetingMenuItem,这个类有三个实现类,每个都实现了isValid属性,

 @override
  bool get isValid {
    return isBuiltInMenuItem || (super.isValid && singleStateItem.isValid);
  }

前面的条件判断是没问题的,最有可能出现问题的是最后一个singleStateItem.isValid追进去发现逻辑是下面这段逻辑

bool get isValid =>
      textGetter != null ||
      (text != null && text!.length > 0 && text!.length <= maxTextLength);

到这里就非常明了了,text百分百有值,基本可以确认是按钮文字长度的问题

这个maxTextLength变量是全局的

maxTextLength = 10;

所以最终定位的bug原因是按钮的文字不能超过10个字符,中文,日文的都在10个字符内所以表现正常,英文的长度超过了,所以最终到这个菜单被上面的shouldShowMenu方法过滤掉了

问题解决,以上只是一个排查问题的思路,从你熟悉的地方开始找,不断的往下找调用栈,不熟悉的地方只要能找到位置,其实逻辑有没有问题一眼就可以看出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值