Használsz debuggert hibakereséshez?

Címkék

Igen, mindig
22% (80 szavazat)
Általában igen
28% (100 szavazat)
Néha előveszem
28% (100 szavazat)
Soha
7% (27 szavazat)
Nem tudom mi az / nem vagyok fejlesztő / egyéb
15% (54 szavazat)
Összes szavazat: 361

Hozzászólások

(x) igen, bár nem vagyok fejlesztő

--
trey @ gépház

A supporktörbe tartozó problémák 60-70%-a csak így oldható meg. ( bár eszközsupport de gondolom a debuglog ér )

nincs debugger :(

Software is like sex, it's better with a penguin. :D (r)(tm)(c) آكوش

Én az utolsót jelöltem meg, mert csak középsuliban programoztam utoljára. :) Viszont szerintem hasznos volt a debugger, csak a tanárom a Dev-C++-t választotta ki IDE-nek, amiben ez a funkció nem működött (azóta lehet, hogy változott a helyzet). Úgyhogy én magamnak a Code::Blocks-ot választottam ki, amiben bár rendesen ment a debugger, eleinte nem tetszett a tanáromnak, hogy az órán azt használtam és nem azt, amire ő „engedélyt adott”. De aztán nem szólt érte többet.

Teszteléshez is debuggert használok.

A legtöbb hiba amivel találkozom vagy nem olyan komoly, hogy kelljen hozzá, vagy túl komoly ahhoz, hogy használható legyen.
(Megnézném, hogy többszálú alkalmazásban kölcsönös kizárási problémákat hogyan derítesz fel kényelmesen debuggerrel...)
Valamint kernelfejlesztéskor sem kényelmes a debugger, hiába van kgdb.

Rég volt, nem tudom, talán keverem is valamivel, de rémlik az emlékeimből egy olyan lehetőség, hogy debuggerrel rá lehetett akaszkodni futó processzre és az általa használt adatok közt turkálni.
Pl. deadlock esetében ha nem volt túl kacifántos a helyzet, akkor viszonylag hamar meg lehetett találni, hogy ki, kire vár.

Elozo munkahelyemen egy eleg komoly hibat deritettem fel debuggerrel tobbszalu kornyezetben.
A server (amiben a hiba volt) UDP-n kommunikalt kulso eszkozokkel (nehany 10, a veglegesben joval tobb), a kliensek meg ezen keresztul monitoroztak. Kulon szalon ment kifele a keres, es kulon szal dolgozta fel a visszakapott valaszokat (plusz volt kulon szal a DB-nek, a kliensenken kulon-kulon, meg meg egy par dolognak, osszesen 10-20 kb.). A requesteknek volt egy azonositoja, ez szerepelt a valaszban, es csak a kikuldott kerdesbol es az id-bol derult ki, hogy a visszakapott binaris adat hogy ertelmezendo. Az azonosiokat round-robin rendszerben osztottuk ki, de csak azokat, amire mar megkaptuk a valaszt (vagy ha elveszett vagy lejart a timeout).
Kb. 2 hetenkent lefagyott a program. Kiderult, hogy a timeout-ot rosszul kezeli (> helyett < kellett volna valahova az osszehasonlitashoz), emiatt az idonkent vesztett/keso csomagok miatt szepen lassan elfogytak az id-k, egeszen addig, amig a kuldo szal uj id-t kereso ciklusa korbe-korbe ment siker nelkul.
Eleg emlekezetes bug volt, a repro kulso eszkozoktol fuggott tobbszalu programban, es veletlenszeruen jott elo. A debugger viszont segitett.

Mostanaban nem hasznalok debuggert, mert teljesen mas feladatom van, konkret vason jonnek elo bizonyos bugok, es ezek nagy reszet nem lehet osszekotni geppel (vagy macerasabb lenne).

--
Why did the chicken cross the road?
It was trying to get a signal on its iPhone 4.

Ha csak lehet igen, de van olyan környezet, ahol nincs debugger.
Olyan is van, hogy egy hiba csak release mode-ban jön elő, debug információk nélkül.

Ugy programozok, hogy ne kelljen debugger. A hibakat a hibaleiras alapjan elmeleti uton is megtalalom a kodban. Kifejezetten ritka, hogy debuggerre van szuksegem.

Szamomra dobbenetes, hogy emnnyi emebr gyakorlatilag a debuggerben fejleszt. Olyan is a kodjuk.

A debugger raszoktatja a nagy tobbseget a gondolkodas elhanyagolsara. Kicsit olyan mint a zsebszamologep meg a fejszamolas. Nem csak a gyors fejszamolas kepessege veszik el, hanem pl. az arnayok erzekelese, stb.

Az intenziv debugger hasznalat gyakran egyutt jar a kizarolag kodban valo gondolkodassal. En mindig az architektura es design felol kezdek problemat keresni. Megbizom magamban annyira, hogy a design koncepciomat jol kodoltam le. Tehat vagy design problema van, vagy trivialis kodolasi hiba, amit a szemem eszrevesz. A debugger csak nagyon szelsoseges (pl. tranzeins jelensegek, adatkommunikacio, stb.) esetben kell.

Hát személy szerint egy elég nagy nemzetközi projekten dolgozom, sokszor párhuzamosan másokkal, és debugger a napi eszközkkészletem része. Igazad lehet, ha az Nber egyedül dolgozik, és minden kódrészletet, elágazást, kombinációt, stb. maximálisan ismert, de onnantól, hogy mások munkájában kell túrkálni nagyban megkönnyíti az életet. Szóval nem érdemes ennyire álltalánosítani, mert eszközt tudni kell választani és használni is.

Egyébként library-ket használsz? Mert ott bizony nem áll, amit írsz. Az API dokumentáció nem mindig annyira jó (értsd: részletes, hibátlan), hogy kapásból elméleti szinten átlásd a rafináltabb corner case-eket is. Sőt...

Én bizony nem ritkán szoktam azzal időt eltökölni, hogy debuggerrel gyakorlatilag reverse engineerelem egy library működését. És a végén elég vegyes az eredmény, van hogy kiderül, hogy a mi kódunk hívja az API-t rosszul, de van olyan is, hogy a libraryban fogunk bugot.
---
Régóta vágyok én, az androidok mezonkincsére már!

"A debugger raszoktatja a nagy tobbseget a gondolkodas elhanyagolsara."

Ez azért elég relatív. Én például ritkán használok debuggert, de ennek az az oka, hogy a megoldandó feladat alapvetően matematikai jellegű, tehát olyan terep, ahol az ember jellemzően mehet valamire gondolkodással. Ugyanakkor néha még itt is befigyel a "misztikus faktor", amikor gondolkodhatsz napestig, akkor se jössz rá, hogy mi van. Na ilyenkor a debugger a megoldás.

---
Science for fun...

Ez egy rendkívül nagyképű hozzáállás egyébként. Igen, van, amikor egyszerűbb debuggerben fejleszteni, főleg, amikor nagy a program és sokáig tartana újraindítani.

Másrészt, amikor a debuggerrel gyorsabb, nem fogok feleslegesen pöcsölni, azért nem fizetnek.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Igen architect vagyok, viszont a fontos reszeket magam kodolom. Az elcseszett architekturan nem segit a debugger, de onmagaban a rossz kodon sem. Ezert annak vagyok a hive, hogy eleve jo kodot irjunk, aminek alapja a jo architektura es jo design, de a megfelelo szemlelet is elengedhetetlen. En azt vallom, hogy ugy kell kodolni, mintha nem lenne debuggered. A kod egy masik megfogalmazasa (lekepzese) a designnak es a designhoz sincs debuggerem. Persze neha jol jon a debugger, de nem erre kell epiteni. A koncepciot kell atutletni elegansan es egyszeruen.

Nincs olyan, hogy eleve jó kód. Aki ilyet állít, az saját magát csapja be. (Ld. optimalizálás, amit szigorúan mérés után szokás)

Viszont továbbra sem látom be, hogy az architektúrális döntéseknek mi köze ahhoz, hogy debuggerrel ránézel, hogy hol milyen adat jött be egy-egy fv híváskor (a várttal ellentétben) és így keresd meg a hibát. Ehhez ugyanúgy godnolkodni kell.

Másrészt miért is ne építsek rá? Munkát gyorsítja, egyszerűbbé teszi. Vagy refactoringot se használjak, mert júj az is olyan, hogy előre meg lehetett volna tervezni másképp? (Mi van, ha utólag kell módosítani?). Vagy tovább megyek: szintaxiskiemelést se, mert könnyíti a szemnek a különféle nyelvi elemek elválasztását ezáltal lustábbá teszi az embert? Ne vicceljünk már.

Egyébként magam részéről inkább azt tapasztalom, hogy ott ahol nem megszokott a debugger (pl. PHP, de debuggerrel normálisan ellátott nyelvekben is akár), ott teletúrják a kódot mindenféle echo/printf/tsi. üzenettel, amit aztán lehet kimazsolázni. És emellett ugyanúgy nem gondolkodnak.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Elolvastad, amit írtam? Az, amikor jön a fogyaték kóder, aki ahelyett, hogy használna egy debuggert, inkább telefossa a kódját print_r-ekkel és echo $asdf;-ekkel, hogy lássa mi van egy-egy változóban, aztán sokszor tetézi azzal a helyzetet, hogy ezeket nem kipucolja rendesen, hanem csak kikommenteli, "mert hátha még kelleni fog".

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Értem. A tesztelési módszerrel nincs is baj, főleg ha takarítást is végez utána. Kódolás közben én is csinálok ilyet értelmesebb szöveggel, mert mindjárt tesztelni is szoktam. De végül törlöm. Ilyen hülye nevű változókat meg alapból nem gyártok.

......................
Egymás segítésére még: http://pc-kozosseg.com

"Nincs olyan, hogy eleve jó kód."

Ezzel vitatkoznek. Meg akkor is, ha a kod nem tokeletes, de van jo kod es rossz kod. Lehet valamit szepen lekodolni es osszeganyolni.

"Viszont továbbra sem látom be, hogy az architektúrális döntéseknek mi köze ahhoz, hogy debuggerrel ránézel ..."

Az a koze, hogy ha jo az architektura, akkor egy hibajelentes alapjan nagyon gyorsan tudom gondolatban lokalizalni, hogy hol es mit keresek. Egyszeruen majdhogynem sorra megmondhato, hogy hol kell a hibat keresni. Ettol meg nem zarhato ki, hogy a debugger kell majd valamilyen kommunikacios vagy tranzeins hiba elkapasahoz, de legtobbszor nincs ra szukseg, es jellemzoen nem is debuggerrel keresem elso korben a hibat.

"Másrészt miért is ne építsek rá? Munkát gyorsítja, egyszerűbbé teszi. Vagy refactoringot se használjak, mert júj az is olyan, hogy előre meg lehetett volna tervezni másképp? (Mi van, ha utólag kell módosítani?). Vagy tovább megyek: szintaxiskiemelést se, mert könnyíti a szemnek a különféle nyelvi elemek elválasztását ezáltal lustábbá teszi az embert? Ne vicceljünk már."

Itt azert olyan dolgokat keversz ide, amik nem ide tartoznak, es nem is allitottam roluk, hogy ne lennenek szuksegesek vagy hasznosak. Egyebkent a debuggerrol sem allitottam, hogy nem szukseges es nem hasznos, csak hogy szamomra nem a fejlesztes alapeszkoze. Csak akkor veszem elo, ha igazan szukseges.

"Egyébként magam részéről inkább azt tapasztalom, hogy ..."

Nem szoktam tracelni, max. ha kommunikacios hibat keresek. A traceles csak vegszukseg esetere van fenntartva, a debuggolas gyorsabb es kenyelmesebb.

Nem értem miről beszélsz, Mr Architect.

A debugger hasznos és jó dolog. Veled még nem volt olyan, hogy egy-egy bonyolultabb kódodat debuggerel is átnézted megírás után?

10 éves korom, vagy még régebb óta programozok, és gyakran használom a debuggert mind a saját magam, mind mások kódjának az ellenőrzésére, megértésére. Valamint persze bugfix-ra.

Aki debugger ellenes, az nem szokott bugokat javítani.

A jó kód írásában segít a debugger.

Én akkor szoktam le kicsit a debuggerről, amikor - jó sok évvel ezelőtt - elkezdtem Windows 3.11 alá programozni, és a Turbo Debugger for Windowst kellett volna használnom. Annál esetlenebb megoldást nehezen tudok elképzelni, nem tudom, használta-e valaki.

Akkor és ott megtanultam, hogy nem szabad debuggertől függeni. Használni lehet, de előtte inkább gondolkodom egy kicsit. Nyilván más dolog egy olyan kódnál, ahol többen fejlesztünk.

Ismerem, használom, nem ezt írtam.

Annyit írtam, hogy én abban az időben kezdtem használni ezeket, így fontosnak tartom, hogy debugger nélkül is tudjak élni. Jól is jön ez sokszor. Mivel sok időzítésérzékeny kóddal van dolgom - hardverközeli vagyok - nem mindig alkalmazhatóak az általános debug funkciók.

És nem véletlenül írtam, hogy egyedül fejlesztett szoftverekről van szó, amelynek átlátom a logikáját... Azért az nagyon nagy előny.

Így már elfogadhatóbb?

"Nem értem miről beszélsz, Mr Architect."

Olvass vissza, mindent leirtam.

"A debugger hasznos és jó dolog."

Hol allitottam az ellenkezojet? Szerintem is az. A tulzott hasznalata nem az. Altalaban rossz fejlesztoi szemleletet takar. Ez a tapasztalatom.

"Veled még nem volt olyan, hogy egy-egy bonyolultabb kódodat debuggerel is átnézted megírás után?"

Inkabb rajzolok. Nekem jobban bejon.

"A jó kód írásában segít a debugger."

Nekem nem kell debugger, hogy mgertsem, hogy mit irtam le. Ha igen, akkor jobb, ha ujrairom, mert kesobb karbantarthatatlan lesz.

"Nekem nem kell debugger, hogy mgertsem, hogy mit irtam le. Ha igen, akkor jobb, ha ujrairom, mert kesobb karbantarthatatlan lesz."

Baszki, ennyire nem érted? Nem arra kell a debugger, hogy azt felfogjam, hogy mit írtam le (vagy, hogy más mit írt le), hanem arra, hogy azt vizsgáld meg, hogy hogyan működik. Vagy hogy pl. melyik változó, adattag milyen értéket vesz fel. Vagy menet közben kiértékelni egy-egy dolgot. Nem csak te írod a kódot, nem ismerhetsz mindent. Ha használsz külső libet különösen igaz. Ilyenkor 1000x egyszerűbb végigszaladni debuggerrel egy függvényen, és ha látod, hogy nem az elvárt irányba megy tovább a kód/nem az az értéket adta vissza egy hívott függvény, amit vártál, akkor abba leásni tovább, mintsem azzal szopkodni, hogy végigolvasok esetenként sokezer sornyi kódot.

Arról nem is beszélve, hogy az edit&continue és a Java hotswap korában mennyire meg tudja dobni a fejlesztési sebességet az, mikor tényleg debuggerben fejlesztek. Pl. megírok egy kódrészletet, letesztelem, hogy megy-e, majd utána debug módban hozzáírom a maradékot, miután láttam hogy jó. Vagy mondjuk grafikus program és egyszerűbb debug mód mellett fejleszteni, mert egyből látom, hogy mi lesz a végeredmény és egyszerűbb igazítani rajta, mint emiatt újrafordítani, újraindítani, stb.

Kényelmes? Igen. Gyorsabban haladok? Igen.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

"Nem arra kell a debugger, hogy azt felfogjam, hogy mit írtam le (vagy, hogy más mit írt le), hanem arra, hogy azt vizsgáld meg, hogy hogyan működik"

Mi a kulonbseg? Ha ertem, hogy mit irtam le, akkor tudom, hogy hogyan mukodik, es forditva. Mit kell azon viszgalni?

A kulso libekkel kapcsolatban mar megint masrol beszelsz, fentebb mar leirtam, hogy a sajat fejlesztesrol van szo.

A debuggerben fejlesztes hatranyait szamomra pont a te altald leirt (edit&continue) eset peldazza. Tervezes es atgondoltsag helyett prblakozas es kiserletezgetes, ami szuksegkeppen felmegoldasokat eredmenyez.

Előre szólok, hogy nem vagyok se programozó, se coder, de ha néha hasonló dolgot kell csinálnom, nem lennék olyan "állat", hogy mindenféle más által már kifejlesztett és elfogadott kódot újra írjak.
Nem lenne ugyanis költséghatékony.
Ha pedig már külső libet használok, bizony jól tud jönni egy jól működő debugger. Leginkább akkor, ha az ember kap egy olyan feladatot, amit az "elődje" 4 hónapos csúszással sem ad át...

Úgy, hogy abban a topikban remek és körbejárt képet kaptunk a tudásod mértékéről illetve annak hiányosságairól (ezen utóbbiak mértéke jóval nagyobbnak bizonyult), és mindemellett szintén tanúbizonyságot tettél remek extrapolációs képeségeidről, miszerint szerinted azok, akik veled ellentétben értenek is a dolgokhoz, mit és hogyan szoktak (nem találtad el). Ezenfelül azt is megtudtuk, hogy nem ismered eléggé a "szerintem" szó fontosságát, és inkább próbálsz határozottnak tűnni olyan dolgokban, amihez nem értesz, aminek következtében - jobb híján - kénytelen vagy a legnagyobb baromságokat is tényként beállítani.

A téma viszont nem rólam szól, úgyhogy kerüljük a személyeskedést. Ha valamivel nem értesz egyet, akkor mondd el, hogy miért nem, talán tudsz szakmailag érvelni. Lehet, hogy valamit rosszul tudok. Ez mindenkivel előfordul, még egy profival is megeshet ilyen.
Amit pedig azt a témát illeti, ha te nem is, én jó pár értékes információt kaptam, ezért megérte létrehozni. Az a te dolgod, hogy kit, milyen témát hogyan minősítesz, nem vagyok rá kíváncsi, mint ahogy jó sokan mások sem. Kivéve azok, akik másokon csámcsognak, mert úgy érzik, hogy ez még a témánál is fontosabb.
Én csak azt tudom elmondani, ahogy tudom és ahogy látom a dolgokat. Olyan dolgokban tudunk egyetérteni, hogy az 1+1=2, legalábbis 8-as, 10-es, 16-os számrendszerben mindenképp. Ami nem ennyire tényen alapul, ami megkérdőjelezhetetlen, ott nem feltétlenül lehetnek ilyen egyetértések. Hogy ki mikor használja a "szerintem" szót, azt csak akkor tudhatod, ha össze vagy nőve vele.

......................
Egymás segítésére még: http://pc-kozosseg.com

Pont ott kell igazan atnezni, hogy mit csinal a masik. Code review egyebkent a dolog neve, es illik meghivni ra mindenkit akinek a munkaja erintkezik a tieddel.

szerk. Most olvastam vissza a szálat és látom, hogy már létező kódról van szó. Ebben az esetben valóban problémásabb. :)

Akkor talán nem egy dologra gondoltunk. Azért ha a másik függvényét használod, érdemes megnézni, hogy jó e az a függvény neked, pont azt csinálja e, amit kell, hogy csináljon neked. Ugyanis ha a munkád nem azt csinálja, amit kell, a megrendelőd, munkáltatod nem fogja tolerálni és egyáltalán nem érdekli, hogy saját vagy más által írt függvényt használtál fel e. Jöhetsz akármennyi projekttel, függvénnyel, osztállyal, a te felelőséged az, hogy az általad használt kód jól működjön. Pontosan tudnod kell, hogy egy függvény milyen megszorításokat, ellenőrzéseket tartalmaz, mert azért érthetnek meglepetések. És egyáltalán nem biztos, hogy minden jól van dokumentálva.

......................
Egymás segítésére még: http://pc-kozosseg.com

Ha a másik függvényét kell használnom, és az nem azt csinálja, mint amit kívülről mutat, hogy csinálnia kellene, akkor ott régen bajok vannak. Blackbox modell ismerős? Absztrakció? Interface-ra fejlesztés?

És erre egy 50 fős projektnél általában úgy néz ki, hogy megy a hibajegy annak, aki írta. Egy 50 fős projektnél nincs idő arra, hogy mindenki mindenkinek a kódját átnézze. (Már csak azért is, mert szükségtelen, valószínűleg úgy is kisebb csapatokra van bontva az egész, akik külön modulokon dolgoznak és az egyes modulok egy-egy jól definiált interface-n keresztül kommunikálnak. Ha nem így van, az bazi nagy probléma.)

Ha használok egy függvénykönyvtárat általában nem érdekel, hogy hogyan van megvalósítva (ebbe most beleértendő a házon belül fejlesztett dolgok), csinálja azt, amit állít a dokumentáció. Ha minden függvény előtt meg kellene néznem, hogy az hogy működik, mit csinál, többmillió kódsort kellene átnéznem azok dokumentációja helyett.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

"A debuggerben fejlesztes hatranyait szamomra pont a te altald leirt (edit&continue) eset peldazza. Tervezes es atgondoltsag helyett prblakozas es kiserletezgetes, ami szuksegkeppen felmegoldasokat eredmenyez."

És az miből következik számodra, hogy nem tervezem meg előre, hogy mit akarok megcsinálni, hogy részekre bontom a feladatot és egy részt letesztelek, mielőtt továbbhaladnék azon az úton, amit elterveztem?

"Mi a kulonbseg?"

Az, hogy amikor csak azt a kódot látom, ami le van írva, akkor csak annyit látok, amit elterveztem, hogy csinálnia kell a programnak. Tfh. van egy ilyen:

private void Foobar(Tralala bla1, Tralala bla2)
{
  // Paraméterek ellenőrzése

  int salala = this.IngyomBingyom.Bizbasz(bla1, bla2);
  
  if (salala > 0)
  {
    // Akarmi
  }
  else
  {
    // Valami tök más
  }
}

Látom a kódot, csinál valamit a két paraméterrel egy másik objektum, ami viszaad nekem egy intet. Futtatom két olyan bemeneti értékkel, amiről tudom, hogy a true ágnak kell lefutnia mégis a false ág fut le. (Ez az, amit leírtam). Ilyenkor jövök debuggerrel, megnézem, hogy jó paramétert kap-e a függvényem (nem-e valami másik rétegben romlott el az adat, hiába van ellenőrizve), aztán végiglépkedek a kódon. Ha látom, hogy nem jó irányba megy, akkor meg elő a Bizbasz(Tralala, Tralala) kódját és nézzük, hogy ott mit csinál. (Ez meg a viselkedése). Csak közben egy körön belül le tudom ellenőrizni, hogy valóban jó paraméter jön-e vagy a függvényhívás után van a hiba. (És ezzel máris kizártam a kód egyik felét). Különösen hasznos, mikor többrétegű alkalmazást fejlesztesz vagy több külön alrendszer működik együtt. (Amit mondjuk opcionálisan két külön csapat fejleszt). De ugyanígy debuggerben rá tudok nézni arra is, hogy pl. az IngyomBingyom az valóban egy olyan objektum-e, amire számítottam, nem-e, hogy egy másik osztály lett odapéldányosítva (mert mondjuk dinamikusan változhat bizonyos esetektől függően). Vagy van még egy csomó ötletem, amikor debuggerben egy pillanat alatt kijön, hogy hol a hiba ahelyett, hogy végigolvasnék n*1000 sornyi kódot.

Na, ha csak a kód olvasására bízod magad, akkor mindkét irányban nézheted meg, hogy merre lehet a hiba. (De gondolom, te architect vagy, te tökéletes kódot írsz, így elő nem fordulhat, hogy valahol hiba legyen...)

"a sajat fejlesztesrol van szo."

És csak te egyedül fejleszted, vagy mondjuk van még 8-10 másik ember munkája is a kódban? És nem használsz egyetlen létező külső libet, apit, akármit?

"prblakozas es kiserletezgetes"

Egyébként terveztél már GUI-t? Olyanba még nem futottál bele, hogy fejben úgy gondoltad, hogy valami jó lesz, aztán gyakorlatban mégse?

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Ha egy belső dolgozó lenne, a megfelelő változónevek és kommentek hiánya miatt rég kirúgattam volna. Ha meg ilyen projektet vettem volna át más cégtől, komoly fájdalomdíjat kértem volna rászámolva. Ilyenkor valóban jó lehet a debugger, normális esetben nélkülözni is lehet. Ugyanis lejönne, hogy a kódrész mit csinál, mi a célja és milyen más értelmes dolgot használ.

......................
Egymás segítésére még: http://pc-kozosseg.com

Egyébként a magam részéről kifejezetten kiakasztónak találom a PHPDoc/JavaDoc/nemtudommianevedocaC#-ban/stb. függvény elejére írt novellákat. Egyrészt, mert egy normális dokumentációt nem helyettesít, csak API docnak jó, másrészt, ha tényleg normálisan meg van írva, akkor iszonyúan meg tudja növelni a zajt. Ebben mondjuk az IDE-k fogyatékossága sem sokat segít. Oké, össze lehet csukni, de macera. Sokkal kulturáltabban nézne ki, ha vizuálisan úgy jelennének meg, mint pl. Wordben a megjegyzések a margón a korrektúra módban.

PHP esetén külön borzasztó, hogy igazából a PHPDoc az részben a nyelvi elemek hiányosságainak pótlására kell. Pl. hogy jelölhessem egy-egy adattag/paraméter típusát, hogy működjön Eclipseben az autocomplete (ami nem picit dobja meg a hatékonyságot).

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

+1, viszont a parenthez hozzatennem, hogy azert a soronkenti komment somszor jobb ha ott van. Pl aki regexpes dolgokat ir komment nelkul, azoknak remelem egy specialis helyuk van a pokolban. En ha meredekebb fuggvenyt irok vagy hivok meg, minimalisztikusan toltom ki a fuggveny folotti doc reszt, akkor is max peldak vannak ott, ellenben a kod kozepen adott sorokban szeretem jelezni hogy itt most epp melyik pelda hova tart. Ezt a legkevesbe se neveznem zajkommentnek, ezert viccen belul sertesnek veszem az elotted szolo hozzaszolasat ;)

Azért neked sem ártana, ha elolvasnád a Clean Code-ot... :D
Nem a kisujjamból szoptam az ötletet, hogy a kódot kell olvashatóra írni, nem utólag kommentben magyarázni, hogy mit miért...
Regexp, ha nem olvasható, azt nyugodtan lehet kommentálni, nincs vele gond. De ne kelljen ötsoros megjegyzés ofvertv() függvény mellé, mert a nevéből csak az derül ki, hogy részegen írtad. ;)

A valtozoim is beszedesek, raadasul pl objective-c-ben tenyleg minimalisat kell kommentelni, mert ott mindig meg kell adni a fuggvenyek paramartereinek a nevet is a parameter elott, igy abban a nyelvben eleve joval kevesebbet szoktam es ugy is nagyon olvashato.

De amikor osszehasonlitom egy krtdimenzios tomb elemet egy masik ketdimenzios tomb elemevel, es a tombindexek is vegiggondolast igenylo valtozokbol vannak osszeteve, olyankor legegyszerubb, ha 3-4 egyszeru peldat kore irok kommentbe, hidd el az "csak javit" rajta, sot, nagyon is segiti az olvashatosagot. Persze mindig fennall ilyenkor a foszabaly: "comments won't run". Ez akkor rossz ha at kell irni a viselkedest, es a lommentet elfelejtik modositani, cserebe viszont hasznos akkor, amikor valami rossz veletlenul, es a masik probal rajonni, hogy mit is akartam ott csinalni, es azalapjan nyulhat az egeszhez.

Esetleg ha magyarul is megtanulnál? ;)
Sehol, senki nem állított olyat, hogy felejtsd el a kommenteket!
Pusztán arról van szó, hogy csak ott, ahol valóban szükséges (bár tény, pl. egy IBM/360-as assembly kód egész jól mutat, mikor minden egyes sora tartalmaz megjegyzést is :) )

Az a jó, hogyha úgy programozol, hogy ne kelljen kommenteket írni. Ránézek a kódodra és hamar megértem, hogy mit is programoztál le. Ha már mindenképpen kell kommentet írni, pl regex a legjobb döntés, akkor is pont annyit kell röviden oda írni, amennyi a megértéséhez elengedhetetlen. De ha változik a kód, a kommentnek is változnia kell, ha úgy van a komment megírva. Martin nem véletlenül írta azt, hogy az egyetlen megbízható forrás a kód. Abból biztosan tudod, hogy mit csinál, egy rosszul írt vagy elavult komment inkább kárt okoz. Ha a kód van rosszul írva, az már programozási hiba.

......................
Egymás segítésére még: http://pc-kozosseg.com

Nagyjabol egyrol beszelunk, es ugyanazokat a kroket futjuk. En egy szemleletrol irtam, ami nyilvan elsosorban sajat fejlesztesu kodra alkalmazhato. Akkor is alkalmazhato, ha tobben dolgoznak egy projekten, de a feladatok jol el vannak osztva. (Magyarul nem nyulkal mindenki keresztbe. Egyebkent borzaszto az a projektszervezes, ahol ez megengedett.) Ellenervkent mindig visszajutunk az idegen kodok es library hivasok problemajahoz. Fentebb leirtam, egyetertek, az elv ebben az esetben csak korlatozottan alkalmazhato, de nem is allitottam az ellenekezojet.

A szemelyes kerdesekre: igen terveztem mar GUI-t eleget, debuggoltam is eleget, de jelenleg safety firmware fejlesztessel foglalkozom. Itt nincs GUI, sot libraryk is csak erosen korlatozottan hasznalhatoak (ertsd: gyakorlatilag nincsenek illetve nem hasznalhatoak, volt olyan projekt, ahol a memsetet is magam irtam). Emellet nem irok tokeletes kodt, de torekszem ra.

"Magyarul nem nyulkal mindenki keresztbe. Egyebkent borzaszto az a projektszervezes, ahol ez megengedett."

2,5 szoftverfejlesztő dolgozik a cégnél, milyen projektvezetést akarsz? :)

"En egy szemleletrol irtam, ami nyilvan elsosorban sajat fejlesztesu kodra alkalmazhato."

Viszont egy olyan projekten, amibe 14 ember fejlesztett már bele az évek során.

Másrészt meg, ha valaki más talál a másik kódjában egy hibát, miért ne javíthatná? Attól még, hogy a feladatok el vannak osztva.

----

Az a baj, hogy te eldöntötted egymagadban, hogy az mennyire menő, mikor valaki debugger nélkül fejleszt, ami a te esetedben lehet, hogy alkalmazható is. Meg lehet, hogy időd is van arra, hogy mindig mindent önerőből (meg mazoizmusból) csinálj meg. Viszont van nagyon sok más olyan helyzet, amikor ez nem, vagy csak sokkal nehezebben alkalmazható. És a még szörnyűbb az, hogy próbálod az egészet architekturális kérdésekkel elmaszatolni, aminek meg aztán végképp semmi köze a debuggerhez.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

"Viszont egy olyan projekten, amibe 14 ember fejlesztett már bele az évek során. Másrészt meg, ha valaki más talál a másik kódjában egy hibát, miért ne javíthatná? Attól még, hogy a feladatok el vannak osztva."

Ez azert sokat elarul.

"Az a baj, hogy te eldöntötted egymagadban, hogy az mennyire menő, mikor valaki debugger nélkül fejleszt, ami a te esetedben lehet, hogy alkalmazható is. Meg lehet, hogy időd is van arra, hogy mindig mindent önerőből (meg mazoizmusból) csinálj meg. Viszont van nagyon sok más olyan helyzet, amikor ez nem, vagy csak sokkal nehezebben alkalmazható. És a még szörnyűbb az, hogy próbálod az egészet architekturális kérdésekkel elmaszatolni, aminek meg aztán végképp semmi köze a debuggerhez."

Ez ugy ahogy van butasag. Nem errol szolt a beszelgetes. Sot nem is rolam szolt, bar megprobaltad tobb ponton szemelyes sikra terleni, meg valami egyedi dologkent beallitani, de ez teves.

"Ugy programozok, hogy ne kelljen debugger."
Ezt te írtad. Meg mögé egy olyan megjegyzést, amitől a legtöbb fejlesztő zsebében nyílik a bicska.
Szóval de: te vitted "személyes" síkra és te nyilatkoztál olyan lenéző stílusban, hogy kivételesen jogosnak érzem az effajta reakciókat.
Erre a végén kiderül, hogy olyan környezetben dolgozol, ahol nem is nagyon van lehetőséged debuggerrel dolgozni.
Hát izé...

"Ez azert sokat elarul."

Pl.?

"Ez ugy ahogy van butasag. Nem errol szolt a beszelgetes. "

Az egész arról szól, hogy te lényegében kijelentetted, hogy aki debuggert használ, az csak szar kódot írhat, majd utána a magad szűk világának prekoncepcióit próbáltad kivetíteni minden másra. Kezdve mondjuk azzal, hogy mi köze az architektúrának a debuggerhez, amire még mindig nem kaptam választ.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

"Az egész arról szól, hogy te lényegében kijelentetted, hogy aki debuggert használ, az csak szar kódot írhat"

Ilyet nem mondtam. Azt mondtam, hogy aki debuggerben fejleszt azoknak olyan is a kodjuk. (Olvass vissza, ahelyett, hoy kiforgatod a szavaimat.) Jellemzoen nem az atgondolt tervezes hanem a "trial&error" szemleletben dolgoznak. Ennek meg is van az eredmenye.

"magad szűk világának prekoncepcióit"

Nincs szuk vilagom. Eleg szeles skalan mozognak azok a projektek,amiben reszt vettem. Mind szakterulet, mind meret, mind pedig fejlesztesi modszerek szempontjabol. De mar megint az en szemelyemmel foglalkozunk, pedig ...

"mi köze az architektúrának a debuggerhez"

Sajnaltos, hogy nem erted, pedig leritam mar tobbszor. A megfelelo architekturalis tervezes jo kodstrukturat eredmenyez (legalabbis nagyban elosegiti), ami atlathato, karbantarthato, ezert a hibakereshez jellemzoen nincs szukseg debuggerre. Neha kell, de az ritka.

Erre irtam, hogy ugy kodolok, hoy ne kelljen debugger. De mar kinos erre ennyi szot vesztegetni. Mar idelinkelehtnem, hogy hanyszor irtam le ugyanazt, megis csak sertett emberek vagdalkozasa jon vissza.

"Jellemzoen nem az atgondolt tervezes hanem a "trial&error" szemleletben dolgoznak."

Sokadszor adod a számba, hogy debuggerben fejesztés = trial & error. Mondtam már, hogy ne a saját prekoncepcióidból indulj ki.

"ami atlathato, karbantarthato, ezert a hibakereshez jellemzoen nincs szukseg debuggerre."

Aztán valami mégsem úgy működik, ahogy előzetesen eltervezted. Akkor mit csinálsz? Nekiállsz 100k sornyi kódot átolvasni?

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Mi a kulonbseg? Ha ertem, hogy mit irtam le, akkor tudom, hogy hogyan mukodik, es forditva. Mit kell azon viszgalni?

- könnyen lehet egy nagyon triviális elírás (pl. == helyett =, a paraméterátadás csak érték szerinti, miközben a függvényben változtatod, stb.)
- matematikai elmélet megvalósításában (ha olyan függvényt csinálsz) két értéket véletlenül felcseréltél, esetleg egy "beépített" függvény nem úgy működik, ahogy "gondolod" (pl. a cos fgv paraméterét elfelejted radiánba átváltani)
- esetleg a fenti két esetben vázolt függvényt használsz egy olyan függvényben, amely jól működne, ha a hívott függvények jól működnének
- ld. saxus
- stb.

"Elméletileg az elmélet és a gyakorlat között nincs különbség. Gyakorlatilag van."

Számomra a debugger pont olyan dolog mint a logic analyzer: tudom hogy kell használni, szeretem ha van, de nagyon rossz napom van ha már használnom kell.
Főként olyan dolgokkal foglalkozom amit elég jól ismerek ahhoz, hogy pár debug üzenet után meglegyen a probléma. (Már eleve logol eleget ahhoz, hogy csak kis területen kelljen keresni.) Így a debugger csak akkor kerül elő ha ismeretlen területre tévedek, több szál érintett a hibában, heap/stack corruption van, vagy ügyféltôl származó coredump-ba kell belenézni.

Én vagyok a debugger!
Ha gond van, megpróbálok rájönni, hogy hol lehet a hiba. A tünetek, beépített hibaüzenetek segítenek benne. Eddig működött.
Persze minél nagyobb a rendszer, annál nagyobb ész kell átlátni a rendszert, annál inkább szükség van jobb hibaüzenetek generálására, jobb kommentek írására.
Nem hiszek debugger eszközökben, valahogy nem volt rá szükségem eddig. Ettől függetlenül lehet hasznos bárki számára.

......................
Egymás segítésére még: http://pc-kozosseg.com

Barmilyen hiba eseten en is megprobalom atgondolni (fejben futtatni :-) a kodot, hatha mar igy is megtalalom a hibat.

Masreszt, a topic inditoja valoszinuleg nem embedded fejlesztessel kapcsolatban tette fel a kerdest, viszont paran kitertek arra is. Egy mikrokontrollernel viszont nagysegrendekkel kisebb az eselye, hogy tamaszkodhatsz a hibauzenetekre (sok esetben konvergal a nullahoz...).

Ha magam irok valamit, from the scratch, konnyebb a helyzet. De ha pl. valaki mas altal irt programban kell megtalalni a hibat, sokszor az is kihivas, hogy megertse az ember, hogy mit is akart a masik.

Egy talan nem tul jo pelda: kepzeljuk el azt az autoszerelot, aki nem hajlando vegignezni az autot (ergo a hibajelenseg alapjan vegigprobalgatni a lehetseges reszeket ahol hiba lehet), hogy mi a gond, hanem csak a gepkonyv (meg esetleg a muszerfalo levo visszajelzok) alapjan probal megoldast talalni.

A debugger nem a gondolkodas HELYETT hanem MELLETT van. Tobb kommentbol ugy tunik, vannak akik maskepp latjak.

/sza2

Én nem használok, mégpedig azért, mert belenyúl a realtime folyamatokba.
ledON/ledOFF (3 is van a klaviaturán!), oszt jónapot.

> Sol omnibus lucet.