• 请不要在回答技术问题时复制粘贴 AI 生成的内容
liuxu
V2EX  ›  程序员

关于容器中代码 debug 方案

  •  
  •   liuxu · May 5, 2021 · 3437 views
    This topic created in 1857 days ago, the information mentioned may be changed or developed.
    目前弄了一个,我 php+swoole 的话用的 vscode 做 debug 远程,然后用 frp 映射到外网,然后容器中的 php 使用 yasd 远程链接 frp 外网地址,通过 vscode 调试,主要还是因为 k8s 有自己的内网。

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

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

    端口转发 + 自动容器 rebuild+部署 + 代码同步 + 日志转发,我用着感觉不错。
    xuanbg
        4
    xuanbg  
       May 6, 2021   ❤️ 1
    要学会用日志来定位和分析问题,然后有条件的话可以从定位点打断点进行 bebug 快速验证问题,而不是依赖 debug 模式强行调试。全程 debug 效率太低了。。。
    holulu
        5
    holulu  
       May 6, 2021   ❤️ 1
    chenshun00
        6
    chenshun00  
       May 6, 2021
    很好奇 java 怎么去做,我们是用 java 本身提供的 JDWP 来进行的 [手动狗头],然后还需要变更容器的检测功能
    FinnBai
        7
    FinnBai  
       May 6, 2021   ❤️ 1
    liuxu
        8
    liuxu  
    OP
       May 6, 2021
    @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  
       May 6, 2021   ❤️ 1
    @holulu 这个有点厉害了, 不知道支不支持 goland 之类的
    xmh51
        10
    xmh51  
       May 6, 2021   ❤️ 1
    @liuxu java 本身就有远程 debug
    Rache1
        12
    Rache1  
       May 6, 2021
    直接一个 ssh 隧道连到机器上就可以了呀,然后把 xdebug 的 DBGp 请求通过隧道转发到开发机的 vscode 或者 PHP STORM 的监听端口上,参考 xdebug 的远程调试。

    yasd 这货基本概念也和 xdebug 差不多,远程调试都是跑在 DBGp 上的
    joesonw
        14
    joesonw  
       May 7, 2021 via iPhone
    okteto 差不多是满足你的需求
    gamesover
        15
    gamesover  
       Jul 24, 2022
    @joesonw 关于 oketo ,我想不出什么应用场景为什么要把本地环境 push 到网上去

    最多本地弄个 docker 跑起来不就行了吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2925 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 13:45 · PVG 21:45 · LAX 06:45 · JFK 09:45
    ♥ Do have faith in what you're doing.