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

关于容器中代码 debug 方案

  •  
  •   liuxu · 2021-05-05 23:47:05 +08:00 · 2935 次点击
    这是一个创建于 1332 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前弄了一个,我 php+swoole 的话用的 vscode 做 debug 远程,然后用 frp 映射到外网,然后容器中的 php 使用 yasd 远程链接 frp 外网地址,通过 vscode 调试,主要还是因为 k8s 有自己的内网。

    不知道各位大佬有没有其他好用的方案
    第 1 条附言  ·  2021-05-06 11:31:26 +08:00
    多谢各位大哥,看到了几个神器
    15 条回复    2022-07-24 21:30:37 +08:00
    nvkou
        1
    nvkou  
       2021-05-05 23:49:17 +08:00 via Android   ❤️ 1
    脚本型语言又不用编译。单机的话直接把代码目录映射出来就行了
    crclz
        2
    crclz  
       2021-05-06 00:30:20 +08:00   ❤️ 2
    如果你的容器是生产环境的话,那么日志是比较好的排错方案。

    如果你的容器是开发环境的话,那么应当尽量选择熟悉的、成熟的的环境作为开发环境。但是直接在容器里面 debug 的技术还是存在的,VisualStudio 就已经支持将容器作为开发环境的 debug 。
    dayeye2006199
        3
    dayeye2006199  
       2021-05-06 04:26:46 +08:00   ❤️ 1
    了解一下: https://skaffold.dev/

    端口转发 + 自动容器 rebuild+部署 + 代码同步 + 日志转发,我用着感觉不错。
    xuanbg
        4
    xuanbg  
       2021-05-06 06:34:53 +08:00   ❤️ 1
    要学会用日志来定位和分析问题,然后有条件的话可以从定位点打断点进行 bebug 快速验证问题,而不是依赖 debug 模式强行调试。全程 debug 效率太低了。。。
    holulu
        5
    holulu  
       2021-05-06 06:57:06 +08:00   ❤️ 1
    chenshun00
        6
    chenshun00  
       2021-05-06 09:28:10 +08:00
    很好奇 java 怎么去做,我们是用 java 本身提供的 JDWP 来进行的 [手动狗头],然后还需要变更容器的检测功能
    baiyi
        7
    baiyi  
       2021-05-06 09:31:10 +08:00   ❤️ 1
    liuxu
        8
    liuxu  
    OP
       2021-05-06 10:42:33 +08:00
    @nvkou
    @crclz
    @xuanbg

    很多年以来一直用类日志做调试,极少用断点中断方式,主要是 php 一个 var_dump 调试航母都没问题,但最近本地为了和线上同步,开发环境也上了类 k8s,发现用日志调试效率很低,原来的方法起码得反复编译容器更新 pod

    举个例子,现在 k8s+swoole+laravel,如果用日志,除非确定是哪个类和方法有问题,不起码要多次加日志做 debug,这就会有两个方案。1. swoole 文件探查和热更新打开,然后 k8s 的 pvc 用 filepath 做目录映射,这样多次加日志才不用反复打包镜像更新 pod 。2. 用我帖子的方案,对外连接到 vscode,整个系统各个部位加上断点,几次运行就能知道哪里的变量有问题

    到了开发 java 或者 golang 也是类似,目前看日志和中断结合用还是不错的,提前各个部位关键点埋日志打点,如果排查不出来再打开 debug 模式
    andyangyu
        9
    andyangyu  
       2021-05-06 10:43:12 +08:00   ❤️ 1
    @holulu 这个有点厉害了, 不知道支不支持 goland 之类的
    xmh51
        10
    xmh51  
       2021-05-06 10:48:47 +08:00   ❤️ 1
    @liuxu java 本身就有远程 debug
    Rache1
        12
    Rache1  
       2021-05-06 13:30:59 +08:00
    直接一个 ssh 隧道连到机器上就可以了呀,然后把 xdebug 的 DBGp 请求通过隧道转发到开发机的 vscode 或者 PHP STORM 的监听端口上,参考 xdebug 的远程调试。

    yasd 这货基本概念也和 xdebug 差不多,远程调试都是跑在 DBGp 上的
    holulu
        13
    holulu  
       2021-05-06 17:09:22 +08:00
    joesonw
        14
    joesonw  
       2021-05-07 08:31:22 +08:00 via iPhone
    okteto 差不多是满足你的需求
    gamesover
        15
    gamesover  
       2022-07-24 21:30:36 +08:00
    @joesonw 关于 oketo ,我想不出什么应用场景为什么要把本地环境 push 到网上去

    最多本地弄个 docker 跑起来不就行了吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   961 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:44 · PVG 06:44 · LAX 14:44 · JFK 17:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.