从 Python 调用时如何调试 MATLAB 脚本
How to debug MATLAB script when calling it from Python
我正在使用
从 python 调用 MATLAB 脚本
ml = matlab.engine.start_matlab()
output = ml.myMATLABscript(input1, input2)
该脚本在 MATLAB 中运行良好,但当我从 Python 调用它时,它遇到了 int vs double 问题。到目前为止,我一直在通过解释脚本崩溃时的错误消息来解决这个问题,但最好能看看具体发生了什么。为此,我希望能够逐行单步执行 MATLAB 代码,即使我是从 Python 调用它的。
事实证明这比我预期的要容易。只需以编程方式在 MATLAB 脚本中设置一个断点。例如:
dbstop if error
然后像以前一样从 Python 调用脚本。 MATLAB 编辑器将在指定断点处以调试模式打开。
这也可以在不编辑 MATLAB 脚本的情况下实现。在这种情况下,您需要使用 enginge 的 eval:
从 Python 设置 MATLAB 断点
ml = matlab.engine.start_matlab()
ml.eval(dbstop in myMATLABscript if error)
output = ml.myMATLABscript(input1, input2)
为了完整起见,来自 MATLAB's documentation:
dbstop in file
在文件中的第一个可执行行设置断点。
dbstop in file at location
在指定位置设置断点
dbstop in file if expression
在文件的第一个可执行行设置条件断点
dbstop in file at location if expression
在指定位置设置条件断点。
我正在使用
从 python 调用 MATLAB 脚本ml = matlab.engine.start_matlab()
output = ml.myMATLABscript(input1, input2)
该脚本在 MATLAB 中运行良好,但当我从 Python 调用它时,它遇到了 int vs double 问题。到目前为止,我一直在通过解释脚本崩溃时的错误消息来解决这个问题,但最好能看看具体发生了什么。为此,我希望能够逐行单步执行 MATLAB 代码,即使我是从 Python 调用它的。
事实证明这比我预期的要容易。只需以编程方式在 MATLAB 脚本中设置一个断点。例如:
dbstop if error
然后像以前一样从 Python 调用脚本。 MATLAB 编辑器将在指定断点处以调试模式打开。
这也可以在不编辑 MATLAB 脚本的情况下实现。在这种情况下,您需要使用 enginge 的 eval:
从 Python 设置 MATLAB 断点ml = matlab.engine.start_matlab()
ml.eval(dbstop in myMATLABscript if error)
output = ml.myMATLABscript(input1, input2)
为了完整起见,来自 MATLAB's documentation:
dbstop in file
在文件中的第一个可执行行设置断点。dbstop in file at location
在指定位置设置断点dbstop in file if expression
在文件的第一个可执行行设置条件断点dbstop in file at location if expression
在指定位置设置条件断点。