我目前正在开发一个带有CUDA功能的mex文件,用于在MATLAB中使用。当我做错了什么(例如错误的指针或类似的问题),MATLAB总是会崩溃(Windows提示我结束、发送报告给MathWorks或尝试继续)。有没有办法防止这种情况发生?这真的很烦人,但正如你自己可能知道的那样:几乎没有人可以在没有“试错”的情况下编写完美的代码...感谢迄今为止所做的努力!
据我所知,没有办法防止Matlab在mex错误时崩溃。但您可以附加一个调试器到Matlab进程中并逐步执行代码。我可以确定的是,如果您的代码位于外部dll中并加载到Matlab中,则此方法有效。我不确定这是否适用于mex文件。
您可以按照以下步骤使用Visual Studio和NVIDIA Nsight for Visual Studio来调试包括CUDA代码在内的Matlab mex文件。 定义系统环境变量NSIGHT_CUDA_DEBUGGER并将其设置为1。 启动Matlab。 启动NVIDIA Nsight。右键单击任务栏上的Nsight Monitor图标,选择选项。选择CUDA选项卡。对于使用此监视器进行CUDA附加选项,请单击下拉菜单并选择True。 在Visual Studio中打开您的项目,设置断点并编译它。 转到工具 -> 附加到进程。 单击传输字段旁边的下拉菜单,并选择Nsight GPU Debugger。 确保您的主机名称列在限定符字段中。 请注意,默认情况下,此字段为空;第一次打开此对话框时,您必须手动选择计算机名称。 当您在限定符字段中输入计算机的主机名时,可用进程列表将出现在对话框中。可能附加CUDA使用的进程将在Type列中显示CUDA。如果一个进程被灰掉并且在Type列中列出了CUDA,则它已经被调试,因此无法附加。灰色而没有在Type列中列出CUDA的进程表示它在要调试的进程中没有CUDA使用。可以附加的进程将正常显示,并且附加按钮将启用。 确保Matlab在Type列中具有CUDA并选择它。 从Matlab命令行调用在CUDA mexfile中定义的函数。执行将在第一个断点处停止,然后可以开始调试。