Unhandled exception: System.NullReferenceException: Object reference not set to an instance of an object.

Abierto
#5,673 3 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
42/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
csharp

Línea de trabajo

Comienza en src/Tools/dotnet-counters/CounterMonitor.cs, línea 200, y reproduce en la Visual Studio Package Manager Console la invocación dotnet-counters monitor -n ConsoleApp --counters HatCo.Store del issue. Usa el ejemplo de .NET 8 proporcionado para seguir la ruta de la referencia nula y, después, verifica que la monitorización del contador HatCo.Store ya no termina con una excepción no controlada.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug
Description

I followed the documentation on learn.microsoft.com:

and have trouble to use the dotnet-counters monitor tool in the visual studio package manger console.

I'm getting an Unhandled exception: System.NullReferenceException: Object reference not set to an instance of an object.

PM> dotnet-counters monitor -n ConsoleApp --counters HatCo.Store
dotnet-counters : Unhandled exception: System.NullReferenceException: Object reference not set to an instance of an object.
At line:1 char:1
+ dotnet-counters monitor -n ConsoleApp --counters HatCo.Store
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Unhandled excep...e of an object.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
   at Microsoft.Diagnostics.Tools.Counters.CounterMonitor.Monitor(CancellationToken ct, String counters, Int32 processId, Int32 
refreshInterval, String name, String diagnosticPort, Boolean resumeRuntime, Int32 maxHistograms, Int32 maxTimeSeries, TimeSpan duration, 
Boolean showDeltas, String dsrouter) in /_/src/Tools/dotnet-counters/CounterMonitor.cs:line 200
   at System.CommandLine.Command.<>c__DisplayClass32_0.<<SetAction>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at System.CommandLine.Invocation.InvocationPipeline.InvokeAsync(ParseResult parseResult, CancellationToken cancellationToken)

PM> dotnet-counters --version
9.0.652701+240cb1ce5bc30594c515206764241d7982e384af

I appreciate any help.

Configuration

Start the following source code in .NET 8.0 and run dotnet-counters in Visual Studio 2022 package manager console

using System.Diagnostics.Metrics;
using Microsoft.Extensions.DependencyInjection;

class Program
{
    static void Main(string[] arguments)
    {
        Console.WriteLine("Press any key to exit");

        using ServiceProvider serviceProvider = CreateServiceProvider();

        var hatCoMetrics = serviceProvider.GetRequiredService<HatCoMetrics>();

        Random random = new();
        while (!Console.KeyAvailable)
        {
            // Pretend our store has a transaction, every 100ms, that sells two size 12 red hats, and one size 19 blue hat.
            Thread.Sleep(random.Next() % 5000);
            hatCoMetrics.HatsSold(random.Next() % 6, "red", 12);
            hatCoMetrics.HatsSold(random.Next() % 6, "blue", 19);
        }
    }

    // Setup a new service provider. This example creates the collection explicitly but you might leverage
    // a host or some other application setup code to do this as well.
    private static ServiceProvider CreateServiceProvider()
    {
        ServiceCollection serviceCollection = new();
        serviceCollection.AddMetrics();
        serviceCollection.AddSingleton<HatCoMetrics>();
        return serviceCollection.BuildServiceProvider();
    }
}

public class HatCoMetrics
{
    private readonly Counter<int> _hatsSold;

    public HatCoMetrics(IMeterFactory meterFactory)
    {
        Meter meter = meterFactory.Create("HatCo.Store");
        _hatsSold = meter.CreateCounter<int>("hatco.store.hats_sold");
    }

    public void HatsSold(int quantity, string color, ushort size)
    {
        if (quantity == 0) return;

        _hatsSold.Add(quantity,
            new KeyValuePair<string, object?>("product.color", color),
            new KeyValuePair<string, object?>("product.size", size)
        );
    }
}
Lenguaje dominante
C++
Estrellas
1.3k
Forks
407
Merge medio
21 h 5 min
PR fusionados (30 d)
78

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

  • Sin Dockerfile ni archivo de Docker Compose
  • Sin plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de dotnet/diagnostics

Todos los issues de dotnet/diagnostics

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.