|
From: Dong T. <ti...@me...> - 2017-07-19 18:13:47
|
Hello, Could anyone provide a pointer on how to debug MEX files from Emacs? E.g. using gdb? I am familiar with the procedure of debugging pure c/c++ code or .m code from Emacs using gdb, but I don't know a good way to debug MEX file coded in C from Emacs. Thanks in advance, Dong |
|
From: Eric L. <Eri...@ma...> - 2017-07-19 21:16:55
|
Hi Dong, You can fire up GDB from within Emacs and "attach" to a process. Using this to attach to a process running MATLAB inside Emacs' matlab-shell will let you debug through MATLAB code and into your C++ code. I haven't done this in a few years, and not with Mex (I was debugging MATLAB directly) but I'm guessing the principle is the same. Eric -----Original Message----- From: Dong Tian [mailto:ti...@me...] Sent: Wednesday, July 19, 2017 1:56 PM To: mat...@li... Subject: [Matlab-emacs-discuss] How to debug MEX files (C code) from Emacs? Hello, Could anyone provide a pointer on how to debug MEX files from Emacs? E.g. using gdb? I am familiar with the procedure of debugging pure c/c++ code or .m code from Emacs using gdb, but I don't know a good way to debug MEX file coded in C from Emacs. Thanks in advance, Dong ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Matlab-emacs-discuss mailing list Mat...@li... https://lists.sourceforge.net/lists/listinfo/matlab-emacs-discuss |
|
From: Dong T. <ti...@me...> - 2017-07-24 15:23:31
|
Hi Eric, all, Thanks for replying. It is non-trivial to attach the matlab process to gdb. Matlab provides a command line option -Dgdb to associate the Matlab process for gdb debugging. Would it be easier to launch "matlab-shell" with -Dgdb as option? Maybe your or someone else could put lights on this approach? Thanks, Dong On Wed, Jul 19, 2017 at 09:01:56PM +0000, Eric Ludlam wrote: > Hi Dong, > > You can fire up GDB from within Emacs and "attach" to a process. Using this to attach to a process running MATLAB inside Emacs' matlab-shell will let you debug through MATLAB code and into your C++ code. > > I haven't done this in a few years, and not with Mex (I was debugging MATLAB directly) but I'm guessing the principle is the same. > > Eric > > -----Original Message----- > From: Dong Tian [mailto:ti...@me...] > Sent: Wednesday, July 19, 2017 1:56 PM > To: mat...@li... > Subject: [Matlab-emacs-discuss] How to debug MEX files (C code) from Emacs? > > Hello, > > Could anyone provide a pointer on how to debug MEX files from Emacs? > E.g. using gdb? > > I am familiar with the procedure of debugging pure c/c++ code or .m code from Emacs using gdb, but I don't know a good way to debug MEX file coded in C from Emacs. > > Thanks in advance, > Dong > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ > Matlab-emacs-discuss mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matlab-emacs-discuss |
|
From: Dennis O. <do...@pu...> - 2017-07-24 18:25:09
|
You can use Python as a scripting language in gdb to find the PID of a currently running MATLAB process and attach to it. I remember doing this a while back. The code was something around the lines of:
<code>
# debugging MEX files in emacs on linux
import sys
pythondir = '/usr/share/gcc-6.2.1/python'
sys.path.append(pythondir)
from libstdcxx.v6 import register_libstdcxx_printers
from subprocess import check_output
try:
register_libstdcxx_printers(None)
except Exception as e:
pass
# find the PID of the MATLAB process
def get_pid(name):
return list(map(int, check_output(["pidof", name]).split()))
# set a new breakpoint, deleting any breakpoints referring to the same location
def new_bp(loc):
bps = gdb.breakpoints()
if bps:
for bp in bps:
if bp.location == loc:
gdb.execute("d " + str(bp.number))
# set the dummy breakpoint
return gdb.Breakpoint(loc)
# attach to the MATLAB process. if gdb attach fails, do
# sudo sh -c "echo 0 > /proc/sys/kernel/yama/ptrace_scope"
pids = get_pid("MATLAB")
gdb.execute("attach {:d}".format(pids[0]))
<end code>
an alternative approach is to launch matlab from gdb:
<code>
run_matlab = True
if run_matlab:
# spawn a new MATLAB process
matlab_dir = "/path/to/MATLAB/R2016b/bin/glnxa64/MATLAB"
gdb.execute("file " + matlab_dir)
# set the MATLAB_DEBUG env
gdb_loc = "/usr/bin/gdb"
gdb.execute("set environment MATLAB_DEBUG = " + gdb_loc)
# need to execute this according to
# https://www.mathworks.com/help/matlab/matlab_external/debugging-on-linux-platforms.html
gdb.execute("handle SIGSEGV SIGBUS nostop noprint")
# set the breakpoint at the mexFunction
mex_Bp = new_bp("mexFunction")
# run matlab
gdb.execute("run -nojvm -r debug_encoder -singleCompThread")
<end code>
Dennis
Dong Tian <ti...@me...> writes:
> Hi Eric, all,
>
> Thanks for replying.
>
> It is non-trivial to attach the matlab process to gdb.
>
> Matlab provides a command line option -Dgdb to associate the Matlab process
> for gdb debugging. Would it be easier to launch "matlab-shell" with -Dgdb
> as option? Maybe your or someone else could put lights on this approach?
>
> Thanks,
> Dong
>
> On Wed, Jul 19, 2017 at 09:01:56PM +0000, Eric Ludlam wrote:
>> Hi Dong,
>>
>> You can fire up GDB from within Emacs and "attach" to a process. Using this to attach to a process running MATLAB inside Emacs' matlab-shell will let you debug through MATLAB code and into your C++ code.
>>
>> I haven't done this in a few years, and not with Mex (I was debugging MATLAB directly) but I'm guessing the principle is the same.
>>
>> Eric
>>
>> -----Original Message-----
>> From: Dong Tian [mailto:ti...@me...]
>> Sent: Wednesday, July 19, 2017 1:56 PM
>> To: mat...@li...
>> Subject: [Matlab-emacs-discuss] How to debug MEX files (C code) from Emacs?
>>
>> Hello,
>>
>> Could anyone provide a pointer on how to debug MEX files from Emacs?
>> E.g. using gdb?
>>
>> I am familiar with the procedure of debugging pure c/c++ code or .m code from Emacs using gdb, but I don't know a good way to debug MEX file coded in C from Emacs.
>>
>> Thanks in advance,
>> Dong
>>
>> ------------------------------------------------------------------------------
>> Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://secure-web.cisco.com/1ujKNEvoZ9nB-3MswM8yQpeWgC6aSas93lzT8a00GA11SdB5SpQ6CVRIOx-heKXnqKECDVK85FoUunZq98vpNfzj9z-dAEXYdTSCYMo17rGews2sXFe04QVklpkIgysqCMwIaoJQltBgN0vzTKcyy6uH42EmnOZN9d_7d6GI8HTluD2CTM_kIvO0I4ApdEW1uyzzeVHPDe01AEhL8z1lCXCd9Ls5JK37FPBnlqU-vHsqgajNbrh54-xMsjRMjU-khdIzpnhQOzvN53aQbsoH_mYU759kv1n9L6l97WEaazGtUV61gkLrwcRmPqtZUkz2IU_aA6HkROB1JRv1L63MCOuGFFTjdNrbynGp78WL3jRQ/http%3A%2F%2Fsdm.link%2Fslashdot _______________________________________________
>> Matlab-emacs-discuss mailing list
>> Mat...@li...
>> https://secure-web.cisco.com/10eOO6rYM1RqFCHmlXsWS1TYTfQt0mblS7KZvYNUIxTp-ZGg9Gb7geEfnffV5gC9W3jjN5jlZyDrKFrGw14cD9PgfSBzm5qQ_6jbAPG5AQ61KZoTDufZTTsMhvlc7k-8mkewh3PKUPkO-9wtKK_ayCNqBB37kEYCLOH673oZPhzvewWVdd2KYIRf8sWleZLty8CyehfWXIWwMAX6yxqj9reri0LJu_hSOjSDE7bqwujPw_GaFGbRLesA4iu9JVaGg--IWyW7nW0t2ki22_ESPWiRYdGq7hqiMg7EYsAtkPymllsorUJDO3-uBqjP-SI1ky0GgTCRGnzpyoe5id6tfPy19K959g_PDiyGSEevC8Us/https%3A%2F%2Flists.sourceforge.net%2Flists%2Flistinfo%2Fmatlab-emacs-discuss
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://secure-web.cisco.com/1ujKNEvoZ9nB-3MswM8yQpeWgC6aSas93lzT8a00GA11SdB5SpQ6CVRIOx-heKXnqKECDVK85FoUunZq98vpNfzj9z-dAEXYdTSCYMo17rGews2sXFe04QVklpkIgysqCMwIaoJQltBgN0vzTKcyy6uH42EmnOZN9d_7d6GI8HTluD2CTM_kIvO0I4ApdEW1uyzzeVHPDe01AEhL8z1lCXCd9Ls5JK37FPBnlqU-vHsqgajNbrh54-xMsjRMjU-khdIzpnhQOzvN53aQbsoH_mYU759kv1n9L6l97WEaazGtUV61gkLrwcRmPqtZUkz2IU_aA6HkROB1JRv1L63MCOuGFFTjdNrbynGp78WL3jRQ/http%3A%2F%2Fsdm.link%2Fslashdot
> _______________________________________________
> Matlab-emacs-discuss mailing list
> Mat...@li...
> https://secure-web.cisco.com/10eOO6rYM1RqFCHmlXsWS1TYTfQt0mblS7KZvYNUIxTp-ZGg9Gb7geEfnffV5gC9W3jjN5jlZyDrKFrGw14cD9PgfSBzm5qQ_6jbAPG5AQ61KZoTDufZTTsMhvlc7k-8mkewh3PKUPkO-9wtKK_ayCNqBB37kEYCLOH673oZPhzvewWVdd2KYIRf8sWleZLty8CyehfWXIWwMAX6yxqj9reri0LJu_hSOjSDE7bqwujPw_GaFGbRLesA4iu9JVaGg--IWyW7nW0t2ki22_ESPWiRYdGq7hqiMg7EYsAtkPymllsorUJDO3-uBqjP-SI1ky0GgTCRGnzpyoe5id6tfPy19K959g_PDiyGSEevC8Us/https%3A%2F%2Flists.sourceforge.net%2Flists%2Flistinfo%2Fmatlab-emacs-discuss
|
|
From: Dong T. <ti...@me...> - 2017-07-31 14:51:55
|
Hi Dennis,
Your input is very useful to me, thanks! The method to attach a running
MATLAB process fits my need better.
After some tests on your scripts, I just realized that a secondary emacs
instance is preferred, given that a first emacs instance is running
matlab-shell.
A bit of summary of what I do:
Put Dennis' first piece of code in matalb-attach.py
Launch the first emacs, using emacsclient, to run matlab-shell.
Launch the second emacs, using emacsclient, to run gdb.
M-x: gdb
gdb -i=mi -x matalb-attach.py
(gdb) break mexFunction
In the first emacs,
(matlab-shell) K>> *some commands to call mexFunction*
In the second emacs,
(gdb) window will grab the control on MATLAB and show the source code of
mexFunction. Make sure using -g when compiling the mex function.
Thank you,
Dong
On Mon, Jul 24, 2017 at 02:12:34PM -0400, Dennis Ogbe wrote:
> You can use Python as a scripting language in gdb to find the PID of a
> currently running MATLAB process and attach to it. I remember doing this
> a while back. The code was something around the lines of:
>
> <code>
>
> # debugging MEX files in emacs on linux
>
> import sys
> pythondir = '/usr/share/gcc-6.2.1/python'
> sys.path.append(pythondir)
>
> from libstdcxx.v6 import register_libstdcxx_printers
> from subprocess import check_output
>
> try:
> register_libstdcxx_printers(None)
> except Exception as e:
> pass
>
> # find the PID of the MATLAB process
> def get_pid(name):
> return list(map(int, check_output(["pidof", name]).split()))
>
> # set a new breakpoint, deleting any breakpoints referring to the same location
> def new_bp(loc):
> bps = gdb.breakpoints()
> if bps:
> for bp in bps:
> if bp.location == loc:
> gdb.execute("d " + str(bp.number))
> # set the dummy breakpoint
> return gdb.Breakpoint(loc)
>
> # attach to the MATLAB process. if gdb attach fails, do
> # sudo sh -c "echo 0 > /proc/sys/kernel/yama/ptrace_scope"
> pids = get_pid("MATLAB")
> gdb.execute("attach {:d}".format(pids[0]))
>
> <end code>
>
> an alternative approach is to launch matlab from gdb:
>
> <code>
>
> run_matlab = True
>
> if run_matlab:
> # spawn a new MATLAB process
> matlab_dir = "/path/to/MATLAB/R2016b/bin/glnxa64/MATLAB"
> gdb.execute("file " + matlab_dir)
>
> # set the MATLAB_DEBUG env
> gdb_loc = "/usr/bin/gdb"
> gdb.execute("set environment MATLAB_DEBUG = " + gdb_loc)
>
> # need to execute this according to
> # https://www.mathworks.com/help/matlab/matlab_external/debugging-on-linux-platforms.html
> gdb.execute("handle SIGSEGV SIGBUS nostop noprint")
>
> # set the breakpoint at the mexFunction
> mex_Bp = new_bp("mexFunction")
>
> # run matlab
> gdb.execute("run -nojvm -r debug_encoder -singleCompThread")
>
> <end code>
>
> Dennis
>
> Dong Tian <ti...@me...> writes:
>
> > Hi Eric, all,
> >
> > Thanks for replying.
> >
> > It is non-trivial to attach the matlab process to gdb.
> >
> > Matlab provides a command line option -Dgdb to associate the Matlab process
> > for gdb debugging. Would it be easier to launch "matlab-shell" with -Dgdb
> > as option? Maybe your or someone else could put lights on this approach?
> >
> > Thanks,
> > Dong
> >
> > On Wed, Jul 19, 2017 at 09:01:56PM +0000, Eric Ludlam wrote:
> >> Hi Dong,
> >>
> >> You can fire up GDB from within Emacs and "attach" to a process.
> >> Using this to attach to a process running MATLAB inside Emacs'
> >> matlab-shell will let you debug through MATLAB code and into your C++
> >> code.
> >>
> >> I haven't done this in a few years, and not with Mex (I was debugging
> >> MATLAB directly) but I'm guessing the principle is the same.
> >>
> >> Eric
> >>
> >> -----Original Message-----
> >> From: Dong Tian [mailto:ti...@me...]
> >> Sent: Wednesday, July 19, 2017 1:56 PM
> >> To: mat...@li...
> >> Subject: [Matlab-emacs-discuss] How to debug MEX files (C code) from Emacs?
> >>
> >> Hello,
> >>
> >> Could anyone provide a pointer on how to debug MEX files from Emacs?
> >> E.g. using gdb?
> >>
> >> I am familiar with the procedure of debugging pure c/c++ code or .m
> >> code from Emacs using gdb, but I don't know a good way to debug MEX
> >> file coded in C from Emacs.
> >>
> >> Thanks in advance,
> >> Dong
> >>
> >> ------------------------------------------------------------------------------
> >> Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://secure-web.cisco.com/1ujKNEvoZ9nB-3MswM8yQpeWgC6aSas93lzT8a00GA11SdB5SpQ6CVRIOx-heKXnqKECDVK85FoUunZq98vpNfzj9z-dAEXYdTSCYMo17rGews2sXFe04QVklpkIgysqCMwIaoJQltBgN0vzTKcyy6uH42EmnOZN9d_7d6GI8HTluD2CTM_kIvO0I4ApdEW1uyzzeVHPDe01AEhL8z1lCXCd9Ls5JK37FPBnlqU-vHsqgajNbrh54-xMsjRMjU-khdIzpnhQOzvN53aQbsoH_mYU759kv1n9L6l97WEaazGtUV61gkLrwcRmPqtZUkz2IU_aA6HkROB1JRv1L63MCOuGFFTjdNrbynGp78WL3jRQ/http%3A%2F%2Fsdm.link%2Fslashdot _______________________________________________
> >> Matlab-emacs-discuss mailing list
> >> Mat...@li...
> >> https://secure-web.cisco.com/10eOO6rYM1RqFCHmlXsWS1TYTfQt0mblS7KZvYNUIxTp-ZGg9Gb7geEfnffV5gC9W3jjN5jlZyDrKFrGw14cD9PgfSBzm5qQ_6jbAPG5AQ61KZoTDufZTTsMhvlc7k-8mkewh3PKUPkO-9wtKK_ayCNqBB37kEYCLOH673oZPhzvewWVdd2KYIRf8sWleZLty8CyehfWXIWwMAX6yxqj9reri0LJu_hSOjSDE7bqwujPw_GaFGbRLesA4iu9JVaGg--IWyW7nW0t2ki22_ESPWiRYdGq7hqiMg7EYsAtkPymllsorUJDO3-uBqjP-SI1ky0GgTCRGnzpyoe5id6tfPy19K959g_PDiyGSEevC8Us/https%3A%2F%2Flists.sourceforge.net%2Flists%2Flistinfo%2Fmatlab-emacs-discuss
> >
> > ------------------------------------------------------------------------------
> > Check out the vibrant tech community on one of the world's most
> > engaging tech sites, Slashdot.org! http://secure-web.cisco.com/1ujKNEvoZ9nB-3MswM8yQpeWgC6aSas93lzT8a00GA11SdB5SpQ6CVRIOx-heKXnqKECDVK85FoUunZq98vpNfzj9z-dAEXYdTSCYMo17rGews2sXFe04QVklpkIgysqCMwIaoJQltBgN0vzTKcyy6uH42EmnOZN9d_7d6GI8HTluD2CTM_kIvO0I4ApdEW1uyzzeVHPDe01AEhL8z1lCXCd9Ls5JK37FPBnlqU-vHsqgajNbrh54-xMsjRMjU-khdIzpnhQOzvN53aQbsoH_mYU759kv1n9L6l97WEaazGtUV61gkLrwcRmPqtZUkz2IU_aA6HkROB1JRv1L63MCOuGFFTjdNrbynGp78WL3jRQ/http%3A%2F%2Fsdm.link%2Fslashdot
> > _______________________________________________
> > Matlab-emacs-discuss mailing list
> > Mat...@li...
> > https://secure-web.cisco.com/10eOO6rYM1RqFCHmlXsWS1TYTfQt0mblS7KZvYNUIxTp-ZGg9Gb7geEfnffV5gC9W3jjN5jlZyDrKFrGw14cD9PgfSBzm5qQ_6jbAPG5AQ61KZoTDufZTTsMhvlc7k-8mkewh3PKUPkO-9wtKK_ayCNqBB37kEYCLOH673oZPhzvewWVdd2KYIRf8sWleZLty8CyehfWXIWwMAX6yxqj9reri0LJu_hSOjSDE7bqwujPw_GaFGbRLesA4iu9JVaGg--IWyW7nW0t2ki22_ESPWiRYdGq7hqiMg7EYsAtkPymllsorUJDO3-uBqjP-SI1ky0GgTCRGnzpyoe5id6tfPy19K959g_PDiyGSEevC8Us/https%3A%2F%2Flists.sourceforge.net%2Flists%2Flistinfo%2Fmatlab-emacs-discuss
|