Octave 如何在倍频程中找到相关函数

Octave 如何在倍频程中找到相关函数,octave,Octave,我想确定在倍频程中运行特定函数所需的所有函数。我需要它来部署用Octave编写的应用程序。 虽然Matlab提供了一些工具来分析函数之间的依赖关系,但我找不到类似的倍频程 按照matlab中的建议尝试inmem不会产生预期的结果: > inmem warning: the 'inmem' function is not yet implemented in Octave 这个问题还有其他解决方案吗?根据倍频程兼容性常见问题解答 您可以使用who-function。(注意:我还没有尝试过

我想确定在倍频程中运行特定函数所需的所有函数。我需要它来部署用Octave编写的应用程序。 虽然Matlab提供了一些工具来分析函数之间的依赖关系,但我找不到类似的倍频程

按照matlab中的建议尝试inmem不会产生预期的结果:

> inmem

warning: the 'inmem' function is not yet implemented in Octave

这个问题还有其他解决方案吗?

根据
倍频程兼容性常见问题解答


您可以使用
who-function
。(注意:我还没有尝试过。)

首先,让我指出,根据您的描述,您所使用的matlab工具不是
inmem
,而是
deprpt

第二,虽然octave没有一个内置的工具来实现这一点,但是有很多方法可以自己实现。我没有亲自尝试过这些,所以,ymmv

1) 在使用探查器的同时运行函数,然后检查运行过程中使用的函数。正如倍频程档案中所建议的:

2) github上有一些外部工具正试图实现这一点,例如:

3) 如果我必须亲自解决这个问题,我将按如下方式处理这个问题:

  • 解析并标记有问题的m文件。(在进入下一步之前,还可能使用诸如
    isvarname
    之类的二进制检查来进一步过滤无用的令牌。)
  • 对于每个令牌x,将“help(x)”调用包装到try/catch块
  • 检查错误,这将是以下情况之一:
    • “无效输入”(即令牌不是函数)
    • “未找到”(即不是有效的标识符等)
    • “未记录”(函数存在但没有帮助字符串)
    • 没有错误,在这种情况下,您偶然发现文件中有一个有效的函数调用
  • 要进一步检查这些函数是内置函数还是加载包的一部分,可以进一步解析“help”输出的第一行,这通常会告诉您该函数的来源
如果上下文是您试图检查matlab脚本是否可以在倍频程上工作,那么一个复杂的问题是,通常在倍频程上需要的软件包在matlab代码中不存在。同样,如果这是您的目标,那么您可能应该直接使用matlab中的DERPT

祝你好运


另外,我可能要补充的是,上面的内容是为了创建一个通用工具等。就在您自己的代码中识别依赖关系而言,良好的软件工程实践对于提供可维护的代码和轻松解决用户的依赖性问题大有帮助。E.G:——清楚地识别所需的包(与Matlab不同的是,八度图无论如何都需要这样的包在代码中被明显加载)——同样地,对于定制的依赖关系,考虑包装和提供这些作为包/命名空间,而不是散布的文件——如果包装依赖是不可能的,您可以在文件中创建测试/检查,如果缺少必要的文件,这些测试/检查会抛出错误,或者至少在文件本身的注释中提到这些依赖项,等等


在以后的八度音阶版本中,此选项似乎已被弃用。当我尝试时,我会出错,在
who
的帮助字符串中不再提到它。@tasospapstyllanou谢谢。两个调用在八度音阶6.2中都不起作用:Inmen产生:
在八度音阶中还没有实现'inmem'函数。
调用
who-function
打印
警告:who:unrecogned option'-function'
我给了第2个“about”一次尝试,结果非常接近我所需要的。我将添加一些过滤功能,以过滤出系统路径。谢谢塔索斯!探查器解决方案似乎不合适,因为它不能捕获在所有情况下都未调用的函数。您必须为您的测试用例提供100%的代码覆盖率。但它能够捕捉到令人讨厌的“评估”电话。“关于”工具并不那么成功。它缺少许多依赖函数。因此,我也尝试了mDepGen,它的工作更加可靠。它使用Graphviz/dot具有非常好的图形输出,但不幸的是,没有生成依赖函数的函数列表。我想这很容易扩展。
Q. inmem 
A. who -functions