gpt4 book ai didi

linux - 无法进入 MEX 函数

转载 作者:太空宇宙 更新时间:2023-11-04 10:55:46 24 4
gpt4 key购买 nike

问题:

我无法进入我的 MEX 函数。我究竟做错了什么?显而易见的答案是 SEGSEGVSIGUSR1 但最好能深入了解其中的原因。至少 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 ?? ()

最佳答案

  1. 不要在 SIGUSR1 上设置 nostop,让它闯入调试器。

  2. 阅读 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com