跟踪sigusr1,使用gdb调试mex

时间:2016-03-10 20:29:40

标签: matlab ubuntu gdb signals mex

有没有办法追查发送sigusr1的人?

用于为Ubuntu创建的mex文件,该文件因某些条件而挂起。所以我做了:

1, mex -g *.c   (create .mex file)

2 matlab -Dgdb 
3 handle SIGUSR1 stop print
4 run -nojvm  (run matlab without gui)
5 dbmex on
6 run my executable

然后打印出来:    MEX文件:/home/X/Desktop/Test/test.mexa 64入口点位于地址0xd11ea144    在调试器提示符下添加断点并发出" continue"继续执行MATLAB

如果我做了#34;继续",我的可执行文件运行,然后它再次挂起(我认为和以前一样)。

我试过" bt"和"其中",但仍然不知道我在哪里获得SIGUSR1以及它为什么会挂起。

对于"其中",我得到:

#0 0x00007ffff5962ca4 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0

#1 0x00007ffff69d7015 in mcr_run_main(boost::function0<int> const&, bool, bool)() from /usr/local/MATLAB/R2013b/bin/glnxa64/libmwmcr.so
#2 0x0000000000405291 in ?? ()
#3 0x00007ffff55b0ea5 in __libc_start_main () from /lib/x86_64-linux-gnu/libc.so.6

#4 0x0000000000405489 in ?? ()
#5 0x00007fffffffded8 in ?? ()
#6 0x000000000000001c in ?? ()
#7 0x0000000000000002 in ?? ()
#8 0x00007fffffffe208 in ?? ()
#9 0x00007fffffffe234 in ?? ()
#10 0x000000000000000 in ?? ()

任何人都可以在这里指出正确的方法来追踪信号SIGUSR1(我认为导致我的exe挂起)?非常感谢!!

更新: 根据可疑代码前后的源文件中的建议设置断点。然后继续追踪错误。

LJ

1 个答案:

答案 0 :(得分:0)

当信号停止时,您可以print $_siginfo,然后检查此对象的字段以查找发送信号的过程的PID。