请教大家代码阅读和调试的技巧 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要回答技术问题时复制粘贴 AI 生成的内容
fengsi
V2EX    程序员

请教大家代码阅读和调试的技巧

  •  
  •   fengsi 2023-11-28 11:23:15 +08:00 4581 次点击
    这是一个创建于 759 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在用 IDEA 写一些 java 的代码,有时候会遇到一个方法里面包含几个子方法,我想仔细看看几个子方法(这些方法都在一个文件中),一般都是用 cmd+鼠标左键去查看,看完了想再回到父方法,或者去看其他子方法,我都是鼠标滚动着去找,找到了再看,有时候需要频繁查看几个子方法,就需要不断的滚来滚去,效率很低,请教大家平时遇到这种情况是怎么做的,IDEA 有什么插件能帮助到我吗?

    其实在写代码的时候也有这些问题,一个方法中的实现被抽离成几个子方法,然后一个文件中的代码篇幅会显得很长,无论是想找什么代码,滚来滚去很不方便
    35 条回复    2023-11-30 11:08:19 +08:00
    fengsi
        1
    fengsi  
    OP
       2023-11-28 11:26:43 +08:00
    我目前常用的一个方法是:复制当前这个方法名,然后 cmd + f 搜索,然后跳过去,仍感到很不方便
    cMoon
        2
    cMoon  
       2023-11-28 11:29:32 +08:00
    鼠标侧键跳转上次光标的位置
    xiaoHuaJia
        3
    xiaoHuaJia  
       2023-11-28 11:30:44 +08:00   1
    鼠标左键 谁用谁知道
    xiaoHuaJia
        4
    xiaoHuaJia  
       2023-11-28 11:31:20 +08:00
    或者 ctrl+alt+左箭头
    flamiNNgo
        5
    flamiNNgo  
       2023-11-28 11:35:06 +08:00
    书签功能
    把书签当做队列,一层一层的向上回滚
    gxy2825
        6
    gxy2825  
       2023-11-28 11:42:20 +08:00   12
    Ctrl + E:看你最近浏览过的文件
    Ctrl + Shift + 数字键:bookmark ,标记一个位置,下次按 Ctrl + 对应数字键就能跳转回去(这是我用的最频繁的快捷键)
    mazhiyuan
        7
    mazhiyuan  
       2023-11-28 11:52:47 +08:00   1
    鼠标必须得有鼠标侧键,不需要多,能前进和后退。
    2Soon
        8
    2Soon  
       2023-11-28 11:53:40 +08:00
    @gxy2825 学到了
    AoEiuV020JP
        9
    AoEiuV020JP  
       2023-11-28 13:09:09 +08:00 via Android
    我买鼠标都是必须侧键的,
    所以在用别人的电脑或者远程控制不识别侧键前进后退就很难受了,
    KMpAn8Obw1QhPoEP
        10
    KMpAn8Obw1QhPoEP  
       2023-11-28 13:12:49 +08:00 via Android
    居然一堆人在说鼠标侧键 等一波 vim 大佬
    tool2d
        11
    tool2d  
       2023-11-28 13:30:43 +08:00
    Ctrl+W: 最近两个窗口快速切换
    Ctrl+F2: 加 bookmark
    F4:列出所有 bookmark ,跳转到选定位置
    Alt+G: 根据光标下的函数名,跳转到对应函数体
    Alt+Left: 光标回跳到上一个位置
    Alt+Right: 光标跳到下一个位置
    Ctrl+O: 下拉列出 50 个最近打开过的源文件列表,按打开时间排序
    darkengine
        12
    darkengine  
       2023-11-28 14:32:17 +08:00
    把 IDE 的热键用起来,我用带侧键的鼠标,一个定义成 next position, 一个定义成 prev position ,跳来跳去相当方便
    dzdh
        13
    dzdh  
       2023-11-28 14:35:08 +08:00   1
    别的不知道。mac 下用 option + cmd + 向左箭头,回到上次代码位置
    Rache1
        14
    Rache1  
       2023-11-28 14:41:43 +08:00   1
    Ctrl+Shift+E 显示你最近查看过的位置。

    其实默认快捷键中 Ctrl+Alt+ 和 Ctrl+Alt+ 就可以在快速跳转光标位置的,不过我把这两个快捷键设置成了音乐切歌,所以被占用了。
    Pangurban
        15
    Pangurban  
       2023-11-28 14:44:13 +08:00
    @dzdh 这个是正解
    xiaohuya
        16
    xiaohuya  
       2023-11-28 16:21:09 +08:00
    在 map key 里面搜索 recent location mac 默认 shift + cmd + E
    xlzyxxn
        17
    xlzyxxn  
       2023-11-28 16:43:52 +08:00
    tool2d
        18
    tool2d  
       2023-11-28 16:49:13 +08:00
    再多唠叨一句,我项目里有很多业务相关代码,用源代码分析的方式进行预处理,有专门辅助 APP 去做关键入口整理和跳转。

    要不然几百上千的业务逻辑,在不熟悉的情况下,鼠标导航不知道要点到何年何月了。
    AlvaMu
        19
    AlvaMu  
       2023-11-28 16:56:05 +08:00   4
    idea 侧边栏有个 Hierarchy, mac 下的快捷键是 control + opt + h,默认展示的是该方法的上游调用链,但是你可以点第二个框,就是该方法的向下的调用链,并通过 scope 里面来过滤调用的代码范围,比如只看本 project 的方法,点击对应的方法,就可以跳转到对应的位置了
    aibx01
        20
    aibx01  
       2023-11-28 17:43:27 +08:00
    ctrl+alt+左箭头
    kidlj
        21
    kidlj  
       2023-11-28 17:49:32 +08:00
    VSCode + VIM 插件

    跳转到定义:ctrl + ]
    跳回上一个位置:ctrl + o
    跳到下一个位置:ctrl + i

    以上是标准快捷键。又自己定义了几个:

    ctrl + . (适用于 interface 类型,如果一个接口有多个实现,这个命令会列出所有实现)

    当然阅读代码时最好用的是右键菜单:Find All References ,用于查看一个函数/变量/类型的所有被引用的地方。
    chitanda
        22
    chitanda  
       2023-11-28 18:11:40 +08:00   1
    左侧栏有个 structure ,会显示该文件下所有方法
    midstream
        24
    midstream  
       2023-11-28 19:37:53 +08:00
    侧键好用
    swaggeek
        25
    swaggeek  
       2023-11-28 20:15:19 +08:00
    ctrl + alt + 左右箭头 可以跳回上一个光标和下一个光标
    jones2000
        26
    jones2000  
       2023-11-28 21:24:24 +08:00
    1 个文件,多开, 每个屏方一个对应函数的位置,然后慢慢阅读。
    zhdi
        27
    zhdi  
       2023-11-29 00:41:21 +08:00 via iPhone
    参考 vim 的 mark ,使用的灵活度,自由度,效率远远比只能在几个定义位置跳转强
    Rehtt
        28
    Rehtt  
       2023-11-29 08:41:16 +08:00
    用的 nvim+nvimdots ,跳转函数用 gd ,返回按 ctrl+o ,m(A-Z)添加全局书签,m(a-z)添加局部书签,'(A-Z a-z)跳转书签,][跳转下一个函数,]]跳转上一个函数
    fengsi
        29
    fengsi  
    OP
       2023-11-29 10:09:36 +08:00
    @chitanda 我一开始便是这样用的,后来方法越来越多,structure 那里就拖得很长,也不好找了
    iceAD
        30
    iceAD  
       2023-11-29 10:39:02 +08:00
    JetBrains 的 IdeaVim 快捷
    常用:
    gd:等效于 f12,当位于声明处时会查出所有的引用,go to define
    K:查看光标下字段的声明(Linux 下多数情况会跳到对应的 man 手册)
    m:Mark 标记,用于打书签,个人用的少,老是记不住,而且有的 IDE 支持的不是很好,跨文件的大写标记有的 IDE 识别不了。
    Ctrl+o:等效于 VS 的往后跳转,等效于鼠标侧键默认的往后。
    Ctrl+i:等效于 VS 的往前跳转,等效于鼠标侧键默认的往前。
    一般常用:
    zz:将当前光标所处位置挪动到视图窗口的正中央,代替鼠标滚轮。
    zt or zb:也是代替鼠标滚轮,一个的 top ,一个是 bottom 。
    zc:收起光标处代码折叠,得看 IDE 支不支持。
    zo:打开光标处代码折叠。

    以上大部分支持 VIM 插件的 IDE 都能用。
    但看类的组织一般还是看类视图。
    JetBranis 里面是:
    Alt+\ 或者 Ctrl+ Alt + T

    (有一说一,Rider 是真好用,让我告别了 VS 的烂番茄)
    Lanayaaa
        31
    Lanayaaa  
       2023-11-29 11:58:46 +08:00
    @AlvaMu 好像有个 diagram
    diagram structrue Hierarchy 这 3 个感觉都是差不多的功能
    Vintingb
        32
    Vintingb  
       2023-11-29 12:51:44 +08:00 via iPhone
    vim c+o 和 c+i
    piaooo
        33
    piaooo  
       2023-11-29 16:58:03 +08:00
    鼠标侧键,一个是向前跳转一个是向后跳转
    AlvaMu
        34
    AlvaMu  
       2023-11-29 17:05:35 +08:00
    @PainAndLove 嗯嗯,diagram 是看类继承,实现接口之间的关系,structure 是看本类方法和类属性的,hierarchy 看的是方法调用链,几个结合起来
    structure 我一般不怎么用,觉得太重了,一般用 cmd+f12 (file structure)快捷键,出来一个小窗口里面看就够了
    qqService
        35
    qqService  
       2023-11-30 11:08:19 +08:00
    @tool2d 辅助 app 是 idea 插件吗 ,求推荐
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     904 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 20:02 PVG 04:02 LAX 12:02 JFK 15:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86