- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
问题:
我无法进入我的 MEX 函数。我究竟做错了什么?显而易见的答案是 SEGSEGV
和 SIGUSR1
但最好能深入了解其中的原因。至少 SIGUSR1
环境 - x86_64 linux软件 - Matlab 2012a调试器 - GDB
有一点前言,因为我认为这与回答问题和了解我理解中的漏洞有关。
使用调试标志编译的 mex 文件
以 matlab 作为可执行文件并使用 -Dgdb(gdb 设置为调试器)启动 gdb
bash:>matlab -Dgdb
在命令行中运行matlab
(gdb) run -nojvm
在启动 Matlab 的过程中,我看到一堆“Missing separate debuginfo for ...*.so”并且还遇到了一些段错误 (SIGSEGV)
我将 gdb 段错误信号处理设置为打印但不停止。
gdb>handle SIGSEGV nostop print pass
gdb>handle SIGUSR1 nostop print pass
Signal Stop Print Pass Description
SIGSEGV No Yes Yes Segmentation fault
SIGUSR1 No Yes Yes User defined signal 1
禁用 SIGSEGV 后,我可以进入 Matlab 命令行,一切似乎都很好,而且 Matlab 似乎可以运行。
启用 mex 调试
matlab>>dbmex on
matlab>>yprime(1,[1,2,3,4])
Program received signal SIGUSR1, User defined signal 1.
MEX FILE: /home/user/test/prime/yprime.mexa64 entry point located
at address 0xde5e3a60
Add breakpoints at the debugger prompt and issue a "continue" to resume
execution of MATLAB.
ans =
2.0000 8.9685 4.0000 -1.0947
根据输出 ans
,我们已经通过了 yprime()
mex 例程并将结果返回给 Matlab。
如果我不绕过 SIGUSR1 会怎样?
如果我不绕过 SIGUSR1,我会得到以下输出:
>> yprime(1,[1,2,3,4])
Program received signal SIGUSR1, User defined signal 1.
0x0000003c83c0b5bc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
Missing separate debuginfos, use: debuginfo-install
glibc-2.12-1.149.el6_6.5.x86_64 libICE-1.0.6-1.el6.x86_64
libSM-1.2.1-2.el6.x86_64 libX11-1.6.0-2.2.el6.x86_64
libXau-1.0.6-4.el6.x86_64 libXcursor-1.1.14-2.1.el6.x86_64
libXext-1.3.2-2.1.el6.x86_64 libXfixes-5.0.1-2.1.el6.x86_64
libXmu-1.1.1-2.el6.x86_64 libXrender-0.9.8-2.1.el6.x86_64
libXt-1.1.4-6.1.el6.x86_64 libuuid-2.17.2-12.18.el6.x86_64
libxcb-1.9.1-2.el6.x86_64 ncurses-libs-5.7-3.20090208.el6.x86_64
nss-softokn-freebl-3.14.3-22.el6_6.x86_64 zlib-1.2.3-29.el6.x86_64
(gdb) bt
#0 0x0000003c83c0b5bc in pthread_cond_wait@@GLIBC_2.3.2 ()
from /lib64/libpthread.so.0
#1 0x00007f2440f10774 in mcr_run_main(...l) ()
from /opt/matlab_2012a/bin/glnxa64/libmwmcr.so
#2 0x00000000004026e0 in ?? ()
#3 0x0000003c8381ed5d in __libc_start_main () from /lib64/libc.so.6
#4 0x0000000000402579 in ?? ()
#5 0x00007ffffc6f3678 in ?? ()
#6 0x000000000000001c in ?? ()
#7 0x0000000000000002 in ?? ()
#8 0x00007ffffc6f4a9b in ?? ()
#9 0x00007ffffc6f4ac0 in ?? ()
#10 0x0000000000000000 in ?? ()
最佳答案
不要在 SIGUSR1
上设置 nostop
,让它闯入调试器。
阅读 MATLAB 让您做的事情:
Add breakpoints at the debugger prompt and issue a "
continue
" to resume execution of MATLAB.
收到 SIGUSR1 时无需回溯 (bt
)。这不是需要调试的错误,只是您在加载 MEX 文件后设置断点的机会。
关于linux - 无法进入 MEX 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28863056/
我试图通过用 C++ 编写一些函数并使用 mex 接口(interface)来集成它们来加速我的 Matlab 程序。我在 C++ 的向量中得到了我的结果。我想将它传输到 MATLAB 中的数组。我知
我用 C++ 编写了带有服务器和客户端的 TCPIP 套接字连接,它在 VisualStudio 中工作得很好。现在我想通过 MEX 文件在 MATLAB/Simulink 中使用 C++ - 客户端
我有返回 C++ 主机端数组的 cuda/C++ 代码。我想在 MATLAB 中操作这些数组,所以我用 mex 格式重写了我的代码并用 mex 编译。 我通过将预分配的数组从 MATLAB 传递到 m
我正在尝试将一段代码从 Matlab 转换为 python。我正在运行 Ubuntu 16.04LTS,需要依靠 Octave 来运行引用代码(Matlab 安装时出现深奥错误)。无论如何,以前从未使
我使用 VS2010 C-编译器在 Windows8 上开发了一个 Matlab mex 文件。很长一段时间,一切都很顺利…… 但是现在,mex 文件会阻止代码中的所有更改。无论我更改哪一行代码,重建
我的 C 代码应该将 Matlab 稀疏格式转换为 TAUCS format 也是列的主要格式。 当然,我是在 Matlab 本身生成 Matlab 稀疏格式,然后将其传输到 mex 文件。 代码编译
这是我编写的用于在制表符分隔文件中读取的 mex 代码。 mex 文件已创建,但它导致我的 MATLAB 突然结束并给出以下错误。谁能帮助我哪里出错了?如果需要任何进一步的信息,请告诉我 异常终止:分
我有一个 Matlab mex 函数,它重复调用名为 calculate(). 的 C 函数我制作了两个版本的函数: 版本A:每次mex()来电 calculate() ,它只传递输入参数,以及cal
我正在尝试在 MATLAB 中构建一个 mex 函数。该函数依赖于 C++ 库。但是,无论我做什么,我都会在 MATLAB 中得到 Unresolved external 问题。我创建了三个简单的文件
我正在尝试从 C++ 源代码编译一些 MATLAB MEX 文件。我正在尝试编译的文件 can be found here ;我在 32 位系统 MATLAB 2012a 上使用 Windows XP
我使用 mxCreateSparse 在 MEX 中创建了一个稀疏矩阵. mxArray *W; W=mxCreateSparse(n*n,n*n,xsize,mxREAL); double *wpo
我正在尝试在 C 语言的 MEX 文件中实现一些基本的线性代数例程以进行练习,但我被点积困住了。这是我到目前为止所拥有的: #define char16_t UINT16_T //shenanigan
我是编写 MEX 函数的新手,我有内存问题。 MEXf 逍遥法外的套路如下: void mexFunction (int nlhs, mxArray *plhs[], int nrhs,const m
我这里有一个可以正确执行的 C mex 文件,但是在执行完成后 MATLAB 因段错误而崩溃。由于它在程序完成执行后崩溃,这让我认为 MATLAB 自动释放分配的内存导致了这个问题。但是,我释放了我自
我有一个简单的 mex 函数,它从库中调用另一个 C++ 函数。我用编译源代码 mex -cxx mymexfunction.cpp -I/some/include -L/some/lib -lmyl
我正在寻找一种算法来找到 mex但除了这个 wiki 链接,找不到任何有用的东西。 看完后我拉出这段代码: nList = [int(x) for x in input().split()] nLis
我希望仅在通过 Matlab 中的 mex 命令编译我的代码时包含某个头文件。如果它是直接用 Visual Studio 编译的,我不希望包含它。 是否有一个宏可以帮助解决这个问题? 我想做这样的事情
如何在用 C 编写的 MEX 文件中创建二维稀疏矩阵。创建矩阵后如何像在 C 中一样单独访问元素,比如 mat[i][j]? 我厌倦了使用 mxCreateNumericArray函数,但我无法访问元
我正在尝试编译 a matlab wrapper for libdc1394这是一个用于火线相机的库。我收到一个奇怪的错误,涉及头文件中的一些内联函数。我正在使用 gcc-4.6 开发 ubuntu
我需要尽快将大量数据写入磁盘。在 MATLAB 中,我可以使用 fwrite 来做到这一点: function writeBinaryFileMatlab(data) fid = fopen(
我是一名优秀的程序员,十分优秀!