You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:22:50