找到在标准输出上打印一些调试内容的源代码行

问题描述 投票:0回答:1

我面前有一个巨大的代码库,但找不到将此字符串打印到标准输出的位置:

[{}]

我可以重现它,但搜索相关代码行到目前为止还没有成功。

我猜这是开发人员为了帮助调试而意外添加的。

有任何线索如何找到将该字符串发送到标准输出的匹配代码行吗?

python debugging stdout
1个回答
2
投票

您可以发现相关源代码行引发异常,如果该行像这样发出:

class WrapperOfStdout():
    def __init__(self, old_stdout):
        self.old_stdout=old_stdout

    def write(self, data):
        assert not '{}' in data, data
        return self.old_stdout.write(data)

    def __getattr__(self, name):
        return getattr(self.old_stdout, name)

将此包装器添加到您的脚本中,并尽早包装标准输出(在 main 之后不久):

sys.stdout=WrapperOfStdout(sys.stdout)

你会得到这样的异常:

Traceback (most recent call last):
  File "/home/u/src/foo-bar/foo_bar/utils/common.py", line 94, in issue_to_tar
    meta = issuemeta(request, issue).encode('utf8')
  File "/home/u/src/foo/foo/views/issue/view.py", line 198, in issue_meta
    div = index_model.view(issue, request)
  File "/home/u/src/foo/foo/utils/indexutils.py", line 96, in view
    form = form_cls(request, issue, None, prefix=prefix)
  File "/home/u/src/foo-x/foo_x/logic/forms.py", line 115, in __init__
    print(fake_initial)
  File "/home/u/tmp/issue_to_tar.py", line 13, in write
    assert not '{}' in data, data
AssertionError: [{}]

现在您可以看到不需要的输出发生在哪里。在本例中,它是

logic/forms.py
第 115 行。

© www.soinside.com 2019 - 2024. All rights reserved.