【问题标题】:debug MATLAB mex from gdb via Python API通过 Python API 从 gdb 调试 MATLAB mex
【发布时间】:2018-06-20 13:56:23
【问题描述】:

我知道在 Linux 上使用 gdb 调试 MATLAB mex 文件的过程,如下所述:https://www.mathworks.com/help/matlab/matlab_external/debugging-on-linux-platforms.html

此过程涉及通过命令行启动 MATLAB

 matlab -Dgdb

然后从 gdb 控制台运行 MATLAB

(gdb) r -nojvm

在 gdb 中一次,以及在运行 mex 时中断的其他一些步骤。

但是,我想通过 Python 的 gdb API 对我的 gdb 调试进行更高级的封装。

在 Python 中包装 gdb API 的过程通常以如下方式开始,以调试名为 foo 的程序

import gdb
gdb.execute('file foo')
gdb.execute('run')

我不确定是否可以将相同的概念应用于调试 MATLAB。我确信它是可能的,因为像 gdbgui 这样的 gdb 前端是用 Python 构建的,并且可以启动

matlab -Dgdbgui

但我不确定如何为 gdb 调整类似于我自己的 Python 包装器的东西?

【问题讨论】:

  • 事实证明 /usr/bin/matlab 只是一个外壳脚本,它包装了 MATLAB 二进制文件的执行。这解释了使用 -Dgdb 调用 MATLAB 进行调试的奇怪方式。我将调试 shell 脚本以找到通过调试器调用 MATLAB 的实际语法,这(理论上)应该反过来可以通过 Python 中的 gdb API 包装器轻松扩展

标签: matlab debugging gdb mex gdb-python


【解决方案1】:

正如我在上面的评论中提到的,我没有意识到 /usr/bin/matlab 只是一个 shell 脚本,它接受 -Dgdb 之类的输入参数并设置环境,并使用实际路径运行 gdb MATLAB 二进制文件。

我的解决方案是将这个 shell 脚本复制并编辑到 /usr/bin/matlab_gdbWrap 并注释掉实际执行 MATLAB 二进制文件的行:

#eval exec "$debugger \"$exec_path\" $arglist"

并将其替换为适当的 gdb 命令以使用 gdb API 运行 Python 脚本:

eval exec "gdb -x /home/myhome/path/to/gdbWrap.py"

在 gdbWrap.py 我这样设置我的代码流:

import gdb
import code

# start MATLAB in gdb
gdb.execute('file /usr/local/MATLAB/R2016b/bin/glnxa64/MATLAB')

 # run MATLAB with -nojvm flag from gdb
gdb.execute('r -nojvm')

# in MATLAB console, run 'dbmex on', and the mex routine, which then breaks out back to gdb, which is in turn controlled by this Python script...

# use Python code module to break out to interactive mode, to begin development of my gdb API wrapper
code.interact(local=locals())

这一切的实用性似乎难以捉摸,但我正在使用它在我的 mex 中的某些点中断,打印下一个汇编指令的程序集并将其保存到 Python 字符串变量中

gdb.execute('x/i $pc', to_string=True)

拆分该字符串以获取在以下指令中使用的特定寄存器,并打印寄存器值,然后单步执行,然后再次打印寄存器值。所有这一切都是为了在非常低的级别上调试 mex,通过在每个步骤之前和之后打印每条指令的寄存器。

【讨论】:

    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2019-09-15
    • 2022-08-10
    • 2013-02-14
    相关资源
    最近更新 更多