• /
  • EnglishEspañolFrançais日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は、参考として提供されています。

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、このページを参照してください。

問題を作成する

.NET MAUI C# エラーをシンボル化する

|View as Markdown (English)

AndroidおよびiOS向けの.NET MAUIアプリのリリースビルドにはデバッグ情報が含まれていないため、アプリが報告するC#のスタックトレースにはメソッド名は表示されますが、ソースファイルや行番号は表示されません。そのビルドの対応する.pdbおよび.dllファイルを提供すると、New Relicはブラウザ上でこれらのスタックトレースをシンボル化できます。ブラウザ内でのシンボル化は、処理された例外にのみ適用されます。

このページでは、以下について説明します:

  • シンボル化されたC#のスタックトレースとシンボル化されていないC#のスタックトレースの比較
  • .pdbファイルと.dllファイルを生成する方法と見つける場所
  • New Relic UIでスタックトレースをシンボル化する方法
  • New Relic UIでネイティブiOSのクラッシュを見つける場所と、それらをシンボリケートする方法
  • 出荷したすべてのリリースのエラーをシンボル化できるように、これらのファイルを保存する方法

重要

シンボル化は完全にブラウザ内で実行されます。New Relicは、.pdbや.dllファイル、またはシンボル化されたスタックトレースをアップロード、保存、または保持しません。また、結果はエラー間で共有されません:開いたエラーごとに個別にファイルをアップロードし、ページをリロードしたり後で戻ってきたりするたびに再度アップロードします。毎回ファイルが必要になるため、リリースごとにファイルを保管してください。

シンボル化によって追加されるもの

シンボリケーションを行う前は、各フレームのファイルと行番号が表示される場所に<unknown>が表示されます:

<unknown> in NewRelicMaui.MainPage.OnHandledExceptionClicked(Object sender, EventArgs e)()

シンボリケーションを行った後は、フレームにソースファイルと行番号が表示されます:

MainPage.xaml.cs line 41 in NewRelicMaui.MainPage.OnHandledExceptionClicked()

各フレームの横にあるThread列には、そのフレームが属するクラス(たとえばNewRelicMaui.MainPageなど)が表示されます。

注意

行番号はメソッドが開始する場所(最初のステートメント)であり、例外をスローした正確な行ではありません。New Relicが.NET MAUIアプリから受信するスタックトレースには、メソッド内の行を特定するILオフセットが含まれていません。行番号を使用してソース内のメソッドを見つけ、そのメソッドを調べて原因を探してください。

.NET MAUIシンボルファイルについて

.NET MAUIアプリにはマネージドC#コードとネイティブプラットフォームコードの両方が含まれており、それぞれに独自のデバッグシンボルファイルがあります。各ファイルは、独自のコードからのエラーのみをシンボル化します:

ファイルプラットフォームシンボル化されるもの作成される場所New Relicでの使用方法
.pdb +.dll(ポータブルPDBとそのアセンブリ)Android、iOSアプリおよびクラスライブラリからのC#エラーbin/Release/<target framework>/、「出力ファイルを見つける」を参照してください。このページで説明されているように、ブラウザでアップロードします
.dSYMiOSネイティブiOSクラッシュbin/Release/net10.0-ios/ios-arm64/<YourApp>.app.dSYMdSYMファイルをアップロードする

New Relicは、C#エラーをシンボル化するために.pdbおよび.dllファイルのみを使用します。C#エラーにdSYMをアップロードしても、シンボル化されません。ただし、リリースが報告するあらゆる種類のエラーをシンボリケートできるように、リリースごとにそれらをすべて保持してください。

.pdbを生成し、 .dll

リリースビルドのポータブルPDBを有効にする

アプリの.csprojで、Releaseビルドがポータブルデバッグシンボルを生成することを確認してください:

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>

ビルドにより、アセンブリと同じ場所にポータブルPDBが生成されます。これらはAPK、AAB、またはIPAにパッケージ化されないため、アプリのサイズは増加しません。

コードをシンボル化したいクラスライブラリプロジェクトに、同じ設定を追加してください。

リリースを構築する

bash
$
# Android
$
dotnet publish -f net10.0-android -c Release
$
$
# iOS
$
dotnet publish -f net10.0-ios -c Release

プロジェクトのターゲットフレームワーク(たとえば、net9.0-android)を使用してください。

出力ファイルの検索

スタックトレースに表示される各アセンブリについて、その.dllと一致する.pdbが必要です。これらはビルド出力フォルダー内にあり、プロジェクト名が付けられています:

プラットフォーム場所
Androidbin/Release/net10.0-android/
iOSbin/Release/net10.0-ios/ios-arm64/ (ios-arm64は物理デバイス用のフォルダーです。iossimulator-arm64は使用しないでください)。

たとえば、アプリプロジェクトがNewRelicMauiの場合、NewRelicMaui.dllとNewRelicMaui.pdbが必要です。フレームがどのアセンブリから来ているかを見つけるには、フレーム内のネームスペースを確認します:NewRelicMaui.MainPage.OnHandledExceptionClickedはNewRelicMaui.dllにあります。フレームがMyApp.Coreなどの独自のクラスライブラリから来ている場合は、MyApp.Core.dllとMyApp.Core.pdbを使用してください。

dotnet publish APK、AAB、またはIPAをpublish/サブフォルダーに配置します。.dllファイルと.pdbファイルは、その上のフォルダーの、表に示されている場所にあります。

これらのファイルのコピーは、obj/Release/の下にもあります。互いに一致するように、表内の同じフォルダーから.dllと.pdbを常に一緒にアップロードしてください。

注意

iOSでは、アプリバンドル(NewRelicMaui.app/)またはIPAの内部から.dllを取得しないでください。リリースビルドではそのコピーがトリミングおよびストリップされるため、どの.pdbとも一致しなくなり、バンドルには.pdbが含まれなくなります。

New Relicでスタックトレースをシンボリケートする

エラーを開く

どちらかの場所からC#のエラーを開きます:

Stack traceセクションまでスクロールします。

エラーのappVersionとappBuildを確認してください。これらにより、どのリリースのファイルが必要かがわかります。

.pdb をアップロードし、 .dll

スタックトレースの上にあるNot seeing what you expected?バナーでは、オンデマンドのシンボル化を利用できます。Upload .pdb and .dll filesをクリックし、スタックトレース内のアセンブリの.pdbと.dllの両方を選択します。スタックトレースに複数のアセンブリ(アプリやクラスライブラリなど)のフレームが含まれている場合は、それぞれの.pdbと.dllを選択します。両方のファイルが必要です:.dllはアセンブリとそのメソッドを識別し、.pdbは各メソッドをソースファイルと行にマッピングします。

Screenshot of an unsymbolicated .NET MAUI C# stack trace with the Upload .pdb and .dll files button

シンボリケーション前、フレームにはソースファイルと行番号が表示されるはずの場所に<unknown>が表示されます。

選択したファイルがボタンの横に表示されます。両方がリストされていることを確認し(間違っているものは×で削除します)、Symbolicateをクリックします。

結果を確認またはエクスポートする

シンボリケーションが完了すると、バナーがSymbolicated your traceに変わり、解決されたフレーム数(例:Symbolicated 1 of 1 unresolved frame)が報告されます。また、フレームは例外をスローした正確な行ではなく、メソッドの先頭に解決されることも通知されます。

Screenshot of a .NET MAUI C# stack trace after symbolication, showing MainPage.xaml.cs line 41

シンボル化後、フレームにはソースファイルとメソッドが開始する行が表示されます。

結果はページが開いている間のみ保持されます。保持するには、Export handled exception detailsをクリックします。エクスポートにはシンボル化されたフレームが含まれるため、チケットに添付したり、チームと共有したりできます。

別のエラーをシンボリケートするには、そのエラーを開いてファイルを再度アップロードしてください。1つのエラーの結果は、他のエラーには引き継がれません。

ネイティブiOSクラッシュのシンボル化

Objective-C、Swift、またはiOSランタイムでのクラッシュなどのネイティブiOSのクラッシュはC#のエラーではないため、.pdbおよび.dllファイルは適用されません。これらのクラッシュでは、代わりにiOSの.dSYMファイルが使用されます。

New Relic UIでネイティブiOSクラッシュを見つけるには、one.newrelic.com > Mobile > (select your app) > Crashesに移動して、クラッシュを選択します。そのビルドのdSYMがNew Relicで利用できない場合、スタックトレースには読み取り可能なメソッド名ではなくマシンコード(メモリアドレス)が表示され、クラッシュレポートには警告が表示されます We were unable to locate your dsym.

Screenshot of the Stack trace section of a .NET MAUI native iOS crash on the Crashes page, showing memory addresses such as 0x108d84944 instead of method names

dSYMがない場合、ネイティブiOSフレームにはメソッド名ではなくメモリアドレスが表示されます。

修正するには:

  1. 「.NET MAUIシンボルファイルを理解する」で説明されているように、クラッシュしたビルドの.dSYMを見つけます。それをクラッシュのappVersionとappBuildに一致させます。
  2. dSYMファイルのアップロードの手順に従って、New Relicにアップロードしてください。

適切なファイルを見つける

.dll と .pdb のペアは、それを生成したビルドからのスタックトレースに対してのみ正しい結果を提供します:

  1. リリース:エラーのappVersionとappBuildを、そのリリース用に保存したファイルと照合してください。
  2. プラットフォーム:AndroidのエラーにはAndroidファイルを、iOSのエラーにはiOSファイルを使用してください。
  3. アセンブリ:「出力ファイルを見つける」で説明されているように、スタックフレーム内のネームスペースとアセンブリ名を照合してください。
  4. 同じビルド:.pdbを、.dllを生成したビルドと一致させてください。異なるビルドのファイルを混在させないでください。

注意

スタックトレースにはアセンブリIDが含まれていないため、ファイルが別のビルドからのものであるかどうかをNew Relicが常に判断できるわけではありません。アプリの別のバージョンのファイルでも結果が生成される場合がありますが、コードが変更されている場合は、行番号が誤った場所を指す可能性があります。メソッドの上にコメント行を1行追加しただけでも、その行番号は移動します。結果を利用する前に、ファイルがエラーのappVersionおよびappBuildと一致していることを確認してください。

ベストプラクティス:すべてのリリースでシンボルを保存する

New Relicは.pdbファイルと.dllファイルを保持しないため、ご自身で保存する必要があります。エラーが発生した後ではなく、各リリースをビルドする際に保存してください。

  • 配布するすべてのビルドのファイルを保管してください。これには、AndroidとiOSの両方の内部ビルド、ベータ版、ストアビルドが含まれます。
  • iOSのdSYMを含め、すべての種類のシンボルファイルを保持してください。「.NET MAUIシンボルファイルを理解する」を参照してください。
  • メインアプリのアセンブリだけでなく、独自のクラスライブラリを含めてください。
  • エラーの適切なファイルを見つけられるように、アプリが報告するappVersionおよびappBuild属性と一致させて、プラットフォーム、バージョン、ビルド番号でラベル付けしてください。
  • そのバージョンが使用されている間は、それらを保持してください。ユーザーは何ヶ月も古いバージョンを使い続けることがよくあります。
  • アクセスを制限します。PDBにより、ソースファイルのパスとコード構造が明らかになります。ソースコードと同じアクセス制御で保存してください。

どこに保存するかは任意です。たとえば、CIシステムのビルドアーティファクト、ストレージバケット、アーティファクトリポジトリなどです。CIビルドアーティファクトを使用する場合は、CIシステムがそれらを保持する期間を確認してください。多くのシステムでは、一定時間後に自動的に削除されるためです。

注意

再ビルドで同一のファイルが生成されるのは、ソースコード、依存関係、SDKバージョン、およびビルド設定がすべて完全に同じである場合のみです。実際にリリースしたビルドのファイルを保存してください。それらを再作成できるとは限らないため、ご注意ください。

トラブルシューティング

制限

  • フレームは、スローした正確な行ではなく、メソッドの先頭に解決されます。
  • シンボリケーションはC#エラーに適用されます。ネイティブAndroid(Java/Kotlin)およびiOSのクラッシュでは、AndroidおよびiOSのシンボリケーションワークフローを使用します。
  • 結果は保存されず、エラー間で共有されることもありません。エラーを表示するたびに、エラーごとにファイルをアップロードする必要があります。
Copyright © 2026 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.