2015-12-01 12 views
5

Quindi ho ricevuto una traccia dello stack dall'applicazione Windows UWP in modalità di rilascio. Ora ho tradotto tutti gli indirizzi con i loro nomi di metodo usando windbg.Procedura per diagnosticare la traccia di stack UWP tradotta

ora ho questo output:

System.InvalidOperationException: InvalidOperation_EnumFailedVersion. For 

more information, visit http://go.microsoft.com/fwlink/?LinkId=623485 
at MyApp!<BaseAddress>+0x7710b7 
    - MyApp!System::Func$4<System::__Canon,System::__Canon,System::__Canon,System::__Canon>.BeginInvoke+0x27 
    | (00b710c0) MyApp!System::Func$4<System::__Canon,System::__Canon,System::__Canon,System::__Canon>.Invoke 
at MyApp!<BaseAddress>+0x771125 
    - MyApp!System::Func$3<System::__Canon,System::Int32,System::__Canon>.GetThunk+0x45 
     | (00b71130) MyApp!System::Func$3<System::__Canon,System::Int32,System::__Canon>.ReverseInvokeImpl 
at MyApp!<BaseAddress>+0x7710d5 
    - MyApp!System::Func$4<System::__Canon,System::__Canon,System::__Canon,System::__Canon>.Invoke+0x15 
     | (00b710e0) MyApp!System::Func$3<System::__Canon,System::Int32,System::__Canon>.GetThunk 
at MyApp!<BaseAddress>+0x85d8c9 
    - MyApp!$58_System::Net::Http::HttpContent::<>c__DisplayClass0.<ReadAsStringAsync>b__1$catch$0+0x16 
     | (00c5d8f2) MyApp!$58_System::Net::Http::HttpContent::<>c__DisplayClass0.<ReadAsStringAsync>b__1$catch$1 
at MyApp.Collections.ViewModelCollection.<PrependListOfViewModelsAsync>b__24_1(ViewModels.ViewModel nt) 
at MyApp!<BaseAddress>+0x784241 
    - MyApp!$45_System::Collections::Generic::Dictionary$2<$76_Microsoft::CSharp::RuntimeBinder::Syntax::OperatorKind,System::__Canon>.Remove+0x81 
     | (00b84310) MyApp!$45_System::Collections::Generic::Dictionary$2<$76_Microsoft::CSharp::RuntimeBinder::Syntax::OperatorKind,System::__Canon>.Resize 
at MyApp!<BaseAddress>+0x786623 
    - MyApp!$45_System::Collections::Generic::Dictionary$2<$54_Newtonsoft::Json::Serialization::DefaultSerializationBinder::TypeNameKey,System::__Canon>.Remove+0x3 
     | (00b86790) MyApp!$45_System::Collections::Generic::Dictionary$2<$54_Newtonsoft::Json::Serialization::DefaultSerializationBinder::TypeNameKey,System::__Canon>.Resize 
at MyApp!<BaseAddress>+0x7e41af 
    - MyApp!$62_System::Linq::Expressions::ConditionalExpression.Make+0x3f 
     | (00be4250) MyApp!$47_Internal::Reflection::Execution::FoundationTypesImplementation.get_SystemObject 
at System.Collections.Generic.List<System.Object>..ctor(Collections.Generic.IEnumerable<System.Object> collection) 
at MyApp.Collections.ViewModelCollection.<>c__DisplayClass24_0.<PrependListOfViewModelsAsync>b__0() 
at System.Action.Invoke() 
at MyApp!<BaseAddress>+0xcbb04f 
    - MyApp!$121_Type23.ReadArrayOfUrlEntityFromXml+0x1cf 
     | (010bb1a0) MyApp!$121_Type16.ReadArrayOfMediaFromXmlIsGetOnly 
at MyApp!<BaseAddress>+0xdb9c41 --- End of stack trace from previous location where exception was thrown --- 
    - MyApp!$70_System::Xml::XmlConvert.CreateException+0xe1 
     | (011b9d60) MyApp!$70_System::SR.get_Xml_InvalidSurrogateHighChar 
at MyApp!<BaseAddress>+0x819f65 
    - MyApp!$62_System::Linq::Expressions::Interpreter::LightCompiler.CompileNewExpression+0x55 
     | (00c1a190) MyApp!$62_System::Linq::Expressions::Interpreter::InstructionList.EmitNew 
at MyApp!<BaseAddress>+0x81a319 
    - MyApp!$62_System::Linq::Expressions::Interpreter::LightCompiler.CompileMemberInit+0xb9 
     | (00c1a618) MyApp!$62_System::Linq::Expressions::Interpreter::LightCompiler.CompileMemberInit$fin$0 
at MyApp!<BaseAddress>+0x9e9843 --- End of stack trace from previous location where exception was thrown --- 
    - MyApp!_$ILCT$::$ILT$ReflectionDynamicInvoke$.InvokeRetVI<$61_Windows.Foundation.Rect>+0x63 
     | (00de9850) MyApp!$122_Microsoft::Graphics::Canvas::Effects::AtlasEffect.put_SourceRectangle 
at MyApp!<BaseAddress>+0x819f65 
     - MyApp!$62_System::Linq::Expressions::Interpreter::LightCompiler.CompileNewExpression+0x55 
      | (00c1a190) MyApp!$62_System::Linq::Expressions::Interpreter::InstructionList.EmitNew 
at MyApp!<BaseAddress>+0x81a319 
    - MyApp!$62_System::Linq::Expressions::Interpreter::LightCompiler.CompileMemberInit+0xb9 
     | (00c1a618) MyApp!$62_System::Linq::Expressions::Interpreter::LightCompiler.CompileMemberInit$fin$0 
at MyApp!<BaseAddress>+0x9f0481 --- End of stack trace from previous location where exception was thrown --- 
    - MyApp!$122_McgInterop::ForwardComSharedStubs.Func_Microsoft_Graphics_Canvas_CanvasDrawingSession__Numerics_Vector2__float__rg_Microsoft_Graphics_Canvas_Text_CanvasGlyph__bool__uint___Rect__+0x1b1 
     | (00df04f1) MyApp!$122_McgInterop::ForwardComSharedStubs.Func_Microsoft_Graphics_Canvas_CanvasDrawingSession__Numerics_Vector2__float__rg_Microsoft_Graphics_Canvas_Text_CanvasGlyph__bool__uint___Rect__$fin$0 
at MyApp!<BaseAddress>+0x819f65 
    - MyApp!$62_System::Linq::Expressions::Interpreter::LightCompiler.CompileNewExpression+0x55 
    | (00c1a190) MyApp!$62_System::Linq::Expressions::Interpreter::InstructionList.EmitNew 
at MyApp!<BaseAddress>+0x81a17f 
    - MyApp!$62_System::Linq::Expressions::Interpreter::LightCompiler.CompileNewExpression+0x26f 
     | (00c1a190) MyApp!$62_System::Linq::Expressions::Interpreter::InstructionList.EmitNew 
at MyApp!<BaseAddress>+0x8dc247 Stack: InvalidOperation_EnumFailedVersion. For more information, visit http://go.microsoft.com/fwlink/?LinkId=623485 
    - MyApp!$78_System::Runtime::Serialization::CollectionDataContract.IsCollectionOrTryCreate+0x2f7 
     | (00cdc720) MyApp!$78_System::Runtime::Serialization::CollectionDataContract..ctor 

Qual è il metodo consigliato per avvicinarsi a questo stack trace tradotto per identificare il nome del metodo offendere o almeno restringere il campo?

+0

Hey Brad, io lavoro sul runtime e compilatore squadra nativa .NET. Stiamo lavorando su alcuni strumenti per aiutare con scenari come questo ma vorremmo il tuo feedback. Potete inviarci una mail a [email protected]? Possiamo postare qui quando avremo raggiunto lo stipendio. :-) –

+0

Hai trovato una soluzione? – Felix

risposta

4

Ecco un aggiornamento nel caso in cui qualcun altro si imbattesse in questo problema.

PDBS e Pile nel .NET nativo

.NET PDBs nativi sono diversi rispetto ai PDB si potrebbe aspettare. Assicurati di salvare quelli corretti! Come parte della compilazione dell'applicazione al codice nativo, abbiamo bisogno di generare un nuovo file PDB che abbia tutti i mapping appropriati alla tua fonte. Se non si salva il PDB corretto, si avranno stack/dump completamente non utilizzabili. Non c'è modo di rigenerare questo file se lo perdi.

Per dev locale costruisce o la vostra build server che vivrà a percorsi come:

<projectRoot>\bin\<Architecture>\<Release|Debug>\ilc\YOURAPPLICATIONNAME.pdb 

Saprete che è quella giusta perché sarà gigantesco (50 + MB). Dopo aver effettuato il caricamento nello Store, puoi ottenere il tuo pdb compilato in cloud dal centro Dev.

NET stack nativi non sono leggibili

In uno sforzo per essere al massimo magra, il processo di compilazione nativa .NET estrae metadati che permetterebbe il runtime di generare pile leggibili. Oggi sembrano qualcosa di simile: la funzionalità

at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
    at SharedLibrary!<BaseAddress>+0x35d1d7 
    at SharedLibrary!<BaseAddress>+0x35d10d 
    at SharedLibrary!<BaseAddress>+0x35d0dd 
    at FieldMedic!<BaseAddress>+0x13dec5 [2147500037] 

Se si utilizza HockeyApp per la telemetria, hanno aggiunto di ricostruire pile di essere più utile. Vedi our blog post.

Tuttavia, sembra che tu non stia utilizzando HockeyApp per la telemetria di questo genere di cose. Supponendo che sia il caso, è necessario utilizzare StackParser. Clona quel repository, costruisci e via vai.

Ecco l'aiuto per darvi un'idea di ciò che avrete a che fare con:

StackParser [/pdbs {pdbFiles}] [/modules {PE files}] 
      [/keep] [/in inputFile] [/out outputfile] [/symsrv definition] 

All arguments are optional, but at least one pdb file or one PE file need to be defined. 

    /pdb {pdbFiles}  A non empty list of pdb files to be used 
    /modules {PE files} A non empty list of loaded modules used. 
          Symbols are fetched from the symbol store. 
    /keep     Keep the pdb files. 
          (default: all downloaded symbol files are deleted). 
    /in <file>   Input to operate on (default: stdin). 
    /out <file>   Append output to file (default: stdout). 
    /symsrv <definition> "Standard"definition for symbol server cache. 
          (Implies /keep). 

    Examples: 
StackParser /pdbs app.pdb SharedLibrary.pdb < log.txt 
    Uses existing PDB files to convert log.txt and writes result to console. 

StackParser /pdbs app.pdb /modules Lib.dll /in log.txt /out symlog.txt 
    Uses existing PDB (app.pdb) and looks up pdb file for Lib.dll; 
    reads input from log.txt and writes result to symlog.txt. 

StackParser /modules foo.dll /in log.txt /symserver srv*c:\symbols*http://msdl.microsoft.com/download/symbols 
    Converts log.txt by getting symbols from public symbol server 
    (with local cache at c:\symbols). 
0

ho avuto molteplici crash in Windows Dev Center con tracce dello stack non utile. Con la punta di Matt Whilden ho usato StackParser. Ma è stato un dolore simboleggiare manualmente tutti gli arresti. Così ho scritto un'applicazione che può simboleggiare le tracce dello stack .tsv scaricate dal Dev Center e può anche utilizzare l'API di Windows Dev Center per simbolizzare i crash in modo completamente automatico.

Ecco un link al Github nel caso in cui qualcuno è interessato a questo: https://github.com/hig-dev/WindowsDevCenterStacktraceSymbolicater

Problemi correlati