调试定制的C / c++代码
当你自定义C / c++代码集成到你的模型,你可以从仿真软件中调试代码金宝app®通过推出外部调试器和您的自定义代码中设置断点。这个选项适用于自定义代码中指定模拟目标面板模型的配置参数对话框。你可以将这个定制代码集成到您的模型使用任何这些块:
C调用者
C函数
MATLAB函数
MATLAB系统
Stateflow®图表
请注意
自定义代码,调试导入自定义代码复选框的模拟目标面板模型的配置参数对话框必须选择。这个参数在默认情况下是选中的。
这张桌子给调试器支持的信息。金宝app
操作系统 | 金宝app调试器支持 |
---|---|
窗户® |
微软®Visual Studio®IDE。 |
Visual Studio代码与MinGW®GDB。需要安装的MATLAB®编码器™界面Visual Studio代码调试支持包。金宝app看到//www.tatmou.com/matlabcentral/fileexchange/103555。 |
|
macOS |
LLDB。 |
Visual Studio代码LLDB。需要安装的MATLAB编码器界面Visual Studio代码调试支持包。金宝app看到//www.tatmou.com/matlabcentral/fileexchange/103555。 |
|
Linux® |
GNU®数据显示调试器(DDD)。 |
Visual Studio代码GDB。需要安装的MATLAB编码器界面Visual Studio代码调试支持包。金宝app看到//www.tatmou.com/matlabcentral/fileexchange/103555。 |
选择一个编译器使用C或c++代码,执行命令墨西哥人设置C
或墨西哥人设置c++
。
启动外部调试器,调试选项卡的仿真软件将来发金宝app布的断点部分,单击右边的箭头添加断点按钮。从菜单中选择自定义代码中设置断点
。
调试支持只有当模拟在正常或金宝app加速模式,只有在正常模式为参考模型。如果不支持调试,按钮来启动调试器是禁用的金宝app。
一旦启动调试器,您可以在您的自定义设置断点的代码。
当你模拟模型,模拟暂停它到达一个断点时自定义代码。注意,当仿真调试,期间暂停仿真时间步长仿真软件窗口的底部显示可能不是最新的。金宝app
结束调试会话,首先分离活动流程的调试器,然后关闭调试器窗口。
谨慎
不杀死进程连接到调试器。发出一个杀了
命令从调试器运行的过程可以导致MATLAB停止运行,你可以失去工作。
请注意
在Linux或Mac OS平台,发布前不要关闭调试器分离
命令从流程的调试器正在运行。
请注意
使用微软Visual Studio调试器在进程内的模式中,必须设置Windows注册表键的值HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ \会话管理器\ DebuggerMaxModuleMsgs控制
4096或更高。
获得的当前值DebuggerMaxModuleMsgs
,在MATLAB中执行这个命令。
winqueryreg (“HKEY_LOCAL_MACHINE”,“系统\ CurrentControlSet \ \控制会话管理器”,“DebuggerMaxModuleMsgs”)
如果这个键不存在或将数量低于4096,使用这个过程来设置:
启动注册表编辑器。
在注册表中查找此注册表子项,并点击会话管理器:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ \会话管理器的控制
在右边的列表条目,如果
DebuggerMaxModuleMsgs
存在,进入步骤6。否则,继续步骤4。在注册表编辑器窗口中,选择编辑>新>DWORD值。
在右边的列表条目,改变新值的名字
DebuggerMaxModuleMsgs
并按输入。右键单击
DebuggerMaxModuleMsgs
条目名称并选择修改。在编辑DWORD值对话框中,在值数据字段中,输入
4096年
。为基地值,选择小数
。点击好吧。关闭注册表编辑器。
重新启动您的计算机。
进程内和用模拟
当模拟模型包含自定义的C或c++代码,您可以选择运行一个单独的进程中的自定义代码之外的MATLAB。这个过程称为用模拟。这个选项可能是有用的在调试时您的自定义代码。通过运行在一个单独的过程,问题自定义代码不导致MATLAB崩溃,你可以更容易调试和解决这些问题。问题可能出现由于意想不到的异常自定义代码和错误之间的界面模型和自定义代码。金宝app
启用进程模拟,模型配置参数对话框模拟目标窗格中,在导入设置选项卡上,选择模拟自定义代码在一个单独的过程。
如果模拟自定义代码在一个单独的过程不是选择的,也就是说,如果您使用的是吗进程内的模拟,当你启动外部调试器,整个MATLAB过程连接到调试器。这一行动可能导致调试器需要更多时间推出。调试与进程模拟通常更快。
进程外调试与仿真不支持Mac OS,而不是所有自定义代码功能支持进程模拟。金宝app注意,仿真时间与过程模拟通常更快。
当你用模拟模型,如果你遇到一个运行时异常,仿真软件给你的选项启动外部调试器。金宝app例如,该模型包含了一个C调用块调用函数加法器()
,访问一个对象调用adderObj
。在调用函数之前,必须创建对象,您可以通过调用initAdder ()
从初始化代码上指定的额外的源代码选项卡的模拟目标面板模型的配置参数对话框。
如果initAdder ()
之前不叫加法器()
,然后加法器()
试图访问未初始化的指针,导致运行时异常。在进程内的模拟,这个异常会导致MATLAB模拟模型时崩溃。然而,随着进程模拟,模拟仿真软件中的模型产生一条错误消息。金宝app
然后您可以单击开放启动外部调试器和解决问题导致错误。
调试器启动后,它重新启动模拟和自动停在自定义函数条目的断点。