Hiba: A célfolyamat "kód" kóddal lépett ki a függvény kiértékelése közben

Teljes üzenetszöveg: A célfolyamat [code] kóddal lépett ki a 'function' függvény értékelése közben.

A .NET-objektumok állapotának könnyebb vizsgálata érdekében a hibakereső automatikusan kényszeríti a hibakeresési folyamatot más kódok (jellemzően tulajdonság getter metódusok és ToString függvények) futtatására. A legtöbb esetben ezek a függvények sikeresen befejeződnek, vagy kivételeket vetnek ki, amelyeket a hibakereső elkaphat. Vannak azonban olyan körülmények, amikor a kivételek nem ragadhatók meg, mert átlépik a kernel határait, felhasználói üzenetek pumpálását igénylik, vagy helyreállíthatatlanok. Ennek eredményeképpen egy tulajdonságbeolvasó vagy ToString metódus, amely olyan kódot hajt végre, amely explicit módon leállítja a folyamatot (például hívást ExitProcess()), vagy kezeletlen kivételt okoz, amelyet nem lehet elkapni (például StackOverflowException), leállítja a hibakeresési folyamatot és befejezi a hibakeresési munkamenetet. Ha ez a hibaüzenet jelenik meg, ez történt.

A probléma egyik gyakori oka, hogy amikor a hibakereső kiértékel egy önmagát hívó tulajdonságot, az verem túlcsordulási kivételt eredményezhet. A verem túlcsordulásának hiba nem állítható helyre, és a célfolyamat leáll.

A hiba kijavítása

Erre a problémára két lehetséges megoldás létezik.

1. megoldás: A hibakereső megakadályozása abban, hogy meghívja a getter metódust vagy a ToString metódust

A hibaüzenet annak a függvénynek a nevét jeleníti meg, amelyet a hibakereső megpróbált meghívni. A függvény nevével megpróbálhatja újraértékelni a függvényt az Azonnali ablakból a kiértékelés hibakereséséhez. A hibakeresés az Azonnali ablakból történő kiértékeléskor lehetséges, mert az Automatikus/Helyi/Figyelő ablak implicit kiértékeléseitől eltérően a hibakereső megszakítja a nem kezelt kivételeket.

Ha módosíthatja ezt a függvényt, megakadályozhatja, hogy a hibakereső meghívja a tulajdonságválasztót vagy ToString a metódust. Próbálkozzon az alábbiak egyikével:

  • Módosítsa a metódust más típusú kódra a tulajdonságbeolvasón vagy a ToString metóduson kívül, és a probléma megoldódott.

    -vagy-

  • (For ToString) Adjon meg egy DebuggerDisplay attribútumot a típuson, és a hibakereső más értéket értékelhet ki, mint ToStringa .

    -vagy-

  • (A tulajdonságbeolvasó esetén) Helyezze az [System.Diagnostics.DebuggerBrowsable(DebuggerBrowsableState.Never)] attribútumot a tulajdonságra. Ez akkor lehet hasznos, ha olyan metódussal rendelkezik, amely API-kompatibilitási okokból továbbra is tulajdonság marad, de valójában egy metódusnak kell lennie.

Ha nem tudja módosítani ezt a módszert, lehetséges, hogy egy másik utasítással megszakítja a célfolyamatot, és újrapróbálkozik a kiértékeléssel.

2. megoldás: Az összes implicit értékelés letiltása

Ha az előző megoldások nem oldják meg a problémát, letilthatja a tulajdonságértékelés engedélyezése funkciót.

Nyissa meg az Eszközök>beállításai panelt, és bontsa ki a Minden beállítás>hibakeresése általános szakaszt>. Törölje a jelet a Tulajdonságértékelés engedélyezése és más implicit függvényhívások jelölőnégyzetből.

Nyissa meg az Eszközök>beállításai párbeszédpanelt, és bontsa ki azÁltalános>. Törölje a Tulajdonságértékelés engedélyezése és más implicit függvényhívások jelölőnégyzet jelölését.

Ez a módosítás letiltja a legtöbb implicit függvény kiértékelését, és meg kell oldania a problémát.