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

MAUI技术问题:如何在Release模式下查看调试语句

MAUI Release模式下调试日志配置与异常修复

已完成的配置

  • 在.csproj文件中为Release模式添加调试相关属性:
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-android|AnyCPU'">
  <ApplicationId>com.companyname.appname</ApplicationId>
  <AndroidPackageFormat>apk</AndroidPackageFormat>
  <ApplicationTitle>appname</ApplicationTitle>
  <DebugType>portable</DebugType>
  <DebugSymbols>true</DebugSymbols>
  <Debuggable>true</Debuggable>
  <AndroidEnableDeveloperInstrumentation>true</AndroidEnableDeveloperInstrumentation>
</PropertyGroup>
  • 在AndroidManifest.xml的application节点手动添加android:debuggable="true"
  • 在MAUIProgram.cs中配置控制台日志:
builder.Logging.AddConsole(options =>
{
    options.IncludeScopes = true;
});
builder.Logging.SetMinimumLevel(LogLevel.Debug);
  • 在App.xaml.cs中注入ILogger并添加日志输出代码
  • 在项目属性中启用Release模式的开发者工具

但运行Release模式后出现异常界面,以下是需要补充的配置和修复步骤:

额外配置与修复方案

  1. 移除AndroidManifest中的手动debuggable配置
    .csproj里的<Debuggable>true</Debuggable>会自动给AndroidManifest.xml生成android:debuggable="true",手动添加会导致配置冲突引发异常,直接删掉这行手动配置即可。

  2. 添加Android Logcat日志输出
    MAUI的AddConsole()在Android Release模式下不会输出到系统Logcat,必须补充AddDebug()才能将日志打到系统日志中。修改MAUIProgram.cs的日志配置:

builder.Logging.AddConsole(options =>
{
    options.IncludeScopes = true;
});
builder.Logging.AddDebug(); // 新增此行,输出到Logcat
builder.Logging.SetMinimumLevel(LogLevel.Debug);
  1. 临时禁用代码收缩与链接器
    Release模式下的R8代码收缩和链接器可能会移除日志代码或依赖注入相关逻辑,导致异常。先在.csproj的Release属性组中添加以下配置临时禁用:
<AndroidR8Enabled>false</AndroidR8Enabled>
<AndroidLinkMode>None</AndroidLinkMode>

等日志正常后,再逐步调整为SdkOnly链接模式,并添加规则保留必要代码。

  1. 修正ILogger注入方式
    避免使用非泛型ILogger,改用泛型ILogger<App>——这是MAUI依赖注入的标准用法,非泛型可能导致注入失败。修改App.xaml.cs:
using Microsoft.Extensions.Logging;

public partial class App : Application
{
    private readonly ILogger<App> _logger;

    public App(ILogger<App> logger)
    {
        _logger = logger;
        InitializeComponent();

        _logger.LogInformation("App started in production mode.");
        _logger.LogError("An error occurred.");
    }
}
  1. 添加全局异常捕获
    给应用加上全局异常捕获,将异常信息输出到日志,方便定位问题:
public partial class App : Application
{
    private readonly ILogger<App> _logger;

    public App(ILogger<App> logger)
    {
        _logger = logger;
        InitializeComponent();

        _logger.LogInformation("App started in production mode.");
        _logger.LogError("An error occurred.");

        // 捕获未处理异常
        AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
        Application.Current.DispatcherUnhandledException += DispatcherUnhandledException;
    }

    private void DispatcherUnhandledException(object sender, Microsoft.UI.Xaml.UnhandledExceptionEventArgs e)
    {
        _logger.LogError(e.Exception, "UI线程未处理异常");
        e.Handled = true;
    }

    private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        _logger.LogError(e.ExceptionObject as Exception, "全局未处理异常");
    }
}
  1. 查看日志的正确方式
    使用Android Studio的Logcat工具,或者通过命令行执行adb logcat -s "com.companyname.appname"(替换为你的应用包名),过滤查看应用的日志内容。

内容的提问来源于stack exchange,提问作者Matthew Pans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:50:20