Pereiti prie turinio

C# kintamasis pasikeičia


Rekomenduojami pranešimai

Vykdant programą kintamajam priskiriama reikšmė, o toliau kode kai jis kviečiamas patampa null. Niekur neatkasu. kodėl jis null patampa, pakeičiau kintamaji į property, uždėjau setteri ir breakpointa ant jo, bet niekas neateina, stebuklingai null pasidaro ir viskas. Kokių dar būdų yra pažiurėti kas pakeičiau kintamjaį?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dėlioji println'us su tuo kintamuoju tol, kol surandi, po kurios kodo eilutės pasikeičia reikšmė.

 

Jei reikšmė pasikeičia kokiam cikle, tai galima uždėti break point'ą su sąlyga, kad break point'as suveiktų tik tada, kai kintamasis būna null.

 

Na toks metodas netinka, nes projektas labai didelis, naudoja daug paveldinčių klasių iš kitų .dll ir be to naudajamas MVC patternas, kur tas mano kintamsis yra pribindintas prie įvairių controlsų.

 

https://msdn.microsoft.com/en-us/library/0taedcee.aspx geriausia būtų, jei kodo fragmentą įdėtum...

 

Na peržiūrėjau aš visas debugginimo galimybes, bet kas padėtų išspręsti man šią problemą neradau. Ieškojau kažko panašaus į "New Data Breakpoint", kur į kintamąjį gali įdėti stebimo kintamajo adresą ir tada matyt kada jis pakeičiamas, bet čia tokia galimybė tik ant C++ yra

Redagavo babunas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na toks metodas netinka, nes projektas labai didelis, naudoja daug paveldinčių klasių iš kitų .dll ir be to naudajamas MVC patternas, kur tas mano kintamsis yra pribindintas prie įvairių controlsų.

 

Jeigu tas kintamasis nustatytas kaip privatus (t.y. tiesiogiai neprieinamas iš išorės), tai yra dvi galimybės:

  1. Arba kažkuris iš klasėje esančių metodų jį sugadina. Tokiu atveju stebi visus klasės metodus ir žiūri, kokia kintamojo reikšmė prieš pradedant vykdyti metodą ir kokia baigus;
  2. Arba objektas, kuris sukuriamas pradžioje ir turi tinkamą kintamojo reikšmę, kodo vykdymo eigoje yra pakeičiamas kitu objektu, kuris nėra tinkama inicializuotas (t. y. tu manai, kad pradžioje ir pabaigoje turi tą patį objektą, tik sugedo kintamasis, o iš tikro objektas visai kitas). Tokiu atveju stebi klases, kurios naudoja tą objektą su kintamuoju, ir žiūri, po kokių veiksmų kintamasis tampa sugadintas;

Bet kokiu atveju, dedi breakpoint'us (x) ir (y) kokio nors kodo gabalo pradžioj ir pabaigoj. Jeigu matai, kad būtent tarp šitų dviejų breakpoint'ų kintamasis sugenda, dedi papildomą breakpoint'ą (z) daugmaž vidury tarp prieš tai buvusių. Jei taške (z) kintamasis geras, tai reiškia viską sugadina kodo gabalas tarp (z) ir (y). Kitu atveju kaltas kodo gabalas tarp (x) ir (z). Va taip kodo gabalą, kuriame reikia ieškoti problemos, sumažinai per pus. Kartoji, kol randi blogą vietą.

Redagavo wi_lius
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...