如何判断调用函数时引用了啥? [复制]

Posted

技术标签:

【中文标题】如何判断调用函数时引用了啥? [复制]【英文标题】:How to tell what is referenced when a function is called? [duplicate]如何判断调用函数时引用了什么? [复制] 【发布时间】:2018-03-29 16:50:40 【问题描述】:

当我在 python 中调用一个函数时,我如何知道会发生什么,例如,我已经导入了一个模块并想从中调用一个函数。我需要知道这个函数调用了哪些函数以及它们在执行时的位置。非常类似于回溯,但没有错误。 traceback.format_stack() 不起作用,因为我无法将它放在源代码中运行。任何想法如何使用它?

例子:

import amodule
#do something here?
amodule.some_method()
#or maybe here?

输出:

File <fname1> in line 13, in <module>
    module.some_method()
File <fname2> in line 53, in <module>
    module2.some_other_method()

等等

我怎样才能最好地做到这一点?

编辑: 我正在考虑的用途是有一个由多个文件组成的模块,这些文件相互引用。如果我想编辑一个特定的函数,我需要知道在哪里编辑什么。我宁愿不搜索源代码来找到发生在哪里的整个长链

【问题讨论】:

【参考方案1】:

你可以使用Python Call Graph。

调用图显示了从哪里调用了哪些函数/方法。

或者,您可以在调试器中单步执行代码。

但我强烈建议阅读代码,并试图了解它的作用。

我宁愿不搜索源代码来找到发生在哪里的整个长链

没有神奇的捷径。阅读代码可以告诉你它是如何工作的。文档字符串和其他 cmets 甚至可能会告诉您 为什么 它以这种方式工作。为什么比如何更重要。

【讨论】:

请多解释一下?

以上是关于如何判断调用函数时引用了啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

函数返回时发生了啥

C++11 中的“转换构造函数”发生了啥变化? [复制]

std::thread 通过引用传递调用复制构造函数

std::thread 按引用传递调用复制构造函数

如何知道何时从控制台调用 JavaScript 函数? [复制]

如果我没有更改状态的引用,为啥 React 会调用渲染函数? [复制]