Cannot debug C++ MEX-file with Xcode on Mac Platform

2 views (last 30 days)
First, I followed the debug instruction on http://au.mathworks.com/help/matlab/matlab_external/debugging-on-mac-platforms.html, and run debugging "yprime.c" successfully.
But this method does not work when I try to debug C++ MEX-file. Xcode debugger cannot stop at breakpoints where I set. I double checked all settings are correct.
Then I try to figure out the problem.
1. I run the command and found out no object files that Xcode use for debugging were generated:
mex -g BallTreeDensity.cpp BallTreeClass.cc BallTreeDensityClass.cc
After I run the command as follow, I found at the end of output, the mex script delete those object files:
mex -g -v BallTreeDensity.cpp BallTreeClass.cc BallTreeDensityClass.cc
Here is the output:
Verbose mode is on.
Neither -compatibleArrayDims nor -largeArrayDims is selected.
Using -compatibleArrayDims. In the future, MATLAB will require the use of
-largeArrayDims and remove the -compatibleArrayDims option.
For more information:
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html.
No MEX options file identified; looking for an implicit selection.
... Looking for compiler 'Xcode Clang++' ...
... Looking for environment variable 'DEVELOPER_DIR' ...No.
... Executing command 'xcode-select -print-path' ...Yes ('/Applications/Xcode.app/Contents/Developer').
... Looking for folder '/Applications/Xcode.app/Contents/Developer' ...Yes.
... Executing command 'which xcrun' ...Yes ('/Applications/Xcode.app/Contents/Developer/usr/bin/xcrun').
... Looking for folder '/Applications/Xcode.app/Contents/Developer/usr/bin' ...Yes.
... Executing command 'defaults read com.apple.dt.Xcode IDEXcodeVersionForAgreedToGMLicense' ...No.
... Executing command 'defaults read /Library/Preferences/com.apple.dt.Xcode IDEXcodeVersionForAgreedToGMLicense' ...Yes ('6.1.1').
... Executing command '
agreed=6.1.1
if echo $agreed | grep -E '[\.\"]' >/dev/null; then
lhs=`expr "$agreed" : '\([0-9]*\)[\.].*'`
rhs=`expr "$agreed" : '[0-9]*[\.]\(.*\)$'`
if echo $rhs | grep -E '[\."]' >/dev/null; then
rhs=`expr "$rhs" : '\([0-9]*\)[\.].*'`
fi
if [ $lhs -gt 4 ] || ( [ $lhs -eq 4 ] && [ $rhs -ge 3 ] ); then
echo $agreed
else
exit 1
fi
fi' ...Yes ('6.1.1').
... Executing command 'xcode-select -print-path' ...Yes ('/Applications/Xcode.app/Contents/Developer').
... Looking for folder '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk' ...Yes.
... Executing command 'xcode-select -print-path' ...Yes ('/Applications/Xcode.app/Contents/Developer').
... Looking for folder '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk' ...Yes.
... Executing command 'echo /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk | rev | cut -c1-10 | rev | egrep -oh '[0-9]+\.[0-9]+'' ...Yes ('10.9').
Found installed compiler 'Xcode Clang++'.
Options file details
-------------------------------------------------------------------
Compiler location: /Applications/Xcode.app/Contents/Developer
Options file: /Applications/MATLAB_R2015a.app/bin/maci64/mexopts/clang++_maci64.xml
CMDLINE200 : /Applications/Xcode.app/Contents/Developer/usr/bin/xcrun -sdk macosx10.9 clang++ -Wl,-twolevel_namespace -undefined error -arch x86_64 -mmacosx-version-min=10.9 -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -framework Cocoa -bundle -Wl,-exported_symbols_list,"/Applications/MATLAB_R2015a.app/extern/lib/maci64/mexFunction.map" -stdlib=libc++ -g -Wl,-exported_symbols_list,"/Applications/MATLAB_R2015a.app/extern/lib/maci64/mexFunction.map" BallTreeDensity.o BallTreeClass.o BallTreeDensityClass.o -L"/Applications/MATLAB_R2015a.app/bin/maci64" -lmx -lmex -lmat -o BallTreeDensity.mexmaci64
CXX : /Applications/Xcode.app/Contents/Developer/usr/bin/xcrun -sdk macosx10.9 clang++
DEFINES : -DMX_COMPAT_32 -DMATLAB_MEX_FILE
MATLABMEX : -DMATLAB_MEX_FILE
CXXFLAGS : -fno-common -arch x86_64 -mmacosx-version-min=10.9 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -fobjc-arc -std=c++11 -stdlib=libc++
INCLUDE : -I"/Applications/MATLAB_R2015a.app/extern/include" -I"/Applications/MATLAB_R2015a.app/simulink/include"
CXXOPTIMFLAGS : -O2 -DNDEBUG
CXXDEBUGFLAGS : -g
LDXX : /Applications/Xcode.app/Contents/Developer/usr/bin/xcrun -sdk macosx10.9 clang++
LDFLAGS : -Wl,-twolevel_namespace -undefined error -arch x86_64 -mmacosx-version-min=10.9 -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -framework Cocoa -bundle -Wl,-exported_symbols_list,"/Applications/MATLAB_R2015a.app/extern/lib/maci64/mexFunction.map" -stdlib=libc++
LDBUNDLE : -bundle
LINKEXPORT : -Wl,-exported_symbols_list,"/Applications/MATLAB_R2015a.app/extern/lib/maci64/mexFunction.map"
LINKLIBS : -L"/Applications/MATLAB_R2015a.app/bin/maci64" -lmx -lmex -lmat
LDOPTIMFLAGS : -O
LDDEBUGFLAGS : -g
OBJEXT : .o
LDEXT : .mexmaci64
DEVELOPER_DIR_CHECK :
XCODE_DIR : /Applications/Xcode.app/Contents/Developer
XCRUN_DIR : /Applications/Xcode.app/Contents/Developer/usr/bin
XCODE_AGREED_VERSION : 6.1.1
ISYSROOT : /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk
SDKVER : 10.9
MATLABROOT : /Applications/MATLAB_R2015a.app
ARCH : maci64
SRC : /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeDensity.cpp;/Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeClass.cc;/Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeDensityClass.cc
OBJ : BallTreeDensity.o;BallTreeClass.o;BallTreeDensityClass.o
OBJS : BallTreeDensity.o BallTreeClass.o BallTreeDensityClass.o
SRCROOT : /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeDensity
DEF : /var/folders/mw/k9r9hgf50tq3xv_5vgck1v2m0000gn/T//mex_1863173812270_1489/BallTreeDensity.def
EXP : BallTreeDensity.exp
LIB : BallTreeDensity.lib
EXE : BallTreeDensity.mexmaci64
ILK : BallTreeDensity.ilk
MANIFEST : BallTreeDensity.mexmaci64.manifest
TEMPNAME : BallTreeDensity
EXEDIR :
EXENAME : BallTreeDensity
OPTIM : -g
LINKOPTIM : -g
CMDLINE100_0 : /Applications/Xcode.app/Contents/Developer/usr/bin/xcrun -sdk macosx10.9 clang++ -c -DMX_COMPAT_32 -DMATLAB_MEX_FILE -I"/Applications/MATLAB_R2015a.app/extern/include" -I"/Applications/MATLAB_R2015a.app/simulink/include" -fno-common -arch x86_64 -mmacosx-version-min=10.9 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -fobjc-arc -std=c++11 -stdlib=libc++ -g /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeDensity.cpp -o BallTreeDensity.o
CMDLINE100_1 : /Applications/Xcode.app/Contents/Developer/usr/bin/xcrun -sdk macosx10.9 clang++ -c -DMX_COMPAT_32 -DMATLAB_MEX_FILE -I"/Applications/MATLAB_R2015a.app/extern/include" -I"/Applications/MATLAB_R2015a.app/simulink/include" -fno-common -arch x86_64 -mmacosx-version-min=10.9 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -fobjc-arc -std=c++11 -stdlib=libc++ -g /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeClass.cc -o BallTreeClass.o
CMDLINE100_2 : /Applications/Xcode.app/Contents/Developer/usr/bin/xcrun -sdk macosx10.9 clang++ -c -DMX_COMPAT_32 -DMATLAB_MEX_FILE -I"/Applications/MATLAB_R2015a.app/extern/include" -I"/Applications/MATLAB_R2015a.app/simulink/include" -fno-common -arch x86_64 -mmacosx-version-min=10.9 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -fobjc-arc -std=c++11 -stdlib=libc++ -g /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeDensityClass.cc -o BallTreeDensityClass.o
CMDLINE300_0 : rm -f BallTreeDensity.o
CMDLINE300_1 : rm -f BallTreeClass.o
CMDLINE300_2 : rm -f BallTreeDensityClass.o
-------------------------------------------------------------------
Building with 'Xcode Clang++'.
/Applications/Xcode.app/Contents/Developer/usr/bin/xcrun -sdk macosx10.9 clang++ -c -DMX_COMPAT_32 -DMATLAB_MEX_FILE -I"/Applications/MATLAB_R2015a.app/extern/include" -I"/Applications/MATLAB_R2015a.app/simulink/include" -fno-common -arch x86_64 -mmacosx-version-min=10.9 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -fobjc-arc -std=c++11 -stdlib=libc++ -g /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeDensity.cpp -o BallTreeDensity.o
In file included from /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeDensity.cpp:9:
In file included from /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeDensity.h:16:
/Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTree.h:64:63: warning: comparison of 0 <= unsigned expression is always true [-Wtautological-compare]
bool validIndex(BallTree::index ind) const { return ((0<=ind) && (ind < 2*num_points)); }
~^ ~~~
1 warning generated.
/Applications/Xcode.app/Contents/Developer/usr/bin/xcrun -sdk macosx10.9 clang++ -c -DMX_COMPAT_32 -DMATLAB_MEX_FILE -I"/Applications/MATLAB_R2015a.app/extern/include" -I"/Applications/MATLAB_R2015a.app/simulink/include" -fno-common -arch x86_64 -mmacosx-version-min=10.9 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -fobjc-arc -std=c++11 -stdlib=libc++ -g /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeClass.cc -o BallTreeClass.o
In file included from /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeClass.cc:16:
/Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTree.h:64:63: warning: comparison of 0 <= unsigned expression is always true [-Wtautological-compare]
bool validIndex(BallTree::index ind) const { return ((0<=ind) && (ind < 2*num_points)); }
~^ ~~~
1 warning generated.
/Applications/Xcode.app/Contents/Developer/usr/bin/xcrun -sdk macosx10.9 clang++ -c -DMX_COMPAT_32 -DMATLAB_MEX_FILE -I"/Applications/MATLAB_R2015a.app/extern/include" -I"/Applications/MATLAB_R2015a.app/simulink/include" -fno-common -arch x86_64 -mmacosx-version-min=10.9 -fexceptions -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -fobjc-arc -std=c++11 -stdlib=libc++ -g /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeDensityClass.cc -o BallTreeDensityClass.o
In file included from /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeDensityClass.cc:14:
In file included from /Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTreeDensity.h:16:
/Users/ideepblue/Documents/MATLAB/third-party/@kde/t/BallTree.h:64:63: warning: comparison of 0 <= unsigned expression is always true [-Wtautological-compare]
bool validIndex(BallTree::index ind) const { return ((0<=ind) && (ind < 2*num_points)); }
~^ ~~~
1 warning generated.
/Applications/Xcode.app/Contents/Developer/usr/bin/xcrun -sdk macosx10.9 clang++ -Wl,-twolevel_namespace -undefined error -arch x86_64 -mmacosx-version-min=10.9 -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -framework Cocoa -bundle -Wl,-exported_symbols_list,"/Applications/MATLAB_R2015a.app/extern/lib/maci64/mexFunction.map" -stdlib=libc++ -g -Wl,-exported_symbols_list,"/Applications/MATLAB_R2015a.app/extern/lib/maci64/mexFunction.map" BallTreeDensity.o BallTreeClass.o BallTreeDensityClass.o -L"/Applications/MATLAB_R2015a.app/bin/maci64" -lmx -lmex -lmat -o BallTreeDensity.mexmaci64
rm -f BallTreeDensity.o
rm -f BallTreeClass.o
rm -f BallTreeDensityClass.o
MEX completed successfully.
2. Then I use the command as follow to generate object file only:
mex -c -g -v BallTreeDensity.cpp BallTreeClass.cc BallTreeDensityClass.cc
But Xcode debugging still does not work.
I try my best to solve this problem, but still got nothing.
So, my question is how to debug c++ mex file on Mac platform?

Accepted Answer

Varun Bhaskar
Varun Bhaskar on 12 Aug 2015
Hello,
1) What is the output generated for mex -g -v yprime.cpp? 2) Can you place mexopts.sh in your preferences directory or current working directory and then try debugging? 3) Can you Use the mex build script option -largeArrayDims with the 64-bit API?
  1 Comment
ideepblue
ideepblue on 14 Aug 2015
Hi Varun,
Thanks for your suggestion, I can debug my cpp mex files successfully.
I copy the mexopts.sh from `/Applications/MATLAB_R2015a.app/bin/mexopts.sh` to my current working directory.
To make command `mex` working, I replace all strings "10.8" to "10.9" in mexopts.sh file.
Then run `mex -g -v BallTreeDensity.cpp BallTreeClass.cc BallTreeDensityClass.cc` again. This time, no object files are deleted. And Xcode debugging works good!
I just wonder why I need mexopts.sh? The default options for mex are not set up appropriately?

Sign in to comment.

More Answers (0)

Categories

Find more on Troubleshooting in MATLAB Compiler SDK in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!