如何在RAD Server REST后端激活madExcept记录异常与内存泄漏?
在RAD Server REST后端模块中激活madExcept的方法
1. 修正单元引用位置
IDE自动将madExcept相关单元移到包的requires部分是问题核心——madExcept的运行时初始化依赖于在具体业务模块的uses子句中直接引用,而非仅通过包依赖。
- 打开你的后端模块主单元(如
*.pas或项目主*.dpr),手动添加以下单元到该单元的uses中:uses // ... 原有单元 madExcept, madLinkDisAsm, madListHardware, madListProcesses, madListModules; - 移除包DPK的
requires部分中madBasic_、madDisAsm_、madExcept_这些条目,避免依赖冲突。
2. 调试环境专属配置(避免影响生产)
通过条件编译仅在DEBUG模式下激活madExcept,确保生产环境(Linux Apache托管)无性能损耗:
在模块的initialization块中添加配置:
initialization {$IFDEF DEBUG} // 启用全局异常捕获 madExcept.MadExceptSettings.Active := True; // 开启内存泄漏检测 madExcept.MadExceptSettings.LeakCheck := lcEnabled; // 设置日志保存路径(默认当前服务器进程目录) madExcept.MadExceptSettings.SaveDir := ExtractFilePath(ParamStr(0)); // 调试时弹出异常对话框(可选,方便即时排查) madExcept.MadExceptSettings.DialogMode := dmAlways; {$ENDIF}
3. 确保服务器进程能加载madExcept库
EMSDevServer.exe运行时需要读取madExcept的对应架构DLL:
- 将
madExcept32.dll(32位)或madExcept64.dll(64位)复制到RAD Studio的bin目录(EMSDevServer.exe默认在此目录),或确保DLL路径在系统PATH中。
4. 验证功能
在REST接口中手动抛出测试异常验证捕获效果:
procedure TMyResource.Get(const AContext: TEndpointContext; const ARequest: TEndpointRequest; const AResponse: TEndpointResponse); begin raise Exception.Create('MadExcept测试异常'); end;
启动EMSDevServer.exe并调用该接口,检查是否生成*.me4格式的日志文件,或弹出异常对话框。
内容的提问来源于stack exchange,提问作者Marc Guillot
相关产品推荐
相关产品推荐

