首页 > 解决方案 > bazel 宏存在哪些运行时调试/自省技术?

问题描述

我发现print向我的 bazel 宏和规则实现添加一条语句会导致控制台输出添加到构建中,例如

DEBUG: /home/$USER/repo/source.bzl:82:5: message XYZ

我什至可以用标准的 Python 技术自省一些对象,比如......

def my_macro(my_list):
    print(my_list)
    print(type(my_list))
    print(dir(my_list))


DEBUG: /home/$USER/repo/source.bzl:83:5: ["//visibility:public"]
DEBUG: /home/$USER/repo/source.bzl:84:5: list
DEBUG: /home/$USER/repo/source.bzl:85:5: ["append", "extend", "index", "insert", "pop", "remove"]

无论如何可以访问诸如在回溯模块中查看堆栈跟踪之类的东西,而不是什么?甚至可能像导入 pdb 并设置断点之类的东西?

标签: bazel

解决方案


文档中有专门用于宏调试的 lil 部分

https://docs.bazel.build/versions/master/skylark/macros.html#debugging

您还可以使用 print 进行调试。

在明确指出 print 函数的地方,给出了一个方便的链接,它将您重定向到全局函数。

https://docs.bazel.build/versions/master/skylark/lib/globals.html

在那里您可以看到typedir条目。没有看到任何面向堆栈跟踪的东西,只是一些用于探测当前调用堆栈上下文的技术。


推荐阅读