Wpis z mikrobloga

W zasadzie - czy jest coś takiego, żeby śledzić w kodzie zmienną, która byłaby wypisywana na standardowym wyjściu ALE:
- bez potrzeby jej ręcznego printowania
- bez przerywania wykonywania programu
Chodzi o taki "breakpoint", który breakpointem w zasadzie nie jest.
Nie pytam o konkretny język, chociaż jeśli ktoś konkretnie wie coś w temacie biorąc pod uwagę jako język docelowy LUA i VSCode jako IDE to będę wdzięczny.

#programowanie #pytanie #informatyka #lua
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@walokid: jeśli zmienna nie jest volatile to nie musi zadziałać, bo kompilator może ją trzymać w rejestrze i drugi wątek nie będzie widział wszystkich zmian.

Pytanie tylko po co chcesz to robić - do debugowania to debuggery mają taką funkcję jak podgląd pamięci czy tzw. data breakpoint - program zatrzyma się jeśli dana wartość ulegnie zmianie.
  • Odpowiedz
@walokid: to jest stary artykuł odnoszący się do działania volatile w C. Miałem bardziej na myśli volatile o takiej semantyce jak w Javie, gdzie jak najbardziej ma ono sens i jest używane w programowaniu wielowątkowym. Co do tego że kompilator sam ogarnie sprawę to już raczysz żartować. Kompilatory większości języków nie rozumieją wątków. Nawet Rust który rozumie kwestie wątków co najwyżej zabroni Ci dostępu i sam będziesz musiał go poprawnie
  • Odpowiedz
raczysz żartować.


@Krolik: Nie. A c++ nie używa się volatile w wielowątkowości . O javie się nie wypowiem po jej nie znam. Czyli mam rozumieć że w javie każda zmienna która jest współdzielona przez 2 wątki powinna być volatile?
  • Odpowiedz
@walokid: "Raczysz żartować" odnosiło się do tego, że "kompilator to ogarnie". Co ogarnie? Automatycznie zauważy, że masz współdzieloną zmienną i doda synchronizację? No nie. Skoro już jesteśmy przy C i C++ kompilator totalnie olewa wątki.

A c++ nie używa się volatile w wielowątkowości


Nie używa się, bo nie jest wystarczające.
Używa się atomiców, które zawierają w sobie wszystko to co ma volatile i dodają jeszcze parę
  • Odpowiedz
Automatycznie zauważy, że masz współdzieloną zmienną i doda synchronizację?


@Krolik: Do tego służą inne mechanizmy. Nie wiem dlaczego zacząłeś się rozpisywać o synchronizacji bo to nie ma nić wspólnego z volatile. Volatile się używa kiedy kompilator nie wie że dana wartość się może zmienić bo np. pamięć jest zmapowana pod IO. Ale w przypadku jak piszesz po pamięci jedym wąkiem i czytasz to drugim to volatile nie jest potrzebne. To
  • Odpowiedz
Ale w przypadku jak piszesz po pamięci jedym wąkiem i czytasz to drugim to volatile nie jest potrzebne.


@walokid: No nie. Jest potrzebne użycie odpowiedniego mechanizmu synchronizacyjnego. Pisanie po pamięci jednym wątkiem i odczyt innym bez odpowiedniej synchronizacji to UB. Volatile gwarantuje przynajmniej że w przypadku CPU z koherentnym cachem zapis trafi z jednego wątku do drugiego, natomiast nie gwarantuje atomowości czy kolejności tej operacji względem innych operacji, dlatego jest
  • Odpowiedz