我正在使用第三方库,将\n
打印几百次到stdout
- 这似乎是他们日志记录中的一个错误。
发现生成此输出的代码行的最佳方法是什么(我希望它是python而不是外部库)?
一些想法:
如何将\n
字符的显示更改为可识别的内容,如A
,这样如果我使用调试器,我可以看到输出何时发生?
每次将字符发送到std-out时,是否可以对低级函数进行猴子修补以导致某些输出或调试中断?
答案 0 :(得分:1)
你可以尝试超越标准输出:
class StdoutFilter:
def __init__(self, realStdout):
self.realStdout = realStdout
def write(self, text):
if text == '\n': # or some more complicated condition
raise Exception("Newline alert!")
self.realStdout.write(text)
import sys
sys.stdout = StdoutFilter(sys.stdout)
# import the 3rd party library and use it
在此过滤器类中,只有在打印了超过 N 后续换行符后,才能添加计数器并引发异常。异常的堆栈跟踪将揭示恶意打印的来源。
或者您可以在那里设置断点,或将\n
更改为其他内容。