Od czego zależy czy mogę zedytować kod w locie

0

Rozważmy taki kod:

[*] = breakpoint

	public static void XD(int a)
[*]	{
		if (a == 2021)
		{
			Console.WriteLine("a");
		}
		else
		{
			Console.WriteLine("b");
		}
	}

Będąc na breakpoincie zmieniamy "2021" na "2020",
następnie do 1 brancha ifa dodajemy Console.WriteLine("a2");,
a do drugiego dodajemy Console.WriteLine("b2");

puszczamy kod i działa, ale nie każda taka zmiana przechodzi,
niektóre zmiany raz działają, a raz nie (tak mi się wydaje) - od czego to zależy?

Ostatnio nawet udało mi się takie coś:

public void CallBazka(string a, string b)
{
	var sql = "SELECT * FRON XD WHERE a = {a} AND b = {b}";
	
	try
	{
		Console.WriteLine(bazka.First(sql));
	}
	catch (Exception ex)
[*]	{
	
	}
}

W SQL miałem literówkę i wywaliło wyjątek gdzie miałem breakpointa,
zedytowałem SQL i dodałem w catchu wywołanie tej samej funkcji z tymi samymi argumentami

CallBazka(a,b) i funkcja wykonała się ponownie, z poprawionym SQL - w ciężkim szoku byłem że to przeszło, a po wykonaniu jeszcze chyba nawet usunąłem później tego świeżo dodanego Calla, ale już nie pamiętam.

Nie zawsze takie "duże" zmiany przechodzą, VS powie Ci abyś zresetował program lub wycofał zmiany, ale od czego to zależy?

0

@lion137:

Z tego co widzę to internet mówi że się da i jak, a nie na ile można sobie pozwolić i jakie są ograniczenia

1

Ja tak tylko dodam, bo to fajnie widać w dokumentacji, ale mało kto zwraca uwagę:

Edit and Continue is not available in the following debugging scenarios:
...
Debugging an application using attach to process (Debug > Attach to Process) instead of running the application by choosing Start from the Debug menu.

To dlatego, że uruchomienie programu zbudowanego w trybie debug z debuggerem (przez F5) a bez debuggera (CTRL+F5) to dwie kompletnie różne sprawy. Przez to są tak jakby 3 poziomy debugowania (debug + F5, debug + CTRL+F5, release).

1 użytkowników online, w tym zalogowanych: 0, gości: 1