Department of InformatiX
Microsoft .NET Micro Framework Tools & Resources

Ladění je jedna věc, ale pokud narazíte na chyby během nebo dokonce před kompilací, často není vůbec zřejmé, co je špatně. Zde je seznam všech chybových kódu, na které můžete narazit.

Chyby TinyCLR

Assembly parser

Následující chyby mohou nastat během převodu standardní .NET assembly metadata procesorem při vytváření kompaktního PE formátu pro .NET Micro Framework. Vyjma některých nepodporovaných věcí to buď znamená bug v parseru nebo poškozenou .NET assembly.

0x81010001 CLR_E_PARSER_BAD_TEXT_SIGNATURE

  1. A type signature cannot be parsed.

0x81010002 CLR_E_PARSER_BAD_CUSTOM_ATTRIBUTE

  1. Wrong signature for custom attribute data.
  2. Wrong member in custom attribute (attributes can contain properties and fields only).
  3. Custom attribute member value cannot be read.
  4. Custom attribute has invalid format.

0x81010003 CLR_E_PARSER_UNSUPPORTED_MULTIDIM_ARRAY

  1. Vícedimensionální pole .NET Micro Framework nepodporuje, nicméně pole polí ano.
    // Místo: int[,] array = new int[2, 5]; // Zkuste: int[][] array = new int[2][]; array[0] = new int[5]; array[1] = new int[5];
    (malý počet polí je úspornější, takže se toto pořadí vyplatí i v případě, kdy potřebujete [5, 2])

0x81010004 CLR_E_PARSER_UNKNOWN_MEMBER_REF

  1. Unsupported member reference (members can be only fields or methods).

0x81010005 CLR_E_PARSER_MISSING_FIELD
0x81010006 CLR_E_PARSER_MISSING_METHOD
0x81010007 CLR_E_PARSER_MISSING_INTERFACE

  1. A field, method or an interface referenced by given type cannot be found.

0x81010008 CLR_E_PARSER_MISSING_TOKEN

  1. A required token was not found during parsing of the assembly.

0x81010009 CLR_E_PARSER_UNSUPPORTED_GENERICS

  1. .NET Micro Framework nepodporuje generika. Negenerické kolekce najdete v System.Collections.

Chyby .NET Micro Frameworku

Většina z nich vyvolá výjimku za běhu.

0x81000000 CLR_E_UNKNOWN_INSTRUCTION

  1. Neznámá IL instrukce, pravděpodobně zavedená až po napsání interpreteru. Z instrukcí dokumentovaných v CLR 4.0, jsou to pouze rezervované prefix2prefix7 a prefixref.

0x82000000 CLR_E_UNSUPPORTED_INSTRUCTION

  1. Nepodporovaná IL instrukce. Většina nepodporovaných instrukcí souvisí s unsafe kódem nebo generiky: arglist, calli, ckfinite, cpblk, initblk, jmp, localloc, mkrefany, readonly, refanytype, refanyval.
    Podpora pro ldelem a stelem byla přidána v .NET Micro Frameworku 4.4.

0x91000000 CLR_E_STACK_OVERFLOW
0x92000000 CLR_E_STACK_UNDERFLOW

  1. Dosáhnout přetečení zásobníku je relativně snadné neomezenou rekursí (např. metoda nebo vlastnost volající sama sebe).
  2. Podtečení je mnohem vzácnější a obvykle znamená chybu v nativním kódu.

0x95000000 CLR_E_ENTRY_NOT_FOUND

  1. Entrypoint was not found. První co zkusit je zkontrolovat Startup object ve vlastnostech projektu.
  2. Some assembly cannot be resolved. Pokud se jedná o chybu po nahrání na zařízení, zkontrolujte, že všechny assembly mají zaškrnuto Deploy ve správci konfigurací. Zda jsou všechny assembly nahrány do zařízení je také možné sledovat v okně Output. Jedná-li se o chybu před nahráním do zařízení, zkontrolujte, zda jsou všechny reference v pořádku.
  3. Failed to get data for ManifestResource. Zkuste vyčistit nebo překompilovat solution.

0x96000000 CLR_E_ASSM_WRONG_CHECKSUM

  1. An assembly has native calls, but the table with native calls in device does not match the table of the assembly. To se obvykle stává, když nesouhlasí verze firmwaru, a dotčená assembly je uvedena v okně Output. Aktualizace firmwaru v zařízení problém vyřeší (pokud se tedy nesnažíte o nějaké psí kusy).

0x97000000 CLR_E_ASSM_PATCHING_NOT_SUPPORTED

  1. Method patching is not supported. Nezdá se, že by metadata procesor vytvářel assembly, které by generovaly tuto chybu.

0x98000000 CLR_E_SHUTTING_DOWN

  1. Tato chyba se může objevit když se Windows ukončují/restartují během toho, co se čeká na debugger.

0x99000000 CLR_E_SHUTTING_DOWN → System.ObjectDisposedException
0x9A000000 CLR_E_WATCHDOG_TIMEOUT → Microsoft.SPOT.Hardware.WatchdogException
0xA1000000 CLR_E_NULL_REFERENCE → System.NullReferenceException

0xA2000000 CLR_E_WRONG_TYPE

  1. Kontrola typů se provádí za běhu nepřetržitě. Tato chyba je nejspíš způsobena chybou v nativní části.

0xA3000000 CLR_E_TYPE_UNAVAILABLE

  1. Některou z referencí se nepodařilo načíst. Zkontrolujte předchozí zprávy ve výpisu pro tip která assembly chybí a ujistěte se, že je do zařízení nahrána. Můžete také vymazat paměť zařízení pomocí MFDeploy a zkusit nahrát aplikaci znova.

0xA4000000 CLR_E_INVALID_CAST → System.InvalidCastException
0xA5000000 CLR_E_OUT_OF_RANGE → System.ArgumentOutOfRangeException

0xA7000000 CLR_E_SERIALIZATION_VIOLATION
0xA8000000 CLR_E_SERIALIZATION_BADSTREAM

  1. Serialozovaná data nesplňují některé z kritérií na konzistenci.

Jitter

Žádná finální verze .NET Micro Frameworku nikdy neobsahovala jitter (kompilaci za běhu). Stále je ale přítomna v kódu, kdyby chtěl někdo experimentovat (nejspíš by se ale musel kód aktualizovat kvůli novému modelu paměti).

0x80000000 CLR_E_JITTER_OPCODE_UNSUPPORTED

  1. The data type is not valid for given operand.
  2. The data type is not valid for given condition (eg. reference and boxed types are not valid for boolean testing).
  3. The condition operator itself is not valid in the given context.
  4. The data type is not valid for given operation (eg. weak references cannot be used directly, getting address of date and time fields is not supported etc.).
  5. The operation itself is invalid (unknown).
  6. Unsupported array element size (1, 2, 4, 8 and 12 bytes are supported).
  7. Unsupported operator parameter (signature).

0x81000000 CLR_E_JITTER_OPCODE_INVALID_SIGNATURE

  1. Invalid field/method/type/string token signature.

0x82000000 CLR_E_JITTER_OPCODE_INVALID_TOKEN__TYPE
0x83000000 CLR_E_JITTER_OPCODE_INVALID_TOKEN__METHOD
0x84000000 CLR_E_JITTER_OPCODE_INVALID_TOKEN__FIELD

  1. A referenced field, method or type cannot be found.

0x85000000 CLR_E_JITTER_OPCODE_INVALID_OFFSET

  1. Too many branches in a method.
  2. Invalid offset in method's IL.

0x86000000 CLR_E_JITTER_OPCODE_INVALID_EVALUATION_STACK

  1. Corrupted stack during evaluation.

Chyby zavaděče CLR

Chyby 0x80131700 až 0x80131750 jsou rezervovány pro zavaděč .NET Frameworku. Pokud na nějakou z nich narazíte, nejspíš ještě nic z SDK nemělo příležitost cokoliv udělat.

0x80131700 CLR_E_SHIM_RUNTIMELOAD (Failed to load the runtime.)

  1. .NET Micro Framework 4.3 SDK vyžaduje mít na počítači nainstalovaný .NET Framework 2.0. Všem podporovaným verzím Visual Studia stačí mít jen verzi 4.0, takže se ujistěte že máte i starší (cokoliv od 2.0 do 3.5.x by mělo stačit). Od Windows Vista jej můžete nainstalovat prostřednictvím možnosti Zapnout nebo vypnout funkce systému Windows v ovládacích panelech (nejspíš bude potřeba připojení k internetu).

0x80131701 CLR_E_SHIM_RUNTIMEEXPORT (failed to find a required export in the runtime)
0x80131702 CLR_E_SHIM_INSTALLROOT (install root is not defined)
0x80131703 CLR_E_SHIM_INSTALLCOMP (expected component of the runtime is not available)

  1. To vypadá na poškozenou nebo nedokončenou instalaci .NET Frameworku, navrhoval bych minimálně zkusit ho přeinstalovat.

0x80131704 CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND (a runtime has already been bound for legacy activation policy use)
0x80131705 CLR_E_SHIM_SHUTDOWNINPROGRESS (the operation is invalid because the process may be shutting down)

  1. Nejspíš způsobeno kolizí s jiným softwarem. Restart by měl pomoci a pokud ne, bude potřeba zjistit, která aplikace tímto způsobem .NET Framework používá.

Ostatní .NET chyby

Všechny chyby začínající 0x8013 pochází z .NET Frameworku. Ty se dále dělí na:

0x801310yy Execution Engine
0x801311yy metadata, TypeLib export, CLDB
0x801312yy validace metadat
0x801313yy debugger a profiler
0x801314yy zabezpečení
0x801315yy BCL
0x801316000x8013161F Reflection
0x801316200x8013163F System.IO
0x801316400x8013165F Security
0x801316600x801316FF BCL
0x801317yy zavaděč
0x801318yy IL verifikace
0x801319yy .NET Framework
0x80131Ayy .NET Framework
0x80131Byy validace metadat
0x80131Cyy debugger
0x80131Dyy validace PE formátu
0x80131Eyy optimalizace
0x80131Fyy Ngen
0x801330yy VSA

Detailní výčet těchto chyb je rozepsán na blogu Yi Zhanga. Chyby, na které narazili uživatelé .NET Micro Frameworku:

0x8013110E CLDB_E_FILE_CORRUPT (Record is emitted out of order.)

  1. Špatný formát souboru - v .NET světě reprezentováno výjimkou BadImageFormatException. Pokud jste assembly negenerovali sami nějakým nestandardním způsobem, první na seznamu bývá zkontrolovat správnost platformy (x86/x64/ARM). Obdobně to platí pro .NET Micro Framework - pokud voláte metadata procesor sami, ujistěte se, že jste mu sdělili, jaké pořadí bajtů používáte (přepínač /le resp. /be).

Nativní XML reader

Pro úplnost seznam chyb z nativního XML readeru. Za běhu by se tyto chyby měly proměnit v System.Xml.XmlException.

0xD0000000 XML_S_RETURN_TO_MANAGED_CODE
0xD1000000 XML_E_NEED_MORE_DATA
0xD2000000 XML_E_ERROR
0xD3000000 XML_E_UNEXPECTED_EOF
0xD4000000 XML_E_BAD_NAME_CHAR
0xD5000000 XML_E_UNKNOWN_ENCODING
0xD6000000 XML_E_UNEXPECTED_TOKEN
0xD7000000 XML_E_TAG_MISMATCH
0xD8000000 XML_E_UNEXPECTED_END_TAG
0xD9000000 XML_E_BAD_ATTRIBUTE_CHAR
0xDA000000 XML_E_MULTIPLE_ROOTS
0xDB000000 XML_E_INVALID_ROOT_DATA
0xDC000000 XML_E_XML_DECL_NOT_FIRST
0xDD000000 XML_E_INVALID_XML_DECL
0xDE000000 XML_E_INVALID_XML_SPACE
0xDF000000 XML_E_DUP_ATTRIBUTE_NAME
0xE0000000 XML_E_INVALID_CHARACTER
0xE1000000 XML_E_CDATA_END_IN_TEXT
0xE2000000 XML_E_INVALID_COMMENT_CHARS
0xE3000000 XML_E_LIMIT_EXCEEDED
0xE4000000 XML_E_BAD_OR_UNSUPPORTED_ENTITY
0xE5000000 XML_E_UNDECLARED_NAMESPACE
0xE6000000 XML_E_INVALID_XML_PREFIX_MAPPING
0xE7000000 XML_E_NAMESPACE_DECL_XML_XMLNS
0xE8000000 XML_E_INVALID_PI_NAME
0xE9000000 XML_E_DTD_IS_PROHIBITED
0xEA000000 XML_E_EMPTY_NAME
0xEB000000 XML_E_INVALID_NODE_TYPE
0xEC000000 XML_E_ELEMENT_NOT_FOUND

Setkali jste se s chybou, která zde není uvedena? Dejte mi vědět buď v komentářích nebo e-mailem a já ji přidám na seznam. Také doporučují shlédnout CLR header file pro případ, že bude uvedena tam.

Comments
Sign in using Live ID to be able to post comments.