Matlab和C++混合编程——在matlab调试过程中可以跳入VS调试观察.cpp文件中的数据

1.在matlab中为.cpp使用mex编译生成.mexw64(64位)文件

在matlab中封装编译函数: compile_gc(debug_flag)

compile_gc(debug_flag=1):生成两种文件,(.mexw64和.mexw64.pdb)

compile_gc:.mexw64

注意:如果文件中已经存在.mexw64文件,则不需要执行该步骤,但是使用mex编译生成的时候移动要使用mex -g,否则调试的时候不会跳入vs中执行相关跟踪操作(并且每次关闭matlab的时候还需要重新-g编译mex.c文件)。

function compile_gc(debug_flag)
if strfind(computer(),'64')
    defs = '-DA64BITS '; % for 64bit machines - define pointer type
else
    defs = '';
end
% if mj < 7 || (mj==7 && mn < 3)
if verLessThan('matlab','7.3')    
    defs = [defs, '-DmwIndex=int -DmwSize=size_t '];
end

if nargin>0 && debug_flag
    debugs = ' -g ';
    sprintf('mex -g');
else
    debugs = ' -O ';
end

cmd = sprintf('mex %s -largeArrayDims %s GraphCutMex.cpp graph.cpp GCoptimization.cpp GraphCut.cpp LinkedBlockList.cpp maxflow.cpp',...
    debugs, defs);%<pre name="code" class="plain" style="color: rgb(51, 51, 51);">%%GraphCutMex.cpp graph.cpp GCoptimization.cpp GraphCut.cpp LinkedBlockList.cpp maxflow.cpp(这个使用自己的.cpp文件代替,我这里编译了6个.cpp文件)
eval(cmd);cmd = sprintf('mex %s -largeArrayDims %s GraphCut3dConstr.cpp graph.cpp GCoptimization.cpp GraphCut.cpp LinkedBlockList.cpp maxflow.cpp',... debugs, defs);eval(cmd);cmd = sprintf('mex %s -largeArrayDims %s GraphCutConstrSparse.cpp graph.cpp GCoptimization.cpp GraphCut.cpp LinkedBlockList.cpp maxflow.cpp',... debugs, defs);eval(cmd);cmd = sprintf('mex %s -largeArrayDims %s GraphCutConstr.cpp graph.cpp GCoptimization.cpp GraphCut.cpp LinkedBlockList.cpp maxflow.cpp',... debugs, defs);eval(cmd);

 2. 
打开VS,填加matlab进程(经过多次试验,matlab中每次重新调试mexFunction函数的时候,都要做这一步,否则不会跳入VS中执行调试,这是关键步骤) 

VS--->调试--->附加到进程----->


执行完后会发现当前的VS是出于调试状态


再打开当前需要调试的.cpp文件(就在matlab的当前工程的目录下)——>在需要的地方设置断点——>返回到matlab中进行调试(最好能在调用cpp文件的地方设置断点,方便调试的时候进入VS中,但也可以不加)

3.在VS中当碰到当前的这种状态的时候,则要停止调试才能返回matlab中。在matlab中需要调试下一个.cpp函数的时候,VS则需要重新添加一次matlab进程(重新执行第2步),否则会失效



按照上面的步骤,就可以实现在一个matlab工程中通过VS调试多个.cpp文件了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值