MacOS 调试 envoyproxy

编译 debug 版本 envoy

bazel build -c dbg --spawn_strategy=standalone //source/exe:envoy-static

手动生成 dSYM

进入到 envoy-static 同级目录,执行:

dsymutil envoy-static -o envoy-static.dSYM

lldb 调试

$ lldb envoy-static
(lldb) process launch --stop-at-entry -- -c $PATH_TO_CONFIG
(lldb) add-dsym envoy-static.dSYM
(lldb) breakpoint set --file server.cc --line 147
(lldb) continue

VSCode 调试 Envoy

参照这里

launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(lldb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/bazel-bin/source/exe/envoy-static",
            "args": ["-c", "envoy.yaml"],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "lldb"
        }
    ]
}

CLion 调试 Envoy 各种问题

折腾好几天,各种问题,最后停在不能进入断点。

MacOS 上设置 CLion with bazel plugin,参照这里。

Google 到这个,同样问题,下载安装单独打包的 Bazel 插件即可

Linux:
CLion2019.2 + Bazel plugin + custom installed gdb 8.1 , works

MacOS:
CLion2019.2 + Bazel Plugin + custom installed gdb 8.3.1 + codesign gdb , not work

尝试过各种组合,toolchain 使用 bundled lldb or bundled gdb ,各种问题

  • 没法进入断点,提示 not associated to the code
    通过命令行 lldb 启动进程调试,通过命令 add-dsym 手动加载 dSYM 文件,再 breakpoint set --file server.cc -l 147 是能正常进入断点的,说明 bazel plugin 启动调试进程的时候,没有加载 dsym 文件,能 google 到类似的问题
  • 提示 format not recognized.
  • 提示 inferior.c:287: internal-error: struct inferior *find_inferior_pid(int): Assertion `pid != 0’ failed.

docker build envoy

docker 环境编译 envoy,参考这里:

./ci/run_envoy_docker.sh './ci/do_ci.sh bazel.release.server_only'

但是因为每次都是 docker run --rm 需要重新安装 bazel 命令,远程链接带有 x86_64 关键字,有可能需要自备 ti 子,可以通过设定 https_proxy 环境变量:

https_proxy=localhost:1087 ./ci/run_envoy_docker.sh './ci/do_ci.sh bazel.release.server_only'

你可能感兴趣的:(MacOS 调试 envoyproxy)