Debugování   otázka

C#, Visual Studio, Threading

1)

Jak se ve Visual C# express ladí vícevláknové programy? Když mám několik vláken, které mi jedou současně, tak se mi při ladění dost často stávalo, že to chvíli trasovalo, ale při přechodu na další řádek to najednou vyskočí z toho vlákna.

2)

Jak ladit aplikaci, kde mám několik instancí jedné třídy, a chci ladit jen jednu z nich.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Následující informace jsou platné pouze pro Visual Studio 2008 Standard nebo lepší, v Express verzích jsem nezkoušel (ale je možné že to tam půjde také).

1) Základ je popisně pojmenovávat všechna vlákna. Vlákno pojmenujete pomocí vlastnosti Name. Potom v metodě vlákna někam vložte Breakpoint, v levé části okna klepněte pravým tlačítkem myši na jeho symbol (červené kolečko) a vyberte Filter. Sem napiště podmínku ThreadName = "název", kde název je název pojmenovaného vlákna, které chcete sledovat. Po potvrzení máte zajištěno, že se debugger na tomto Breakpointu zastaví vždy jen ve vámi zvoleném vlákně.

2) To nejde a bylo by to i zbytečné.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

ad 1) U toho breakpointu je v kontextovém menu pouze "delete" a "disable". Je to tím, že mám Express verzi?

ad 2) Proč by to bylo zbytečné? Můj příklad: Mám stroj který má dvě části, které jsou stejné. Proto mám jednu třídu a dvě instance. Ovšem do každé instance jsou jiné vstupní proměnné a jiné výstupní proměnné, které z ní jdou dále. A tak když mi jedna část stroje funguje a druhá moc dobře ne, potřeboval bych se podívat právě do té druhé instance, jaké jsou konkrétní veličiny, se kterými pracuje. Jde to?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

ad 2) Je třeba si uvědomit, že debugger pracuje s řádky kódu. Kod ovšem obě instance třídy sdílejí. Je tedy nutné udělat podmíněný breakpoint, který se bude chytat jen na jednu instanci. Jestli to Express edice umí, to si nejsem jistý, dělá se to tak, že uděláte z řádku normální breakpoint a pak nalevo od kódu je takový hnědý puntík, na který když kliknete pravým tlačítkem, mělo by tam být něco jako Condition atd.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

No tak dejte breakpoint do té instance (např. do vytvoření nové instance, do nastavení vlastnosti té instance atd.) a ne přímo do třídy.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback