PDA

View Full Version : [C#/VS2010] Come trovare i simboli


sottovento
08-06-2011, 12:16
Carissimi
ho un'applicazione c# che scrive un crash dump in caso si verifichino condizioni "strane" che necessitano una adeguata sessione di debug.
Una volta scritto il dump, l'esecuzione prosegue normalmente, cosicche' la produzione possa continuare e lo sviluppatore possa usare il dmp per fare le operazioni di debug e capire cos'e' andato storto su una macchina off-line.

Non riesco a trovare i simboli.

Ho sempre effettuato operazioni di questo genere con codice unmanaged e Visual Studio .NET e 2005, ma ora non riesco a vedere nulla con codice managed e VS2010

Ho provato anche con WinDbg e non va nulla lo stesso. Non si trovano i simboli

Suggerimenti?

sottovento
08-06-2011, 13:47
NOTA - ho provato a scrivere una piccola applicazione di test e succede lo stesso. Qui il codice:


namespace TestMiniDump
{
public class DebugHelpDll
{
[DllImport("dbghelp.dll")]
public static extern bool MiniDumpWriteDump(IntPtr hProcess, Int32 ProcessId, IntPtr hFile, int DumpType,
IntPtr ExceptionParam, IntPtr UserStreamParam, IntPtr CallStackParam);
}

class TestDump
{
static bool dumpForDebug(string filename)
{
FileStream fs = null;
Process proc = Process.GetCurrentProcess();
try
{
fs = new FileStream(filename, FileMode.Create);
bool res = DebugHelpDll.MiniDumpWriteDump(proc.Handle, proc.Id, fs.SafeFileHandle.DangerousGetHandle(), (int)MINIDUMP_TYPE.MiniDumpWithFullMemory, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
fs.Close();
return res;
}
catch (Exception)
{
try
{
if (fs != null) fs.Close();
}
catch (Exception) { }
return false;
}
}

static void test1()
{
test2();
}

static void test2()
{
test3();
}

static void test3()
{
bool res = dumpForDebug("test1.dmp");
if (res)
Trace.WriteLine("DUMP OK");
else
Trace.WriteLine("ERROR DUMPING");
}

static void Main(string[] args)
{
Trace.WriteLine("Try creating a dump..\n");
test1();
}
}
}


Altra informazione: se eseguo l'applicazione dal debugger e seleziono Debug->Save Dump As... il dump ha la stessa dimensione di quello creato dall'applicazione. Tuttavia, tale dump e' facilmente apribile da VS2010 (basta cliccarci su) ed e' possibile esaminare il call stack, program counter, variabili e tutto il resto.

Qualche idea? Devo creare un altro tipo di minidump? Eppure le dimensioni sono identiche (o quasi, non ho controllato fino al byte)...

giangian2
08-06-2011, 14:09
ciao,
se dalle opzioni del progetto -> Debug togli il flag "Enable the Visual Studio hosting process" dovrebbe funzionare.

Marco

tomminno
08-06-2011, 14:27
Ma ha un senso il dump nativo di un applicativo managed?
Suppongo che tu abbia bisogno dei pdb del framework .Net per vedere qualche informazione.

sottovento
08-06-2011, 14:37
Ma ha un senso il dump nativo di un applicativo managed?
Suppongo che tu abbia bisogno dei pdb del framework .Net per vedere qualche informazione.


Si, ha senso purche' sia fatto il dump "MiniDumpWithFullMemory". Si deve usare SOS, mette a disposizione dei comandi per i programmi managed.

@giangian2: ci provo subito. Suona un po' strano ma da quando uso VS2010 mi sono abituato alle stranezze :D

giangian2
08-06-2011, 14:41
Ma ha un senso il dump nativo di un applicativo managed?
Suppongo che tu abbia bisogno dei pdb del framework .Net per vedere qualche informazione.

I PDB del framework li puoi scaricare (compreso i sorgenti) da qui (http://referencesource.microsoft.com/Default.aspx), oppure puoi impostare in visual studio il server remoto dei simboli.


@giangian2: ci provo subito. Suona un po' strano ma da quando uso VS2010 mi sono abituato alle stranezze
so che sembra strano ma da me ha funzionato... l'hosting process di Visual Studio non è la prima volta che mi crea problemi.

sottovento
08-06-2011, 14:45
ciao,
se dalle opzioni del progetto -> Debug togli il flag "Enable the Visual Studio hosting process" dovrebbe funzionare.

Marco

Wow! Funziona! Riesco ad aprire il crash dump correttamente sotto Visual Studio. Sfortunatamente non riesco ancora sotto Windbg, ed immagino che il problema sia ancora legato alla sua configurazione.....

E' un ottimo risultato. Vorrei cmq riuscire anche ad aprirlo sotto windbg... hai qualche idea?

Grazie mille :D

giangian2
09-06-2011, 08:01
E' un ottimo risultato. Vorrei cmq riuscire anche ad aprirlo sotto windbg... hai qualche idea?


mi spiace, ma windbg non lo so usare molto. :(