Vaativa debuggaus linuxissa
Jotkut debuggaustehtävät ovat onneksi helpohkoja.
Mutta silloin tällöin valitettavasti törmää tilanteisiin, joissa haluaisi parhaan mahdollisen debuggerin käyttöönsä.
Ne, jotka tuntevat linux/gnu -käyttöjärjestelmän rakennetta tarkemmin, varmaan tietävätkin, että xwindow/GUI on linux -kokonaisuuden heikoin lenkki, ja monet palvelintehtävissä toimivat linuxkoneet toimivatkin täysin ilman asennettua xwindow/GUI -järjestelmää.
Mutta, entä, kun debugattava kohde on esim. videoplayeri? Videoplayerit tyypillisesti vaativat xwindow/GUI -ympäristön.
Vidoplayerinkin voi varmasti toteuttaa monella tavalla. Itse kokeilin ottaa xine:n kotisivulta löytyvän esimerkkikoodin (koodattu C:llä) ja muuntaa sen ohjelmasta .so -kirjastoksi, jotta voin koodata muun osan ohjelmasta haluamallani välineellä, tässä tapauksessa freepascal lazarus.
Valitettavasti tästä seuraa tiettyjä ongelmia:
xwindow on suunniteltu niin, että yleensä 1 sovellus voi käpistellä GUI -liittymää vain yhdestä säikeestä.
Silti sekä xine -moottorilla että tyypillisellä fp/lazarus GUI -ohjelmalla on oma viestisilmukkansa.
Siispä joko:
a) kumpikin täytyy laittaa omaan säikeeseensä
tai
b) nuo 2 silmukkaa täytyisi jotenkin pystyä integroimaan yhdeksi, joka hoitaa molempien aiemmat tehtävät.
tuolla a -ratkaisulla saa helposti koko window/GUI -järjestelmän niin jumiin, että kernel on ainoa, mikä säilyy toimintakelpoisena, koko muu osa linux -järjestelmästä on jumissa.
Pahimmillaan vielä jumiutunut prosessi rohmuaa 100% CPU -ajasta, jolloin etäkirjautuminen ssh:lla toimii, mutta sisäänkirjautuminen saattaa kestää 5 minuuttia, kun ryöstäytynyt prosessi rohmuaa itselleen lähes 100% (ehkä "vain" 99,99%) CPU -ajasta !
Ja etäkirjautumisen jälkeen 1. temppu on su -komento, sillä pääkäytttäjänä on ainakin oikeudet asettaa ongelmaprosessin nice level mahdollisimman korkeaksi (niin, korkea nice -level = alhainen prioriteetti).
Ongelmatapausten hoitamiseen siis tarvittaisiin mahdollisimman pureva debuggeri.
gdb:n "etädebuggaus" toimii juuri päinvastoin kuin tässä olisi tarpeen, gdb:n etädebuggaus kun soveltuu lähinnä siihen, että linuxkone tarjoaa debuggerin käyttöliittymän, ja esim. usb -kaapelilla kiinni oleva sulautetun prosessorin (ns. mikrokontrolleri) kokeilukortilla ajetaan debugattavaa ohjelmaa.
Siispä pitäisi toteuttaa oma debuggeri.
Jotta siitä saataisiin mahdollisimman pureva myös ongelmatapauksiin, niin kysyisinkin seuraavaa:
Kun linuxkoneella, jolla pyörii GUI (xwindow) halutaan käynnistää vaikkapa ./ohjelma
jossa tuo ohjelma siis on GUI -moodin ohjelma.
Ja toisaalta halutaan, että debuggeri säilyy toimintakelpoisena, vaikka koneen xwindow/GUI menisi täysin jumiin, niin mahdollisuuksia ei ole monta.
Mutta tässä 1, mikä saattaisi toimia:
1. siirrytään vaikkapa virtuaalikonsoliin 3 (Ctrl-Alt-F3)
2. kirjaudutaan sisään samalla käyttäjätunnuksella, jolla GUI -tilassa ollaan kirjautuneena, ja siirrytään hakemistoon, jossa tuo "ohjelma" sijaitsee
3. komennetaan:
omadebuggeri -debuggerinparametri ./ohjelma -ohjelmanparametri
3b. Mitä parametreja pitää antaa ja mihin, jotta debuggeri käynnistyy tekstipohjaisessa virtuaalikonsolissa 3, mutta ohjelma (debuggerin alaisuudessa) käynnistyy GUI -screenille (eli siis sille, mihin useimmissa linuxjakeluissa pääsee Ctrl-Alt-F7, paitsi esim. Knoppixissa Ctrl-Alt-F5) ?
4. debuggerin palvelinosa käynnistyy virtuaalikonsolissa 3 ja ohjelma käynnistyy (tai ainakin latautuu) GUI -screenille
5. eri koneella avataan oman debuggerin GUI -osa (oma debuggeri on siis rakennettu 2 -osaiseksi, palvelinosa joka toimii tekstitilassa ja GUI -osa, joka toimii xwindow GUI -sovelluksena, ja nämä debuggerin 2 osaa keskustelevat keskenään TCP/IP:llä jolloin ne voi ajaa eri koneella) ja otetaan sillä yhteys debuggerin palvelinosaan
6. debuggerin palvelinosa tulostaa virtuaalikonsoliin 3 teksitiedotteen "debuggerin GUI -osan yhteydenotto osoitteesta 192.168.0.251 on hyväksytty; debuggerin ohjaus ko. koneelta on käyttövaslmis" ja GUI -osa näyttää vastaavan dialogboxin tuolla .251 -koneella.
7. Virtuaalikonsolista 3 siirrytään takaisin GUI -tilaan Ctrl-Alt-F7 tai vastaava.
8. omaa debuggeria voi nyt ohjata eri koneelta, joten jos ja kun debugattavassa koneessa xwindow jumiutuu, niin eikö virtuaalikonsolilta tekstitilassa käynnistetty debuggeri pitäisi olla turvassa xwindowin kaatumiselta ja säilyä toimintakuntoisena, ja siihen toiseen koneeseenhan ei ykköskoneen xwindowin kaatuminen pitäisi mitään vaikuttaa.
Onko siis olemassa keinoa, jolla tekstimuotoisesta virtuaalikonsolista käynnistetty ohjelma voisi käynnistää toisen ohjelman saman koneen GUI -screenille ?
Jos, niin miten tuon saa aikaiseksi ?
Ja vielä: Jos rakennan oman debuggerini niin, ettei se tarvitse gdb:tä avukseen, niin miten on kernelin debug -toiminnallisuuden kanssa: onko kyseessä ns. vakaa API, jolloin funktiokutsun parametrit (kerneliä kutsuttaessahan nuo parametrit laitetaan cpu:n rekistereihin ja ainakin 80x86 -prosessoreissa seuraava temppu on int 80h, joka toteuttaa kernel -kutsun omasta ohjelmasta käsin) pysyvät kernelin versiosta toiseen samana, vai saanko kiusakseni sen, että aina kun kernelistä tulee uusi versio, niin joudun muuttamaan ohjelmaani sen osalta, mitä kernel -kutsuja ohjelma tekee debugattavan ohjelman kontrolloimiseksi ja mitä parametreja nuo kutsut tarvitsevat ?
vaativa debuggaus linuxissa
3
338
Vastaukset
- aikol
Moi.
Luulisin että sikäli kun olet niin "etevä" että saat liittyjä ohjelmalla X:n rikki, niin tietäisit että asettamalla muuttujan DISPLAY=:0.0 voit ohjata mistä X:ää yritetään hakea.
Tosin käytänhän itsekkin tietokonetta enkä tosiaankaan tiedä mitä sen ytimessä liikkuu aina.
Mutta tosiaan sellaista vielä että kannattaa ihmeessä ostaa toinen kone siihen vierelle, esmes läppäri ja konfiguroida sun työasemasi niin että mahdollistaa konsolin käytön sarjaportin tai ssh:n kautta, jolloin voit käyttää sitä vieressä olevaa konetta pelastuskonsolina.
Sillä luulen että jos X kaatuu niin se kyllä vie kaikki siihen liittyneet ohjemat mukanaan, eivät nimittäin käsittääkseni ole ohjelmoijat varautuneet siihen että X voi hävitä, mutta ohjelman oma suoritus saattaisi jatkua.
T: Iloisesi, Segmentation fault.- plus man xauth
X jos hyytyy/kaatuu niin hyytyvät kaikki siihen liittyneet prosessit, kokeiltu on. Joskus eivät ja sittenpä on kone vaatinut ihan fyysisesti TOC-napin painallusta (HP:n PA-RISC 3600).
Ikkunamanagerin voi ja pitää voidakin vaihtaa lennosssa, esim. tyyliin:
killall twm; startfluxbox
Ja miksikö nuo kandee laittaa samalle riville ikäänkuin samaksi komennoksi? Jos vaikka se kohdistus häipyy samalla kun ikkunamanagerikin kuoleentuu ;-)
DISPLAY ja xauth ovat ne avainsanat joilla ASCII-terminaalista lähtee graafinen sovellus jonnekin, kuten jo mainittiinkin.
Lisäksi pitänee, distrosta jne. riippuen sallia koneen joitai portteja auki, ainakin jos toiselta koneelta (se laptop) niitä akkunoita availet.
- k.i.s.s.
Linuxissa voi olla monta X-serveriä käynnissä saman aikaisesti. Ne voivat olla erillisiä tai sisäkkäisiä. Sinulle saattaisi olla hyötyä ensialkuun aika paljon siitä, että käynnistäisit toisen X-serverin softaasi varten. Vaikka näin:
Xephyr :2 -screen 640x480 &
xauth add :2 . $(mcookie)
DISPLAY=:2 oma-äksän-tappaja
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
- 865352
Riikan kukkaronnyöri on umpisolmussa
Kulutus ei lähde liikkeelle, koska kansalaiset eivät usko, että: – työpaikka säilyy – tulot eivät romahda – talous ei h784714Jos vedetään mutkat suoraksi?
Niin kumpaan ryhmään kuulut? A) Niihin, jotka menevät edellä ja tekevät? Vai B) Niihin, jotka kulkevat perässä ja ar1113017Tanskan malli perustuu korkeaan ansioturvaan
Ja vahvoihin työllisyys- ja kotoutumispalveluihin. Suomessa Riikka on leikannut juuri näitä: palkkatukea, työttömyysturv872948Epäily: Räppäri yritti tappaa vauvansa.
https://www.mtvuutiset.fi/artikkeli/epaily-mies-yritti-tappaa-vauvansa/9300728 Tämä on erittäin järkyttävä teko täysin p232514Vain vasemmistolaiset ovat aitoja suomalaisia
Esimerkiksi persut ovat ulkomaalaisen pääomasijoittajan edunvalvojia, eivät auta köyhiä suomalaisia.612039Anteeksipyyntöni
Jätän tähän anteeksipyyntöni sinulle, koska en voi sanoa sitä missään muuallakaan. Pyydän anteeksi, jos purkamani tuska251966- 321523
Sydämeni valtiaalle
En täältä aio asioita kysellä. Haluan tuoda tiedoksesi, että pohjimmiltani en ihmisiä tahdo satuttaa ja ajattelen muiden1141439- 1851328