gpt4 book ai didi

c# - 诊断已翻译 UWP 堆栈跟踪的步骤

转载 作者:可可西里 更新时间:2023-11-01 13:31:42 37 4
gpt4 key购买 nike

所以我在 Release模式下收到了来 self 的 UWP Windows 应用程序的堆栈跟踪。我现在已经使用 windbg 将所有地址翻译成它们的方法名称。

我现在有这个输出:

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

处理此翻译后的堆栈跟踪以识别有问题的方法名称或至少缩小范围的推荐方法是什么?

最佳答案

这是一个更新,以防其他人遇到此问题。

.NET Native 中的 Pdb 和堆栈

.NET Native PDB 与您可能期望的 PDB 不同。确保保存正确的!作为将您的应用程序编译为 native 代码的一部分,我们需要生成一个新的 PDB 文件,其中包含所有正确的映射回您的源代码。如果您不保存正确的 PDB,您将拥有完全不可操作的堆栈/转储。如果丢失此文件,则无法重新生成它。

对于本地开发构建或您的构建服务器,它将位于如下路径:

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

您会知道它是正确的,因为它会非常大 (50+MB)。上传到商店后,您可以从开发中心获取云编译的 pdb。

.NET Native 堆栈不是人类可读的

为了最大限度地精简,.NET Native 编译过程去除了允许运行时生成人类可读堆栈的元数据。今天他们看起来像:

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

如果您使用 HockeyApp 进行遥测,它们已经添加了重建堆栈的功能以使其更有用。参见 our blog post .

但是,听起来您并没有使用 HockeyApp 进行此类遥测。假设是这种情况,您需要使用 StackParser .克隆那个 repo,构建,然后就可以了。

以下帮助可让您了解将要处理的内容:

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).

关于c# - 诊断已翻译 UWP 堆栈跟踪的步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34019714/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com