<?xml version="1.0" encoding="ISO-8859-15"?>
<rss version="2.0"><channel>
<title>kernel dump</title>
<link>http://sange.fi/~atehwa/cgi-bin/piki.cgi/</link>
<description>Recent changes in kernel dump</description>
<item><title>kernel dump</title>
<link>http://sange.fi/~atehwa/cgi-bin/piki.cgi/kernel%20dump</link>
<guid>http://sange.fi/~atehwa/cgi-bin/piki.cgi/#1119876101</guid>
<description>&lt;p&gt;&lt;ins&gt;Unixeissa on nerokas virheenetsintätapa: kun ohjelma tekee 
jotain, mitä se ei saisi tehdä, sen tilasta talletetaan kovalevylle 
image, "core". (Tämä tapahtuma on ohjelman traagisessa kaatumisessa 
uskomaton lakonisuuden huippu: virheilmoitus on "segmentation fault 
(core dumped)".) Näitä imageja voi jälkeenpäin tutkia tarkoitusta 
varten tehdyllä ohjelmalla, debuggerilla (kaikissa vapaissa 
ympäristöissä "gdb").&lt;/ins&gt; 

&lt;p&gt;&lt;ins&gt;Ohjelmien lopettamisesta ja corejen talletuksesta huolehtii 
käyttöjärjestelmän ydin. Mutta mitä tapahtuu, kun ydin (kernel) itse 
huomaa tehneensä jotain, mitä ei olisi saanut tehdä tai, että jonkin 
ohjelmointivirheen seurauksena sen tila on mennyt sekaisin?&lt;/ins&gt; 

&lt;p&gt;&lt;ins&gt;Tässä on suuri ero Linuxissa ja BSD:issa. Rivikäyttäjä ei ehkä 
osaa arvostaa sitä, mutta se on hyvin tärkeää, kun pitää oikeasti saada 
tietää, mikä on mennyt vikaan. Linux nimittäin tulostaa tässä 
tilanteessa ruudullisen tietoa, jonka hyödyllisyys on kyseenalainen, ja 
jumittuu. BSD taas tallettaa tilastaan "kernel core"n kovalevylle, 
josta se talletetaan seuraavassa käynnistyksessä, ja käynnistää koneen 
uudestaan. Tällä tavoin BSD:ita pystyy debuggaamaan kaatumisen jälkeen 
jopa, vaikka kone olisi jossain kaukana tavoittamattomissa.&lt;/ins&gt; 

&lt;p&gt;&lt;ins&gt;Muuten niille, jotka ovat tarpeeksi guruja halutakseen tietää, 
miten kernelin corea tarkastellaan (tämä on aika hajanaisesti 
dokumentoitu:)&lt;/ins&gt; 

&lt;p&gt;&lt;ins&gt;# Tee debugsymillinen kerneli ja asenna stripattu versio (strip 
-g) varsinaiseksi kerneliksi. Pane debugsymillinen valmiiksi kansioon 
/var/crash. # Varmista, että kerneli tietää, mihin coret talletetaan. 
Tähän on vähintäänkin jokin asetus rc.conf:ssa. NetBSD tekee valmiiksi 
sen "oikein". sysctl -a | grep core (FreeBSD:ssa muistaakseni dumpon) # 
(Katso muuten myös, ettei kerneli mene ddb:in panicissa. Siitä ei ole 
mitään hyötyä, koska gdb:llä saa aikaan kaiken saman ja enemmän. 
OpenBSD:ssa tämä on oletuksena väärin, sysctl -a | grep ddb) # Varmista 
myös, että savecore tietää, mistä coret luetaan. rc.conf:n asetus 
vaikuttaa todennäköisesti myös tähän. # Odotellaan kernel panicia # 
(Jos olet kuitenkin joutunut ddb:in, anna komento boot dump tjsp.) # 
Kaatumisen jälkeen: {{{ $ cd /var/crash $ gdb netbsd.gdb (gdb) target 
kcore=netbsd.0 }}}&lt;/ins&gt; 

&lt;p&gt;&lt;ins&gt;[kategoria: työkalut]&lt;/ins&gt;

</description>
<pubDate>Mon, 27 Jun 2005 12:41:41 +0000</pubDate>
</item>

</channel></rss>
