2012-01-12 6 views
8

Mi piacerebbe sapere come il CLR individua i file di simboli pdb e se questo comportamento può essere sovrascritto.Come CLR individua i file di simboli pdb

Ho cercato online (MSDN e altre risorse) ma non ho trovato una buona risposta.

Nella mia app, ho DLL collocate in diverse sottodirectory del percorso .EXE principale.

Mi piacerebbe avere una cartella \ Simboli che conterrà tutti i simboli per la mia applicazione. Per impostazione predefinita, credo che i simboli vengano prelevati da dove si trova l'assieme. Questo può essere cambiato?

+0

Quando si verifica un'eccezione gestito, viene creato un oggetto di eccezione e quando i simboli sono disponibili, esso contiene una traccia dello stack con informazioni sul file (file di origine: numero di riga). Credo che il CLR (o chiunque aggiunga la traccia dello stack all'eccezione interroghi questi file). –

+0

BTW il CLR può chiamare in un altro codice (Win32), quindi è parzialmente vero che di per sé potrebbe non sapere nulla sui file PDB. –

risposta

2

Si potrebbe semplicemente impostare la variabile di ambiente _NT_SYMBOL_PATH per il proprio processo. Questo ha funzionato bene:

using System; 
using System.Runtime.CompilerServices; 
using System.Reflection; 
using System.IO; 

class Program { 
    static void Main(string[] args) { 
     var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 
     path = Path.Combine(path, "symbols"); 
     Environment.SetEnvironmentVariable("_NT_SYMBOL_PATH", path); 
     try { 
      Kaboom(); 
     } 
     catch (Exception ex) { 
      Console.WriteLine(ex.ToString()); 
     } 
     Console.ReadLine(); 
    } 
    [MethodImpl(MethodImplOptions.NoInlining)] 
    static void Kaboom() { 
     throw new Exception("test"); 
    } 
} 
+0

Questo non sembra funzionare per me. Funzionerà solo durante il debug o anche quando distribuisco la mia applicazione altrove? –

+0

Ho provato questo senza un debugger ed eseguendo la build Release. Per questo non vedo una buona modalità di errore, a parte il fatto di non inserire il file .pdbs nella sottodirectory di destra, ovviamente. –

+0

Sto eseguendo un build DEBUG, non sono sicuro se ciò sia importante o meno. Impostazione della variabile di ambiente all'inizio dell'inizializzazione della mia app. Ho inserito tutti i simboli nella cartella corretta, tuttavia non sembra averlo raccolto da lì. –