生成检测和报告运行时错误的独立代码
这个例子展示了如何生成C/ c++库或可执行文件来检测和报告运行时错误,比如越界数组索引。如果生成的代码检测到错误,它会报告一条消息并终止程序。您可以检测和修复仅在目标硬件上发生的错误。
写函数getelement
它使用另一个结构字段的值索引到一个结构字段。
函数y = getelement(S)% # codegeny = S.A(S.u);结束
为独立库或可执行文件创建代码配置对象。例如,为静态库创建一个代码配置对象。启用代码生成报告。
CFG = code .config(“自由”);cfg。GenerateReport = true;
启用生成运行时错误检测和报告。
cfg。RuntimeChecks = true;
定义一个示例输入,可用于指定输入参数的属性。
S.A = ones(2,2);S.u = 1;
生成的代码。
codegen配置cfggetelementarg游戏{年代}
要打开代码生成报告,请单击查看报告链接。
在已生成文件列表中,单击getelement.c
。
您可以看到检查错误并调用函数报告错误的代码。例如,如果代码检测到超出范围的数组索引错误,它将调用rtDynamicBoundsError
报告错误并终止程序。
/* Include files */ # Include "getelement_rtwutil.h" # Include "getelement_rtwutil.h" # Include# Include # Include /*变量定义*/ static rtBoundsCheckInfo emlrtBCI = {1,/* iFirst */ 4, /* iLast */ 2, /* lineNo */ 5, /* colNo */ "S.A", /* aName */ "getelement", /* fName */ "C:\\Users\\username\\Documents\\MATLAB\\runtime-error-ex\\getelement. h"m",/* pName */ 0 /* checkKind */};static rtDoubleCheckInfo emlrtDCI = {2,/* lineNo */ 5, /* colNo */ "getelement", /* fName */ "C:\\Users\\username\\Documents\\MATLAB\\runtime-error-ex\\getelement. "/* pName */ 1 /* checkKind */};/*函数定义*/ double getelement(const struct0_T *S) {int i;如果(S - > u ! = (int)楼(S - > u)) {rtIntegerError (S - > u, &emlrtDCI);} i = (int)S->u;if ((i < 1) || (i > 4)) {rtDynamicBoundsError(i, 1,4, &emlrtBCI);} return S->A[i - 1];}
错误报告软件使用流
将错误消息写入stderr
。它使用中止
终止应用程序。如果流
和中止
不可用,你必须提供它们。的中止
函数突然终止程序。如果您的系统支持信号,您可以捕金宝app获中止信号(SIGABRT
)这样你就可以控制程序的终止。