调用 bazel 命令进行调试时 GDB 立即退出

GDB quits instantly when invoking bazel command for debugging

我发现两个 links 展示了如何在 bazel 下使用 gdb 进行调试 (link 1, link 2)。

两个 link 都声明在调用以下命令时启动调试会话有效:

bazel run --compilation_mode=dbg --run_under=gdb //my:target

当我 运行 命令时,gdb 启动正常,加载符号和所有内容,但随后立即退出。输出与 here (from link 2).

中所示相同

第一个link也提到了--direct_run-参数,但这个参数也不起作用。 gdb 立即退出,并显示以下附加在 gdb 输出后的消息(来自之前的 link):

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = "en_US.ISO-8859-1",
        LC_ALL = "en_US.ISO-8859-1",
        LC_MEASUREMENT = "de_DE.UTF-8",
        LC_PAPER = "de_DE.UTF-8",
        LC_MONETARY = "de_DE.UTF-8",
        LC_NAME = "de_DE.UTF-8",
        LC_CTYPE = "en_US.ISO-8859-1",
        LC_ADDRESS = "de_DE.UTF-8",
        LC_NUMERIC = "de_DE.UTF-8",
        LC_TELEPHONE = "de_DE.UTF-8",
        LC_IDENTIFICATION = "de_DE.UTF-8",
        LC_TIME = "de_DE.UTF-8",
        LANG = "en_US.ISO-8859-1"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

我做错了什么?我如何与 gdb 交互?

提前致谢。

该线程中的另一条消息 (https://groups.google.com/d/msg/bazel-discuss/Mu95dnuA2MQ/I2BDu0SDGAAJ) 指出 bazel 不会将 tty 传递给 gdb 的标准输入。如果您在没有附加标准输入的情况下调用 gdb,您所看到的就是您所期望的:

$ gdb -silent -nx  < /dev/null
(gdb) quit

解决方法的一个选择可能是编写调用 gdb < /dev/tty.

的包装器脚本