V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
fengsi
V2EX  ›  程序员

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

  •  
  •   fengsi · 2023-11-28 11:23:15 +08:00 · 3854 次点击
    这是一个创建于 390 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在用 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
    我买鼠标都是必须侧键的,
    所以在用别人的电脑或者远程控制不识别侧键前进后退就很难受了,
    enchilada2020
        10
    enchilada2020  
       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
    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 的烂番茄)
    PainAndLove
        31
    PainAndLove  
       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   ·   实用小工具   ·   2863 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 12:30 · PVG 20:30 · LAX 04:30 · JFK 07:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.