Files
sibo-playground/docs/2-04 The SIBO Debugger 2.10_djvu.txt
T
2026-07-06 18:30:29 +01:00

3287 lines
124 KiB
Plaintext
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
THE SIBO DEBUGGER
Version 2.10
February 3, 1995
(C) Copyright Psion PLC 1990-95
All rights reserved. This manual and the programs referred to herein are copyrighted works of Psion
PLC, London, England. Reproduction in whole or in part, including utilization in machines capable of
reproduction or retrieval, without express written permission of Psion PLC, is prohibited. Reverse
engineering is also prohibited.
The information in this document is subject to change without notice.
Psion and the Psion logo are registered trademarks, and Psion, Psion MC, Psion HC, Psion Series 3,
Psion Series 3a and Psion Workabout are trademarks of Psion PLC.
TopSpeed is a registered trademark of Clarion Software Corporation. IBM, IBM XT and IBM AT are
registered trademarks of International Business Machines Corp. Microsoft and MS-DOS are registered
trademarks of Microsoft Corporation. Apple and Macintosh are registered trademarks of Apple Computer
Inc. VAX and VMS are registered trademarks of Digital Equipment Corporation. Brief is a registered
trademark of Underware Inc. Psion PLC acknowledges that some other names referred to are registered
trademarks.
LES SSS ae ee ee eS ee ee ea
Contents
—_— —__ ror ——
TD AM OGUCHON 6 2.c025nitiecnoban eects wdtaciyngctececoduceiessceasahee he Oeseee eete Ree vee cece 1
DEBUG OINGINOGES S. Cinicursonautatiane tostoesetune satid eewcaaess ides tee naaeet eer ocaibne eae 1
SIBO<architectiire: OVErVi Wi... Tivedvecilscersacsacuicdecdeoned ava vuaudbovseecode isssnesoos 2
SYSTEM MOMOLY :f2- fF carces ces tce reco st ese cotte es cocetsscncusteaetonsaceeteny Mev secibecans 2
Segment register usage and interrupts .............sccesccossccesccnsccssccsccscseuce 2
re
2 Starting up the: Debugger sis saesevdccc scot essa ecee seis Nei encdacleee tae bee oe cee dawseiccdes 5
Preparing @ process for debugging ...........ccsssssssecssccsecessscscccnsccncceseceusseucees 5
JP! TopSpeed C symbol files ..............ccccsccoecsscssccecccecoscescesseecesscusencens 5
The debugger and symbol information ............ccccccssccecascesccsseacesscescesces 6
DeBUGGEr IMIMSNISALON ccxsseu. socheves detacsaazavenesd carne dentexvansvcust eet sieeee Mak iaases 6
Debugger COmMaNd HiGGs. .5crsescns0iscseces Sains oup' baceaateseveeene eae hist Mevdicvecoi 6
CONMGUEAUION: HIBS: -22c6ci sl s.c.ccecearcalene sah enssadonecisuuceen tt Mee tMee cove vsdoe Pavoc 7
Remote Debugging vi.-:<S22.csde es casvcesstaaceescabacescencxcucacd rou ncaa he laccccaseces 8
EOCal, CEDUGGING siaiecs craves ecitecce acs ¥addassocchesetecsas desu nevessadtianceBesiect secabes 9
Simultaneous local and remote debugging ..............c-.ccssscosscesecescscescusce 9
Initial. dis play as ccc eta ER RI elt eee et eeee eves oaks ee nee vhecen 9
wind edeacsdneaaeeeeecdccaceddsearddvesversesaucse sideescecasestencoresoradtte ccs 11
MASKS rec essere doasccves Bevedvanerouaesaess o0ecsieiaierdecseaadacauews dor eab acon osccs Mesacuteu ince: 11
THE titled Wind O Were ccicaddeeiacis sekieve vc cavevcau ddesextuasdedwoud dedieds as adeacheei cvdueads wenden 11
RESIZ Gs cah feieden Pe eote coum sesvacesee Secu Gate ckunts tn sae cilsee Be etes ek eu hice tote ies 11
MOVE ialvcccedusa ds ves vedins Goanks is sise'e' oaabeaeds oweveSedecoleeeeus hana hee cBhe. 11
ZOOM ssvcecnccacevesa cawinscde nen su20 coviwe taney once thn cn Rts cde oe eee LIM et 12
ISONISING A WINKOW ..005 ca besescee sexe Raaeteses colaccccsssecdecraccuec te vevcbuaccocsecdesdieeses 12
The Command Menu ba...........ccccescscsececcecscssasencscecscarcecusaveeeesesasauseseseeece 12
ACCCIERATONS fs sicnsics coasevevcsew sho nesuisne case nh Rew toauuede ecudicencwenseeeteetmorenercerecre 12
DialogDGxeS etry artes icing riuedetaede giesnes tal ena i tavemes aausanduant neatig ore utte a ees 13
BUTEOMS etek: cassia sihesitsdacadssas atect tos soteieihcd Savi nates cack tete eels eestor de 13
POPFOUT MONUS!s. 2s cievescom ciay deucadecaeseaasea ede sviesvouteos ccesestoree cade savedeceesiesce 13
Tick boxes and diaMONds...............csceccsccsostecscorsscccscarestscecaeesvecssececeece 13
The file selector dialog .............:ccsccesssseccnccosccuccereuccucsescactousteseesssssesceersecs 13
Op 8 oss vasteieteecteetanceadsaceaeiTeh suck dad Cou bedaabe ee ceadue sae cua bouke ova ck oeaan eee lenenenaes 14
A Top-Level VIEWS .....:ccscccescsesesscteccsecocsivccecesdaeavscocceiassccctecserievuceersscoscecceescvsvec 15
Process list top-level View ..........ssccscssscascucceccecesesccccesaeravseseucessassscencuvevens 15
THE CULFEME Tale asccc cides dase e sd. outnweseaas cvaeraslecuvacalssxbvasces betty! cosy boswone 15
DEBUGGER MENU 3 isc costa seas eilcas ceace MeasaveicessncdGv oneteddccendegssiteetersuacteccone 16
NeXt, top-leVel VIGW svevies cee cee ck cc caaveedsdenanan dds cece veenvisecedous sasstedcacueweas 16
NV CF SIO Mio eSeciecUecuawnveattelssnsusadycadeogeesagud sees ek odueeriWon secede tite wav cuss seal 16
Create FileManager vicicicccscseacscesostennes0¥ss0 eseemencdvobeoMtbedivedhsvessdct ive 16
RUMMAGE 2 Scan ocedtcacaies facSeaesdoaseisosebeuseeaeoses Senssuldstertont Pattee icere: 16
EXItisesc ces epaulcaoe vs pect wuneansvcstai Sibecstadtesqageatvassnuadk ds toc secon causeuncres 16
Local/Remote CPU MeNnu...........ccsscsesececcussescusseseescnsscnscescescescesseanuesens 16
Connect to Remote/Local ..............cccececovcececccccseescvcvscsescececavenseences 16
INFOMATION esc veveiasecesedsnissecewedseca cave edauarcasPeeeuens cx SonoeCeee en ote Laas 16
THE SIBO DEBUGGER
re tp op
BiG akiinto is sed cccve hs cerdeceavessscatgei saved dua gaveseseddeeebseaderteesausiesevebeneuies 17
SEAL Shere ow iat elec ca Ricca odaatnc den veiees Lasade de ovclte pie ei R on enone em 18
CHECksdatarSCGMehtresssscssccceccccceteesvxtessucoescencuvscccuvsssesieneetiress bec 18
VIG WIMOENU cee ca vivasd cos e8sdabia vcs Soiever ecedudedvanteticieeaceosss shies wa ee ee 18
PrOoC@SS iSt. .csisiieerss ceescseaticand otechoeeteuee sae et kasvehewewnol ieee coieeeee bese 18
RiGee ees cece hes ade 25 vende va tacee cached ae eve det cus cone oer cveeededeseedc ceteris eateanes 18
SEQMEMIS: % fsccscs cee c fet sestssccanaiodeuecseenenescsheitadsssencocecsscetsatetigesesueen 18
DEVICES rr. ror semaine arr rete Sa Senin ae ree oe te ere 18
ENVirOnMent: Variables vissic ves cvccsesccscessecdoescccdeccdecklVeshevescorstenescecses 18
REQ@Merate IIS tis ccisas fclscncs ones bese cicevnguose ves semi teaae sndeneetes sto me otsenaaenes 18
File tOp-lOVeliViGW si diviicvsd os iets ad sadeo nc ag ote rclv ones geste sis ossavoesceasceetiniiete tees 18
MIG WEMOENUT sc cccacaewscsesccstacaneieogucetet ic uevenetaeccmetes ccs dee tccrstescne sonetea oreias 18
Delete ere irc tT ELS te coc dg te ores cone eee Cet eee woes 18
LOGateIMeNU cits. fan eecttree ita Ata car ete sires cee ctec ete cwccste loavisiveceenertenlicieieia 19
GOLTOMIMS ace oe saek fia u tlcackat se ote cscaacaeeedseee back odielecess cas cu eve aie meee 19
EMC encecat eas ctiasckleveste sane seu sesuten ace tenecse shaw mandala vorkn siihaswn doa steates 19
SOALCM: AGAIN oor ce Ss sackes sauces loctaineeds cvecsusans sen cacouecommeue te eee 19
SEGMENt-tOP-IEVElEVIGW ves iseco eset veavaveves ceweunssesnes sede suacdecs sexes becescesnss eee 19
Devices top-level! VieW vi. cccecvscccicksseadissssibaecvedececuecvescocececocsettestebanceveecscrs 19
Environment. variable top-level VieW...........csseseccscscesecceceescecessecsensectensecenes 19
VariablesMmenu ess. set bitte AE eh Sian Se hh oe ee wd aes 20
MOGITYsict octets easiceteancedecoe ee es Site cauee obachack att mes eaugoeaecsshe ial tas eee 20
SOOM Aatiiss siswssdeenehenwbebss fede cee need ee ieee cede oee eee aoe ha edunea anes 20
101 | aaa See EES eeE oR cee Per aici PPE EPR CEPR ee MET ore ene 20
BONO W oasceiertae tor ee Sere ce As oe Be carcs Seed esac a eg Sioa 20
PREVIOUS 3 o5coitt vou sen chiven ate Detter et ec tete tesevec ere tionc eer rs ica uxes 20
SEACH ov escverssucoztencecuar sles velstesydeasases cone escssesdeastoqcuss eereeaneene hero aks 20
S@ar Ch aGaln series ccwcoeca caesdsckceccovucibasdevceesdvitavthecicosbeveeeSecesenvions 20
5 The: ProGesSs WINKOW.... 5 cccssscvcasascadvcoccsed siceddevcccseséseecevexcececcedaetcbacacieeecseoiacies 21
EFACKING VIEWS wisci iveteeveccdasedansienduestiesassdactccsstecdsibesectccucoseesessentssatesh'ede'ss 21
PANIGS s ivcscssecseceugstaseuenssevcse ccogeesesduoudascwede sane ctcedece oul ccs Goned svs AROSE wens 22
MRO2COME*VIGW caries eicaitee sd scchetesiatiues mins douse dedvententoedetivcses elec oe eos 22
Assembly language INT instructions..............ccscececssseccscssscocaccececscensores 22
PrOCESS MENU) sei occGeuces a saddedeaesaceats sat outeeewesucdbveecgusuecenccealeontendeni 22
Next top-level VieW..........ccccsecsessccsececsecetscccesscccsscecsseesensesseuseenees 22
DOLATUS seta dics teces WGA sea scwsease areata seudels dieses eteta dere de meee eto eee 22
RelOad <5. cccesccaiscewesesieecascereaea ret cea ta bee Tee aE TE ene 23
WG ad foe oe ieee aa Ae LAA case satcnnsase ve sds vodsoeiaes Saaniviewactusuenonses decbas 23
XIU, vase dca cwen sds ok Gousde as sree veeiaed eases eb hbecaeiageeten a voeedansd cecseee ue caive 23
VIG WIIMOMU ei cee. ces cdes octet cuss cds dh avlease coastaeetesus anaendive Bese venenes secre cstoaen codlaee 23
SOULCE MOG UG seis lcci se eda van sacdiuascadeocoedaes smbeneee dhencenebocluiereteeck ve 23
COdeSOQMENT sie: Bieta iiis asane cas cedes gegen evood du etexdesebecoveasandens 23
Data SCQMENt: 25: issccdeseestdtsshotiscdeveves stacoucimtvdetyebeet eat 23
REGISTCTS on ciccrcies saceuchlecuaueas este detadexeedeessnseeewetoes lee cecesesbeeteceieeeetin 23
SLACK aa See cctbasGbe ner odes ut devices she seeds bon poxdiud oovescegisatebseeae 23
SVMDOISH es soecd cdeed es bacasscuchddvesacs chbatisesdeitneessdasTensercoonesceectemtereesives 23
MAGIC. Statics v.22 .1.¢.ccesiecevees occhesa veg dedvedweseanesewed Mosendatsevedeertav eee ote 24
Mata bles... cei vccsccccesencsstecaveavhiosccesvetvads cas teccotwevenasecevces cei tecadeeanons 24
Fil@ cor. caus cuneatoecessices wed ecswecbieeecs décacn veaesceneseccnceencbinedsusunecdiascaetee 24
Delete occ eca cess Scie baceciae caudesacvadenenaee sacs cece te cist oeaue eee one 24
RUM IMONU ioc Seeectcedccten tes Boel sasaloedliwnsds atoicoud be neshoe ek eo ER as 24
SLOP ieeceiateccedensvestu caved aceeh saeco ogedssaau ce auecsac sues see ee ee ee soa 24
TRAGCC. viveicavedueecudeacaioveestoddeadsschosel gcc becacseteoseecue te ao doaobeutee ce exeuwnis 24
RG ss Setee wake stee hts eves ve deca chen cov ebenns sounds coedb ee Geadewaiecw ost eee eeneeees 25
RUM 10? NENG assis sec aeecas cstoutieves sind dsdaandvoadtscolevcs craved teaitten oontwiewetene 25
Break Menus cedees levies. cesvessasass dees asedesevdu denniasesuody es debeaedledecctaneseacs 25
BIG Ak DOINtS ies clan ncézi deca veaesaecvadees dc seed ncad vseencvedseaeedextuagueeeereaenive rs 25
Breaks Heres ive ideisesviawcsat ep uscessncdvecess ties ute ccean cook cote coer teonMese ne densi eae 26
DatasMem tes Sic e eee S ls .e cats cactacaaaecsase tte. See ee ee 26
Set Cisplay. MOE! pi cicesccdecscdasweceve sees ci vocdoeiads cc teereseeeg eee eee bobs caiied 26
Checkydata,SeQment.sin.s.uscssescscesesses vackivencascassevecetos tts terme te teecuei 26
e63eeo—€—_—0SS es se
ti
CONTENTS
ee eS
AL ASErr Or CODE i. 5. vis..ndcessechesscasha cesciceses sot ee ee ee So 26
PM ASAD ANIC COGG 5 scien cxasancndadan sate bc ones secs niviiesi voce th ad vs dade ceeceacrcann 26
LOCALe IMO MU ginny acattcucee esas sauehieseomrea otis sone det aes coe adic eee code scoce 26
OOM Sreecceuretee tert: Seren mca een oe, eee er eer ee er ee oe 26
RIGViOUS @.ccuscvewdsead aeniince A teetaten ced, peek eon es Reonet OPC WTS Ea 27,
GOLOPAU OPES hsccott tick svacetassaee.nes Ac ors i Ge es Oe, See oe eS 27
GOtoglitie tacts: ao agit oes e etree eseihe eee: tei nce mon eee tee bean 27
DOARCM fees scinnveeda stay ccueevesercentusonee Meret eee Ne ne ee 27
SE ALCHVAC I Meas caterer our ca ata wanaen ger rs Cae ot ele ee ate RB ha ees | 27
Breakpoints in dynamic libraries and other shared code ..........cceceeceeeseee. 27
MVIGE OS LIA VIC Wo dali Neds siacqrat gu eticaext Suwa trus SOA temas uh ecb oes Lest in hil yee: 28
LOCALCUIMESMU? iiees es osscvccacdsandviassvcsese heteunctin! ave udhseusreib soho s2octteieiecievaune 28
ONO Wisse sicicceves wweaDuncesietscwcscsveceas secede conte ea dee eeee ews coe deci bees iitengees 28
RVCVIOUS So caues cette ctsncodeveasdewsstessvevcioun niet ciate neon cite oh ead 28
GOtO:AddreSS) eascvcusacdosscacsscccvosceees ea eabs bu cedk Sock obiaacecdsndiu ia covdeeeh ccc 29
DVS CAI SIAL cs eras sececaye vegan sone oa fane wide Biante cant eod acid elecase dew ce Reel Bay ace 29
SStidataifOrMat, cvccccacisccesesscstecsevcsece othecots ia elev adcaeccstioceesoueeswee tines 29
MOG iyi. ccsciee ten cath cevies Sec fa vec diva wate vebuncectela tes ceeale sineretieedccliie. Ott 29
THE: TEQIStErS: VIGW si cwsexiutcclestileeteiccs dh teceraes'e eed eaetah oes ohica vise brae cheatin 29
DLS AMG cosa ces tac: Gast ivecasecea teeta net tweieteacaecapeecldco olen sea sdane not eeteet os od 30
SEU AIK: ests eevee ss soo eceahs ogee hes eoc te eve Sede pas Shots eos eee 30
MOG fyi siciaeecetscticee ve da cocas cuvi staves dnetacd cade Bicei oo eas uuaeton ieee bee 30
AIO STACK VIGW. 858 cctvi Rb ccndes nde tostasved cacewencoece nha vec oma vad veneered nace eet ok es 30
Operating system stack frames. ............cccccscsecececcsccessecucceccecececcesceccecs 30
Locating the origin Of @ PaANic..............ccccosscsscaccecceetsescecseccsecsccensceuccece 31
LOCATE MENU is oer esesicecess sat vacedebnrecved on seses sehen cesie awe soca oa needa debaSesoacs 31
PONOWicSesia cect das caeecctiesacedtiass oceces coe betewe deta aOetecateteces Ay hdstete ces 31
BIO VIOUS ic c3 swccceaas cakes esata enseecgeessbousdeari stoi ste jaseitendosindceuite decade tee: 31
GOTO Ad GOSS) inc acs tae ens see ieee seedsaae coves ta de ak aneae teidiionwok dees these 31
Data ment: Ss icesicedseleecenes fice sieve cvsenueaeccsobieectocgenein ced codeaea wise etcante 31
MOGIfy ss scsiewieSiviecese cen eawdt bedvckavesases sazs2e seens nosed weveneceieelncesivedeit ccs 31
THE SYMBOIS VIEW sedec ss dasesewceosseedecededes ive SoebecSevebedculolvay heeoee dee fabowceachbeiecs 32
The variable View s.ccccssdecsvasecdsvccseecoastivedecsessccceveegdosebeepsecceded bvcedercncececstes 32
Display formats for variables .............s.cccscccsecesccseccssecaseesctesceecsssceens 32
Basic*Patal LVDS sau, ooctmnaeendcictvssuaea cleus sie baat sogeandec ce torectaieetsnace kobe 33
BOUNTCRS seat cies ua eves te vas naeetavideseeeatecvccssecivacs Suewih foivessubs fossuivtedenee.cs 33
StrUCTUTES ANC UNIONS ..........0..cesceccsceccscescscoecarcuseessececessecenaeecencess 33
PDAS cattet Bexotesuat sini dsnacnunua siden sens linet baay ease oaceueees vosada ie deur wen bias en: 33
EMUIMS sts. Soctacsdivet ves cdurave ceed oes us beeaavauedsSededecsibee tee cae bebedn items 34
BItHOldS cy svecccanececacavi bs vveevvac dea dew ldes seus aviraeiesavareeua tia Pea hbe cd saw teticuewndh 34
Date Men Uersreccrvcocsccarrrrs re restorer rere eee re 34
MOG 2e.e5 2s caskacncteavesteedaesdea coe late ule exe Barc chee eee lo bine ca ee cece cew eden 34
The magic statics ViOW ...........ccccccsscccesccvesconscestoeceecessseseussncesecesenecencence 34
WG THC: VIOQW cade ce sdaa secu ses cate paceaceesiebesen cdievns So Pee Oe oa ean daweddedotheneu late athe 34
Or The: File: MAM ae? sateie onts sicocuaawses ncusuve gees cseenseaes a ccgia ts weawadeied ed avewnateeo nen 35
Moving around the file MaMager ...............cccseeccceseceuscccessceconsceecccaesseceeences 35
Operations. OF) TSS: vss cesiae duced. cess scdaspe sere ncenvessdendyecitevackevetangduadeceevouciudes 36
MSS CUMG) TES as sisternpslestctn ees putes die etd. comsh Veteowanlerbeeey bx taestnee We dugnes hina vaeatwes os 36
WAGGING RINCS coos sess rhit awe ues tones ttcen » sedewua dagen datadeot near eds ccuds oeaceeheseetens 36
COD VIR MNES as Acadaleassdus ote resieuar hadvatduauuagedtoitencel ccs Ginceea cote watmeste see ee 36
RENAMING HOSS 6 cies dcccnescnveecachvacvsceds c¥bsnvsdbeviexgu ous ivesnebcuesceueeescsCvstoveccs 37
WS BUI ICS va cana iaiewte tien yaciset hanase ent sant smusadtauvaaind neiidesat fates baotvacede 37
PU IDUNCS 5 fasts cvcnn naan Garhinjea-dntonbeu ce caida seabatssinavauven uve aet te etuducccaiete soctnes 37
Changing the order of a directory listing..............ccssccsecescaccessascccecescecee 37
OPSratiOMms OM GIPECtONES ws cioutsyccicsetcssadercdassdeccweveeseverueusvenoacadenesisencavogacess 38
GSLEALING S GILG CLONY 2 snn.dennedssunsuasayditdetiescusimamuecsait creverseos vibe usaoes eanestoves 38
REMOVING Cire GlOTOS o.c0yc50 05 va cans wrasaveeariinnssten'ssivacaandinds exce sae doa Getncoceneene 38
THE SIBO DEBUGGER
— SSS
Operations:on G6ViCES is cic. sd coc ie seace Svcd vv sieve hee dan SRT ee es eevee 38
F., GEROUBICSNOOURAG cass ho cca setae cn esis ss avahoncese 3 cewsaneaeaaseeeddesus saundes ceemeneeee Wecaedetens 39
No-source:code displayed 20 rcAticeviieies cack ccdeccoussbcocsvscdasscoliveticsevhdovavecces 39
Communications link Droken............ccccsseesssssvecceseccusescessesseansecueceseenesens 40
POOrsCIStoried or MISSING: GISPlAV 20. --. -aicacsicet oss on «deez dbs cone dereniactutverWowi ites 40
CHAPTER 1
INTRODUCTION
The Psion SIBO Debugger is tailored to the EPOC operating system environment and enables you to
debug applications written for the Psion SIBO family of machines. This family currently includes the
MC200, MC400, HC and Series 3 ranges.
It is a source level debugger, using the symbol table information produced by the JPI TopSpeed
compiler. Currently only the C programming language is supported.
The debugger is supplied with a built-in file manager, described in a later chapter of this manual, which
provides file, directory and device manipulation.
The debugger runs on a host machine and can be used to debug Psion SIBO applications running on
either the local host or, via its remote debugging facility, on a remote SIBO machine. The debugger can
simultaneously debug up to eight processes - four on each of the local and remote machines.
To debug a remote application you will need a development PC with a serial port (and, optionally, a Bus
mouse). For remote debugging the PC should be connected via a serial cable to a remote SIBO machine
which may be:
=" an MC200 or MC400 (version 2.30 or above)
® an HC (any version)
= a Series 3 (version 1.77 or above) with a serial link expansion module.
= a Series 3a (version 3.20 or above) with a serial link expansion module.
Versions earlier than 2.30 of the MC or 1.77 of the S3 will cause the debugger to terminate.
SSS ee ee ee ee ee
Debugging modes
You may use the debugger in one of three possible ways:
= asa conventional debugger
® to bring a running process under the debugger's control
# to locate a panic in a running process
The conventional use is to load a process from within the debugger, set breakpoints, step, trace and
Tun, as with any other debugger.
The second type of use is of value when debugging a process that can not easily be loaded from the
debugger. An example would be to debug a replacement shell on the HC, since it will be automatically
loaded and run on system start-up. This technique is described in the Process list top-level view section of
the chapter Top-Level Views.
In order to locate a panic you simply run the debugger and then independently run and exercise the
process under test. When the process panics it is automatically brought under the debuggers control. The
steps needed to locate the application code which gave rise to the panic are described in the Stack view
section of the Process Window chapter.
THE SIBO DEBUGGER
SSS ee ae ee ae ne rae)
SIBO architecture overview
This section gives a brief overview of the relevant aspects of the SIBO programming environment. It
should be read in conjunction with the Memory Allocation chapter in the PLIB Reference manual.
System memory
The EPOC operating system manages all the memory within a machine. The sections of memory that the
debugger is primarily concerned with are the allocated memory segments - contiguous regions of memory
that contain live information, either code or data.
The EPOC operating system maintains within its data space an allocated memory segment table. This
table has room for 96 entries, each of which contains:
= a physical 8086 segment register address of the start of the segment
= an access count
=# aunique segment name
The position of such an entry within the table is known as the segment handle for the relevant allocated
memory segment.
Memory segments are dynamic in size; they may grow or shrink depending on the amount of memory
actually being used within the segment. Although a memory segment that contains code will not, in
general, change size, one containing data, particularly an application process data segment, is quite likely
to change size. The debugger takes account of this and any views on data segments are resized
appropriately.
Each memory segment has an access count that indicates how many times the segment has been opened.
Only when the access count is reduced to zero will the memory segment be freed. This mechanism allows
code sharing, where multiple processes of the same application share a single segment containing the
application code. The debugger understands this principle and breakpoints are associated with a particular
process, rather than with the code segment itself.
As part of its memory management system, EPOC may move allocated memory segments. This ensures
that, as memory segments are allocated, freed or changed in size, the pool of free system memory exists
as a single contiguous region. The physical address of an allocated memory segment may therefore
change over time, but the segment handle within the segment table will always remain constant.
The debugger automatically tracks the movement of memory segments. It does not display the segment
registers or the absolute segment address since these values do not have much meaning; they may change
at any time. The debugger handles segments symbolically by the name of the segment, but places no
significance on the segment name. It can not, for example, determine the nature of a segment's contents
from its name.
Segment register usage and interrupts
Although memory segments move, the majority of programmers need not concern themselves with this.
Only machine code programmers who want to manipulate the 8086 segment registers need read the
remainder of this section.
Many EPOC system services, including memory segment movement, are performed under interrupt
control.
If a segment register is used to point at or within a memory segment the operating system will modify the
segment register correctly when memory moves. If a segment register is to be modified the programmer
should ensure that interrupts are disabled during the modification. Interrupts should be enabled as soon as
the segment register content has been modified.
Conversely, if a segment register is to be used as a scratch register then interrupts should remain off for
the duration of such usage, since the operating system will modify all segment registers when it moves
memory.
If an application calls an operating system service that causes the process to wait on a semaphore, the DS
and ES segment registers must contain the segment address of the calling process data segment. Such
services are p_read, p_write, p_seek, p_close, p_iow and p msendreceivew.
An application should, if possible, avoid disabling interrupts. If it is necessary to disable interrupts, they
should be disabled for as short a time as possible. Leaving interrupts disabled for more than 1
millisecond will, at the very least, cause significant degradation to system performance.
1 INTRODUCTION
eS eS
If the application leaves interrupts disabled for more than about one second, a watchdog NMI (non
maskable interrupt) will occur and the operating system will terminate the process that has interrupts
disabled.
CHAPTER 2
STARTING UP THE DEBUGGER
—————————SSSSEe ee ESS ee Se
Preparing a process for debugging
In order for the debugger to provide source level debugging you must build the application in such a way
that the appropriate symbol files are generated.
The debugger looks for a .map file, a .sym file and a number of .dbd files. A .dbd file is created by the
JPI compiler during the compilation of a source module and has the same file name as the source module
file.
The .map file is generated while linking the application and has the same name as the .img file. It is
used, primarily, to obtain symbolic information for library routines.
The .sym file is created by the EMAKE utility program (provided there is symbolic information to write
out) at the same time as it creates the .img file. It has the same file name as the .img file and contains all
the information required to load the .dbd files.
Each source module linked to produce the .img file requires a .dbd file to describe its contents for
symbolic debugging. The debugger does not require a .dbd file for every module (or, in fact, for any
module) but it will not be able to present source level debugging for any module that does not have a
corresponding .dbd file.
JPI TopSpeed C symbol files
To allow the compiler to generate source level symbolic information (.dbd files) the VID debug pragma
should be set to either min or full. This can be done either within the JPI project system or within the . pr
files. A .pr file should, for example, contain the line:
#pragma debug(vid=>full)
or
#pragma debug(vid=>min)
There is further information on this topic in the Building an Application chapter of the General
Programming manual. It should be noted that the JPI compiler generates different code for each level of
the VID pragma. The more debugging information generated, the more actual executable code is
produced. This has an unfortunate side effect in that bugs may come and go, depending on the state of
the VID pragma.
If a bug disappears when the module is compiled with debug information on then the bug is likely to be
concerned with register corruption.
If a bug only appears when the module is compiled with debug information on then the bug is likely to be
concerned with stack memory overwrites.
The debugger will check the date of each of the .dbd files it attempts to load against that of the image file
containing the process to be debugged. If the .dbd file has a later date it will not be loaded.
The VID debug pragma must also be set to min or full while linking the application in order for the .sym
file to be created.
The JPI environment shipped with this version of the debugger has the optimise for speed pragma set to
off. It should always be set to off when building an application that is to be debugged. Arguably, since
THE SIBO DEBUGGER
turning this pragma on produces larger (although marginally faster) code, it should always be set to off,
since code size is of great importance for SIBO machines.
The debugger and symbol information
The debugger maintains symbol information on a per memory segment basis.
When a process is loaded the operating system typically creates two segments, a code segment and a data
segment. The debugger knows which segments these are from the process table entry for the loaded
process and attempts to load symbol information for each of the newly created segments.
The symbol information for each segment is totally independent of any other information. This allows the
debugger to perform symbol information sharing if, for example, multiple processes of the same
application are being debugged.
A process may execute code in many different segments. When process execution stops within a segment
the debugger will automatically attempt to load the symbol information for that segment, provided it is
not already loaded. The debugger uses the segment name to infer the name of the .sym file that, in turn,
contains the information required to load the .dbd files.
The debugger loads the source level symbol information into memory segments on the local machine. All
memory segments are required to have a unique name. The debugger uses segment names beginning with
at least a two character sequence of any one of YC, YD, ZC, ZD and ZS for different parts and types of
symbol information. A view of the segment table of the local machine will show these segments.
SSS SSS a a a ey a eT
Debugger initialisation
On start up the debugger determines the type of screen the PC has, and loads an appropriate screen
driver. The debugger supports VGA and Hercules screens.
Once initialised, the debugger reads its command line and configuration files and interprets them as
follows:
Debugger command line
The debugger takes a command line of the following format:
sdbg [flags] [process mame [process command linel]
The optional flags are:
“kL to specify local debugging
-Pn to specify the serial port to use, n takes the value 1 or 2 for COM1 or COM2
-Bn to specify the baud rate to run at. MC200/400 machines can run at 19200
baud, the HC and Series3 machines at 9600 baud and the Series3a machine at
19200 baud.
If no flags are specified the debugger will run a remote debugging session. Unless an mclink.trm file
exists (in which case this file determines the port and baud rate) connection will be via COM1 at 9600
baud.
Once a connection with the remote machine has been established the debugger will automatically load any
process whose name is included in the command line.
The process command line, if present, is passed to the loaded process when it is run.
Note that the contents of the debugger command line are converted to upper case. If the process name or
the process command line need to contain lower case characters you should load the process from within
the debugger, rather than by means of the debugger command line.
Examples:
sdbg -l
Starts up the debugger to debug processes on the local machine, without loading any image file.
sdbg -l print.img
will load the (local) image file print.img to run on the local machine.
sdbg -p2 -b19200 print.img "This is a remote print"
2 STARTING UP THE DEBUGGER
eee
will load the (local) image file to run on a remote machine that is connected to COM2, running at 19200
baud. The command line "THIS IS A REMOTE PRINT" is passed to the loaded process.
sdbg rem::m:\test.img "rem::a:\testfite doc"!
will load the image file test.img from the remote machine's m:\ directory to run on the remote machine,
connected to COM1, running at 9600 baud. Note that a file path passed in the process command line is
interpreted by (and hence relative to) the remote process. In the above example the file TESTFILE.DOC
is expected to be found on drive A of the local machine.
The process command line may contain any mixture of quoted strings and single byte numeric values,
separated by commas. The required content depends on both the particular process and the SIBO machine
on which the process is to run. Command line requirements, if any, are described in the appropriate
programming guide (see, for example, the Communicating with the System Screen chapter of the Series3
Programming Guide).
Configuration files
A debugger configuration file is a text file, with name sdbg.cfg. Each line starts with a keyword,
possibly followed by one or more values. An exclamation mark (!) indicates a comment; following text
in that line is ignored.
On start-up the debugger will look for and read two configuration files, the first from the directory in
which the debugger sdbg.exe exists and the second from the current directory. Typically, the first of
these configuration files would contain system-wide keyword definitions and the second would contain
application-specific definitions.
The following keywords are recognised:
INITIAL_IP specifies the symbolic address to which a loaded process should run before the
debugging cycle starts. If the symbolic address cannot be found then the
debugging cycle begins with the process start up code. If more than one
INITIAL_IP is defined, then the last definition is taken.
SOURCE_PATH specifies a path, in addition to the current directory, which the debugger will
search to find the .map, .dbd, .sym and source files required for source level
debugging. All paths must be fully specified paths, rather than relative paths.
The source_PATH definitions are cumulative, with paths being searched in the
order in which they are defined. Putting the most common path first will speed
up searching for symbol and source files.
BREAKPOINT specifies a symbolic address for an initial breakpoint to be applied to a process.
The definition is ignored if the symbolic address can not be found. The
BREAKPOINT definitions are cumulative.
F1 to F10 specify the assignment of the function keys F1 to F10 to accelerator key
presses. If more than one function key is defined, then the last definition is
taken.
TAB_WIDTH specifies the number of character spaces a tab character represents in the
display of a source file. If more than one TAB_WIDTH is defined, then the last
definition is taken.
BEEP_OFF disables the beep which accompanies a transiently displayed error message.
NO_COMMAND_LINE specifies a null process command line, disabling the prompt for an initial
command line when a process is loaded from the Load option in the target
view's Process menu.
You may specify more than one value in each BREAKPOINT Or SOURCE_PATH Command, provided that
successive values are separated by commas as in the following example:
SOURCE_PATH = c:\sibosdk\hwdemo\,d:\dirname\
BREAKPOINT = p_panic,p_notifyerr
Note that spaces are not allowed within such comma-delimited lists.
The debugger is supplied with a default configuration file which is placed in the same directory as
sdbg.exe by the installation process. The following is a commented version of the content of this file.
THE SIBO DEBUGGER
— — SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSMSMFMSSe
! Sample configuration file for the Debugger
Specifies the paths, in addition to the current directory,
to search for source, .MAP, .DBD and .SYM files
(example Lines, commented out)
SOURCE_PATH=c:\sibosdk\hwdemo\ ! note the terminating '\'
SOURCE_PATH=d:\dirname\
! Pass zero-length command Line to load and run commands
! (example line, commented out)
! NO_COMMAND_LINE
Turns off the beep that normally accompanies the temporary
display of an error message
(example Line, commented out)
BEEP_OFF
! Specifies the tab stop width used when displaying source code
TAB_WIDTH=4
! Specifies breakpoints to set up
BREAKPOINT=p_panic
! Specifies where the debugger will run the process to before it
! reports the loading of the process is complete.
INITIAL_IP=main
! Specifies the assignment of accelerators to function keys
! Fi to F10 may be assigned
F2=B ! set a Break point at the current Line of code
F3=X delete the current foreground view
F4=H run to the highlighted position
FS=M view a source module
!
!
$
F6=V ! view the highlighted variable
'
J
1
i
F7=T trace one instruction
F8=S step one instruction
F9O=R run
F10=G go to address
Note that the function key assignment descriptions given above apply only to menu items in the process
window view. If a different type of view is foreground then the accelerators will, in general, invoke a
different set of menu items from the current menu.
Remote Debugging
Subject to available memory, you may simultaneously debug up to four processes on a remote machine.
Since the debugger communicates with the remote machine via a channel of the Link process, you must
run the Link application on the remote machine before debugging a remote process. It is also advisable to
disable auto switch-off.
= on a Series3 set the Remote link option in the Special menu of the System application to On.
Select Options in the Special menu of the System application and set Auto switch off to No. (It
is also advisable to set the Update lists item in Options to System button.)
= on a Series3a set the Remote link option in the Special menu of the System application to On.
Select the Auto switch off item in the Control menu of the System application and set Auto
switch off to No. (It is also advisable to set Update lists in the Set preferences item in the Special
menu to System button.)
= onan HC enter auto -1' and then run the Link application from the system command line.
= on an MC200 or MC400 select and run the Link application icon in the System display. Select
the Auto Switch Off option in the Options menu and tick the Always On check box.
It is recommended that the remote machine is connected to a mains power supply since communications
hardware is quite power-hungry and will drain the batteries quite quickly.
The debugger communicates with the remote machine via a process called syssstus. If no such process is
available on the remote machine, or the version that is available is out of date, the debugger will
automatically copy a new version of sys$stub.img to the remote machine. The copy is made from the
8
2 STARTING UP THE DEBUGGER.
directory containing sdbg.exe (a sys$stub.img is placed there during installation) to the default drive of
the Link application process (typically M:\). Because of the need to copy this file, the first invocation of
the debugger will take longer to start up than subsequent invocations.
Once a connection between the debugger and the syststus process has been established, all commands are
identical to the local debugging configuration.
Local debugging
Subject to available memory, you may simultaneously debug up to four processes on the local machine.
Debugging locally is much faster since the communications overhead is greatly reduced compared with
remote debugging. (Although minimised, the communications overhead is the dominant factor in any of
the debugger commands.)
In principle, any process can be debugged locally. CLIB programs, whose user interface consists only of
console I/O function calls, can be debugged locally quite successfully. Bear in mind, however, that the
screen size of different target machines varies. It is strongly recommended that the application be run on
the target machine before being released. The default screen size for a CLIB application can be varied by
setting the DefScreenRect data structure as appropriate for the target machine.
The user interface libraries and the graphics window servers on the MC200/400, HC, Series3 and
Series3a differ from each other. Applications which use these user interface components thus need to be
debugged on the appropriate machine. If an application is designed with separate user interface dependent
and user interface independent sections, all user interface independent code can be debugged locally.
Simultaneous local and remote debugging
Subject to available memory, you may simultaneously debug up to four processes on the local machine,
together with up to a further four processes on the remote machine.
This is particularly useful, for example, in order to debug client-server applications that communicate via
a Link channel.
If you wish to debug both local and remote processes you may start the debugger for either local or
remote debugging, subsequently making a connection to the other machine, as described later. You have
more direct control over the serial port and baud rate if you start up the debugger for remote debugging.
———SESESES———E—E SS ee ee ee ee ee
Initial display
A single process list view is created when the debugger is started up. This will contain a list of the
processes on either the remote or the local machine, depending on whether the debugger was started up
for remote or local debugging.
If the debugger command line included the path of an image file then this process will be loaded and run,
up to the position specified by the INITIAL_IP command in the configuration file. If the keyword
NO_COMMAND_LINE does not appear in either configuration file, and if you did not include a process
command line in the debugger command line, you will be prompted for a process command line (just
press ENTER if you do not need to pass a command line to the process).
A process window is created to display a debugging view of this process. It will appear in front of the
process list view.
CHAPTER 3
THE GRAPHICS INTERFACE
This chapter briefly describes the graphics interface used by the debugger and the included file manager.
Apart from a few keypress variants, it is similar to that used on the MC200 and MC400 machines. If you
are familiar with either of these you will probably not need to make more than an occasional reference to
this chapter.
Tasks
A running application, or task, is presented within a titled window, with an accompanying command
menu bar. The debugger itself uses a number of titled windows, many of which may be visible at the
same time, to present various aspects of the debugging process.
A task may be controlled by means of either a mouse or keypresses.
If more than one task is running (that is, if you are using both the debugger and the file manager) you are
interacting with only one of them at any given time. This is the foreground task - indicated by the
highlight in its title bar.
You can switch from one task to another either by clicking on the task (hold down the ALT key, if you do
not want the click to be received by the task itself) or by pressing the INSERT key to cycle round the
tasks.
EE SS a a ee er ee
The titled window
A titled window is a rectangular region of the screen, surrounded by a border. The title bar, across the
top of the window, contains textual information and three controls to change the size, shape and position
of the window.
Moving the mouse pointer into any of these three control areas causes the pointer to be replaced by an
appropriate icon.
Resize
The resize control is at the left-hand end of the title bar. Click in this region, or press ALT-[, to activate
the resize control. Resize triangles appear on the corners and sides of the window.
With a mouse, you may drag any of these arrows to change the size of the window, or drag in the central
area to change the window's position.
Pressing one of the four cursor keys moves the window, and holding down the SHIFT key while pressing
a cursor key changes the size of the window (holding down the CTRL key speeds up these processes).
When the window outline is as you want it, press the ENTER key. The triangles disappear and the window
takes the new shape. Or press ESC to cancel the resize.
Move
The move control occupies the central region of the title bar. Dragging in this region changes the
window's position.
To move the window by means of keypresses, use the window movement keys as described for the resize
control.
11
THE SIBO DEBUGGER
Zoom
The zoom control occupies the right-hand end of the title bar.
Click in this region, or press ALT-], to switch the window between its current size and its maximum size.
(If these two sizes are the same, the zoom control will have no apparent effect.) Repeating the process
will reverse the change.
££ ee ae ee ee ee
Iconising a window
The rectangular control at the left of the command menu bar is the iconising control. This control is
disabled for the debugger itself, but is available in the file manager.
Click on this control, or press ALT-ESC, to shrink the application window to its iconised form. This is
useful to clear a cluttered screen, without having to exit the application.
Double click on the icon, or bring the icon to the foreground (with the INSERT key) and press ENTER, to
restore the application window, ready to resume work.
SE SSE ee ee Se er ee ee]
The command menu bar
Command menu bars may contain two kinds of controls, rectangular buttons and angled menus. Select
one of these by clicking on it, or by holding down the ALT key and pressing one of the number keys
along the top row of the keyboard. The buttons and menus are numbered from left to right (not counting
the iconise control) for example, pressing ALT-3 in the debugger's process list top-level view will select
the Process menu.
A button represents a single command option; selecting one has the immediate effect of executing the
corresponding command. Selecting a menu displays a menu list.
When a menu list is displayed, the LEFT and RIGHT cursor keys will switch to neighbouring menu lists.
Select an item within the list by clicking on it, or by using the UP and DOWN cursor keys to move the
highlight to the required item and pressing ENTER.
Press ESC to cance] a menu selection or move the mouse pointer away from the menu list and click.
There are 3 kinds of menu item, which behave in different ways when you click on them:
= items which lead to a dialog box, needing or providing further information; these items are
indicated by ... after the descriptive text
= items which cause something to happen immediately, shown as just descriptive text
= items which are crossed out since they are not available to you at present
rator) to select them without first having to display
the menu list. These accelerators are shown on the right hand side of the menu lists.
In the Debugger the commands that have accelerators may be selected by holding down the ALT key and
pressing the letter, or just by pressing the letter. For example, the Create File Manager command, which
starts up the built-in File Manager, may be selected by pressing ALT-F or, more simply, by pressing F.
Note that, in contrast, the accelerators in the File Manager itself may only be accessed by an
ALT-keypress combination.
Remember that some of the debugger accelerator keys may be assigned to the function keys F1-F10 in the
configuration file.
12
3 THE GRAPHICS INTERFACE
—— SEE = ee ee SS)
Dialog boxes
Dialog boxes contain a number of items, or controls, of varying types. Click on a control to select it, or
press the TAB key to move the highlight onto the next control within the dialog box: press SHIFT-TAB to
move back to the previous one.
Buttons
A button is selected by clicking it, or by moving the highlight to it and pressing ENTER.
Most dialog boxes contain two special exit buttons, labelled CANCEL and ENTER. The ENTER button,
selected by pressing ENTER, confirms the current set of choices and exits the dialog. The EXIT button,
selected by pressing ESC, aborts the dialog, ignoring any changes that may have been made.
Pop-out menus
Click on a menu, or move the highlight to it and press the SPACEBAR to display its contents. Click on the
desired item, or move the highlight with the up and down cursor keys and press ENTER, to select an item.
Tick boxes and diamonds
A tick box offers a Yes/No choice. You set a tick to indicate that you want that option.
Diamonds offer a set of choices which are mutually exclusive - you can choose one and only one.
In either type, click on an item to set or clear it. Alternatively, press TAB until the item you want is
highlighted. Then press the SPACEBAR to tick/untick its box or to shade its diamond.
LEE, ene ee ee eS ee
The file selector dialog
The file selector dialog is a good example of a dialog box in that it incorporates most of the elements
discussed earlier.
A detailed description of this dialog is included here because it is used in many places in the debugger.
For example, in the process list top-level view, selecting the file item in the view menu starts a file
selector dialog.
You use the file selector from within an application whenever you want to save, open or create a file.
There are several ways of selecting a file with this dialog box:
= if you know the name of the file and exactly where it is located, you can type the full file name
into the Selected File edit box.
= use the pointer or keyboard short-cuts to highlight a directory in the left-hand list box and
display its contents (file names and directory names) in the right-hand list, then either select a
file name from this list, or type a new name into the Selected File edit box.
= edit the drive, directory and wildcard specification in the Current Directory box (- you can use
the Extensions pop-out list in just the same way as in the file manager). Then press TAB or
ENTER to see the contents of the directory you want, then select a file name from the list or type
a new one into the Selected File edit box.
If you don't specify an extension for your selected file, then the one in the Current Directory box is
added automatically. If you really don't want an extension for your file, then type a dot after the name.
Use TAB to move around within the file selector dialog. ALT-SPACEBAR moves to the Current Directory
edit box and ALT-DOWN ARROW selects the Extensions pop-out list. The three buttons that change
directories are selected as follows:
Alt-right arrow DESCEND
Alt-left arrow ASCEND
Alt-up arrow DEVICES
These keyboard short-cuts are the same as for the file manager, described in a later chapter.
Selecting ASCEND removes the last directory level from the current directory display box and updates
both the left and right hand list boxes.
13
THE SIBO DEBUGGER
Selecting DESCEND adds the directory level currently highlighted in the left hand list box to the current
directory display box and then updates both the left and right hand list boxes.
Selecting DEVICES displays the top level list of file-system/drives in the left hand list box and displays
the contents of the highlighted device in the right hand list box.
SSS EE EE SE eee ee ee Se)
Help
Context sensitive help is supplied when the key combination CTRL-ALT-TAB is pressed. This displays a
dialog box titled HINTS and contains two list boxes. The right hand box displays a list of topics while
the left hand box displays help information related to that topic.
To change the topic selected, simply use the UP or DOWN arrow keys to highlight a different topic. The
help information in the left hand box changes automatically. The same effect can be achieved using a
mouse by simply clicking on the desired topic.
Typically, help information includes various key press combinations and resulting actions.
The dialog can be terminated by pressing ENTER or ESC or, if using the mouse, by clicking on the EXIT
button.
14
CHAPTER 4
TOP-LEVEL VIEWS
The debugger presents the user with a number of independent windows, each with its own menu bar.
These are known as top-level views and provide views of a range of aspects of a target machine.
The following types of top-level view are available:
Process list a list of all processes running on a machine
File a view of a particular file (assumed to be text)
Segments a list of all existing segments on a machine
Devices a list of all existing devices on a machine
Environment variables _a list of all environment variables on a machine
Process window the main debugging view of a single process
Each of these, with the exception of the process window, is described more fully in the following
sections. The process window is described in a separate chapter.
You may bring a particular top-level view and its corresponding menu bar to the front by clicking on it
with a mouse. Alternatively you can press CTRL-TAB or use the Next top-level view option, with
accelerator ALT-N (and which, depending upon the front top-level view, is in either the Debugger menu
or the Process menu) to cycle through the views.
Various commands have the effect of creating a new top-level view or bringing one of the top-level views
to the front.
In addition to commands whose action is specific to a particular top-level view, many commands are, for
convenience, replicated in the menu bars of several views. To avoid undue duplication, these common
commands are described once, in the documentation of the first view in which they appear.
If shown, the function key assignment for a command is that made in the default configuration file,
described in an earlier chapter of this manual.
5 a ge ee eo
Process list top-level view
You may have up to two process list views, one for the local machine and one for any connected remote
machine. The title bar of the view informs the user of the machine to which it relates.
A process list view presents the user with a list of processes on either the local or the remote machine.
The list is a snapshot of the relevant machine at the time the list is built. The list can be updated at any
time by selecting the Regenerate list option from the View menu.
A process can be selected from the list by moving the highlight. Various operations can be performed on
the selected process.
The current target
The machine on which a process that is being debugged is running is known as the target machine. There
are therefore two target machines when the user is simultaneously debugging processes on both the local
and remote machines.
At any one time the user is interacting with one particular process. The machine on which this process is
running is known as the current target.
When many top-level views exist, it may not always be obvious which machine is the current target.
Since all top-level views are derived (that is, created either directly or indirectly) from a process list
15
THE SIBO DEBUGGER
eee
view, the process list view from which the current front window is derived always defines the current
target.
For example, if the current top-level view is a file view it could be displaying a file from either
machine. If, however, it was created from the remote file list view, then the current target is the remote
machine.
Selecting the Process list option from the View menu will always bring the process list view of the
current target to the front.
Debugger menu
Cycle to the next top-level view.
Create and run an independent file manager application. This enables you to copy, delete or otherwise
manipulate files without having to exit the debugger. It is particularly useful for copying files between
the local and remote machines.
age
Present a file selector to select and run an image file. The resulting process runs on the current target
machine. For more detail on the dialog, see the section on the file selector dialog in The Graphics
Interface chapter.
Exit the debugger after requesting confirmation.
Local/Remote CPU menu
Connect to either the remote or the local machine, depending on whether the current target is either the
local or remote machine respectively.
If the connection does not previously exist and is successfully made, an appropriate process list view is
created and brought to the front, setting the current target.
If the connection currently exists, the appropriate process list view is simply brought to the front, setting
the current target.
Display the machine type and version information about the software components of the current target.
The software built into the ROM of a SIBO machine consists of the EPOC operating system, together
with a number of independently built sections of code, many of which exist as separate processes. The
version of the software in a particular machine is characterised by the version number of the operating
system and of the ROM as a whole.
16
4 TOP-LEVEL VIEWS
Process menu
Load
You are prompted for a process command line, unless the NO_COMMAND_LINE keyword appears in either
configuration file. The process command line content is as discussed in the earlier description of the
debugger command line.
The debugger checks the configuration files for any BREAKPOINT keywords. For each one found it attempts
to evaluate the symbolic address and, if successful, adds that address to the breakpoint table held for the
process.
Execution halts at a temporary breakpoint placed at the address specified by any INITIAL_IP ina
configuration file. If no INITIAL_IP is specified, or if the specified address cannot be evaluated, no
process code is executed and execution halts with the instruction pointer positioned at the process entry
point.
Once execution has halted the debugger creates a process window. It determines the initial display mode
by checking to see if source code information is available for the code at the current instruction pointer
address (looking in the current directory and in any paths specified in the configuration files).
If source code information is available the process window is set up to contain a single code view,
showing source code at the current instruction pointer. Otherwise the process window is tiled with an
assembly language code view, a registers view, a stack view and a data view.
The debugger will automatically download a process to the remote machine if the selected image file is
on the local machine and the current target is the remote machine. This can take a significant length of
time. Copying the file to the remote machine, for example by using the built-in file manager, will speed
up the process, but has the disadvantage that the file must be recopied each time it is changed.
If the process takes a significant length of time to reach the INITIAL_IP address, the debugger will present
a special top-level view allowing the user to un-load the process, re-load the process, exit the debugging
session or set other breakpoints in the process. Early versions of the operating system do not permit the
setting of other breakpoints in this situation. If the version of the operating system on the target machine
does not support this option then the debugger will report an error.
This command brings a running process under the control of the debugger. This is done by allowing the
user to set breakpoints in a process at a point that the process will hit in the future, probably in response
to some user input.
Select a debuggable (for example, not in the ROM- the debugger cannot set breakpoints in hardware!)
running process in the process list menu and select the Break into option. This brings up a special version
of a process window with a modified command menu, displaying the code of the selected process. Note
that, at this stage, the process is still running.
Select one or more breakpoint addresses, of which at least one should be at a point in the code that the
process will hit at some future time. These breakpoints are stored but have not, as yet, been applied to
the code.
Use the Apply breakpoints option in the Process menu to apply the breakpoints to the code. When the
process hits one of these breakpoints it is brought under control of the debugger and the process window
reverts to its normal menu.
This mechanism allows multi-process applications to be debugged without any special code being
required in the process that launches other processes.
As a typical example, a parent process is debugged to the point where it calls p_execc to load another
process. If this is successful, regenerate the process list so that it includes the loaded process. This
process will be in the suspended state, awaiting the parent process to resume it by calling p_presume.
Before allowing the parent to call p_ presume, select the loaded process from the process list and use the
Break into option. Since execution of the loaded process has not yet started, main is a suitable position at
which to apply a breakpoint.
17
THE SIBO DEBUGGER
Display status information about the process highlighted in the process list.
Perform an integrity check on the heap space of the process highlighted in the process list. A dialog
shows the result of this check, together with information about stack usage by the process and segment
size.
View menu
Bring the process list view for the current target to the front. If a process list is already highlighted, then
selecting this menu item does nothing.
Present a file selector dialog to choose a source file to display in a file view. For more detail on this
dialog, see The Graphics Interface.
Create and display a segment view for the current target.
If the segment view exists it is simply brought to the front.
Create and display a devices view for the current target.
If the devices view exists it is simply brought to the front.
Create and display an environment variable view for the current target.
If the environment variable view exists it is simply brought to the front.
Regenerate the list of processes in the process list view of the current target.
SaaS SS Se a ee
File top-level view
You may have up to two file views, one for the local machine and one for any connected remote
machine. The title bar of the view informs the user of the machine to which it relates.
A file view presents the user with a view of a source file.
This top-level view is created by selecting the file item in the view menu of a process list top-level view
as discussed earlier.
View menu
Delete the front top-level view.
18
4 TOP-LEVEL VIEWS
Locate menu
If found, position to the line containing
the text. If not found, an error is reported by displaying the message "no matching string found".
Perform a case-insensitive forward search from the current position for the text specified in a previous
Search command. If found, position to the line containing the text. Again, if not found, an error is
reported by displaying the message "no matching string found".
SSS SS ae ey
Segment top-level view
You may have up to two segment views, one for the local machine and one for any connected remote
machine. The title bar of the view informs the user of the machine to which it relates.
A segment view presents the user with a list of the segments that exist on either the local or the remote
machine. The list is a snapshot of the relevant machine at the time the list is built, but the list can be
updated at any time by selecting the Regenerate list option from the View menu.
The segment list is a symbolic display of the segment table that exists on the target machine. The list will
generally contain a small number of additional entries, representing system libraries built into the ROM
as .dyl files. The debugger simulates these segment handles since many applications use these system
libraries.
No new menus or menu items are introduced in this top-level view.
This top-level view is created by selecting the segments item in the view menu of a process list top-level
view as discussed earlier.
SS a ee eS eS ee a]
Devices top-level view
You may have up to two device views, one for one for the local machine and one for any connected
remote machine. The title bar of the view informs the user of the machine to which it relates.
A device view presents the user with a list of the segments that exist on either the local or the remote
machine. It is a symbolic display of the machine's device table. The list is a snapshot of the relevant
machine at the time the list is built, but the list can be updated at any time by selecting the Regenerate list
option from the View menu.
No new menus or menu items are introduced in this top-level view.
This top-level view is created by selecting the devices item in the view menu of a process list top-level
view as discussed earlier.
SSS aE ee en ee)
Environment variable top-level view
You may have up to two environment variable views, one for the local machine and one for any
connected remote machine. The title bar of the view informs the user of the machine to which it relates.
An environment variable view presents the user with a list of the environment variables that exist on
either the local or the remote machine. The list is a snapshot of the relevant machine at the time the list
was built, but the list can be updated at any time by selecting the Regenerate list option from the View
menu.
19
THE SIBO DEBUGGER
You can select a particular environment variable by moving the highlight. Use the Follow option of the
Variable menu to view the contents of the selected variable.
This top-level view is created by selecting the environment variables item in the view menu of a process
list top-level view as discussed earlier.
Variable menu
type and radix, set by the Set format option.
One or more values, separated by commas, may be typed into the dialog's edit box. These values are
written into successive positions in the environment variable, starting at the selected item, overwriting
any previous content.
Tick the Set length check box to adjust the length of the environment variable's data so that it terminates
after the last value written from the edit box.
Note that this menu item is only available if the contents of a selected environment variable is being
displayed after having chosen the Follow menu item in rhis menu.
Set the format and radix for the viewing and setting of environment variable data.
The data format may be set to one of BYTE, WORD, LONG, FLOAT, or DOUBLE and the radix may be set to
decimal, octal or hexadecimal (the radix has no effect for FLOAT and DOUBLE formats).
Again, this menu item is only available if the contents of the selected environmental variable are being
displayed.
Clear the content of the environment variable whose value is currently displayed. Note that the warming
message "variable has no value" will be displayed after selection of this menu item.
Again, this menu item is only available if the contents of the selected environmental variable are being
displayed.
Switch from displaying a list of environment variables to displaying the data stored in the currently
selected environment variable. A movable highlight marks the current value.
The content of an empty environment variable, for example, after using the Clear option, is displayed as
a question mark (?).
TEMIOUS . __ CE P or P
Return from the display of an environment variable value to the environment variable list.
Se r—“——OOOOiOCOisrsCisSCSsSiSsSC ory
Perform a case-independent forward search from the current position for the specified text. If found,
select the environment variable whose name contains the text. If not found, an error is reported by
displaying the "no matching string found" message.
Perform a case-insensitive forward search from the current position for the text specified in a previous
Search command. If found, select the environment variable whose name contains the text. If not found,
an error is reported by displaying the "no matching string found” message.
If there has been no previous search, the behaviour is as for Search.
20
CHAPTER 5
THE PROCESS WINDOW
A process window is the top-level view that is concerned with debugging a single process. Its title shows
the name of the process, on which machine the process is running and the status of the process - either
Halted or Running.
For a halted process the title bar also shows the number of system ticks that have elapsed from the last
time that the process started to run to the time when it was halted.
There is one process window for each process that is running under the debugger's control and so there
may be up to eight process windows, showing up to four local and four remote processes.
Each process window contains a number of sub-views showing a range of views of the process. Each
sub-view has its own titled window and menu bar. The different types of sub-view are:
Code an application code module
Code segment content of the code segment
Data segment content of the data segment
Registers contents of the processor registers
Stack stack content
Symbols symbol table data
Variable the value of a variable
Magic statics values of the reserved static variables
File content of any text file
The initialisation of a process window is explained in the previous chapter, in the description of the Load
option of the process list top-level view. Depending on whether source code is available at the position
(INITIAL_IP) where execution first halts, the initial process window contains either a single source code
sub-view, or a tiled combination of assembly language code, registers, stack and data segment sub-views.
In both cases the code view is the front view.
In the process window ALT-], ALT-[ and ALT-SHIFT-] zooms, moves and resizes the front sub-view as
described in The Graphics Interface chapter. To zoom, move or resize the process window itself, use
ALT-CTRL-], ALT-CTRL-{ and ALT-CTRL-SHIFT-].
Alternatively, if a mouse is available use it to zoom, move or resize either the process window itself or
the front sub-view by selecting and clicking on the appropriate window control.
In addition to commands whose action is specific to the process view or a particular sub-view, many
commands are, for convenience, replicated in the menu bars of several views. To avoid undue
duplication, these common commands are described once, in the documentation of the first view in which
they appear.
If shown, the function key assignment for a command is that made in the default configuration file,
described in Starting up the Debugger earlier in this manual.
Tracking views
Most of the sub-views that may appear in a process window will update their contents after the execution
of code. (The exceptions are the symbols and file views, which assume that their data do not change.)
In addition to updating its contents, the initial code view will move to ensure that the view contains the
data at the current instruction pointer value. Such a view is known as a tracking view.
The optional stack view is also a tracking view, following the stack pointer as well as updating its data.
21
THE SIBO DEBUGGER
Panics
The operating system will summarily terminate (or panic) a process if it detects any of a number of
serious error conditions in that process.
The debugger intercepts all processes that are panicked, regardless of whether the process is currently
being debugged or not. If such a process is panicked, a notifier appears, reporting the panic. The process
is brought under control of the debugger and displayed in a newly-created process window.
When this happens you can use the procedure explained later, in the description of the stack view, to
determine the origin of the panic.
ae ee eee eee een ee)
The code view
A code view may display code from any segment and is capable of switching to another segment at any
time.
In addition to the initial tracking code view you may create a further four non-tracking code views. This
number may be reduced by the presence of code segment and data segment views. You may delete any of
these additional code views, but the initial code view is undeletable.
A code view has three modes of displaying code. These are, from lowest to highest:
8 assembler
= mixed assembler and source
= source
The Set display mode option from the Data menu allows you to select the required display mode. Subject
to the availability of source symbol information, the code window will display the code in the highest
mode that is compatible with the selected mode. All code views are created with a source level display
mode.
Provided the current instruction pointer value matches the address of a line of code being displayed, the
tracking code view contains a pointer symbol to indicate the instruction pointer position. (It is possible,
when displaying source code, that the instruction pointer value does not match the address of any source
line, in which case the pointer symbol will not be visible.).
Note that if the code view is switched from source to assembler or mixed and then back to source again,
it is possible that the view will continue to display assembler or mixed code. This is most likely to occur
where, in between switching views, the code view has been scrolled to the pre-amble at the front. Where
this is the case, simply scroll down again to regain the source view.
If a process changes code segment during execution the debugger will, when the process stops execution,
automatically attempt to load any symbol information it can find for that segment (if not already loaded).
The initial 'minimized' (ALT-]) size of a tracking code view is such that the registers, stack and data
views, when created, will tile the process window.
Assembly language INT instructions
EPOC uses the INT instruction to implement operating system calls. When viewing code, nearly all INT
instructions are symbolically disassembled to the appropriate operating system call.
Process menu
AICN, N or CTRL-TAB
Display status information about the process being debugged; for example, the process name and the
process id.
22
5 THE PROCESS WINDOW
Terminate the process then reload it from the original .img file, with the original command line. Any
breakpoints currently set in the process are preserved.
Only a process that was originally loaded by the debugger can be reloaded.
Terminate the process being debugged and close the process window. No other processes currently being
debugged are affected.
Exit the debugger after requesting confirmation.
View menu
The menu items in this menu select and display the sub-views of the current process as described at the
beginning of this chapter.
Two list boxes allow selection of one of the application's code segments (it may only have one code
segment) and a source module within that segment. The lists only contain those segments and modules
for which source code is available.
The primary use of these views is to facilitate the setting of breakpoints.
Create a non-tracking code view with initial address of zero within the process code segment (this will
typically be assembler).
This provides very similar functionality to the Source module option, but allows the creation of a non-
tracking code view even if no source code is available.
Create a data view with initial address of zero within the process data segment. This menu item will be
disabled (as will source module, code segment and symbols menu items) if five such views exist.
Symbols
Create a symbols view. This menu item will be disabled (as will source module and code segment menu
items) if four such views exist.
This presents a list box containing the names of the segments for which the debugger has loaded a global
symbols (.map) file. Select the required segment and press ENTER.
23
THE SIBO DEBUGGER
Vv ALY
Create a view of the currently highlighted variable, provided the debugger can find a source level
descriptor of that variable. This menu item will be disabled (as will the magic statics menu item) if four
variable views exist.
This option is mainly of use when viewing the code in source mode. Trying to use it when viewing in
either of the other two modes will generally result in the debugger reporting that no such variable can be
found.
Run menu
Execute one unit of code, executing any intervening function calls. The unit is dependent on the current
tracking code view display mode. The action is unaffected by the presence or absence of a breakpoint at
the current instruction pointer address.
If the tracking code view is currently displaying source code, process code is executed until the next line
of source is reached. Any intervening function calls will be executed in full (unless they contain
breakpoints). Stepping on a return instruction will cause the process to stop in the calling function.
If the tracking code view is currently displaying assembler or mixed source and assembler, one machine
code instruction is executed unless it is a CALL instruction, in which case the code of the function call will
be executed in full (unless it contains breakpoints).
The exception to these rules is when stepping over INT instructions corresponding to calls to the two
operating system calls LibLeave (p_teave in PLIB) and LibSendexit (return from a message sending call,
with no PLIB equivalent). These change the contents of the instruction pointer by effectively performing
a far return. If the debugger is requested to step over either of these operating system calls, it attempts to
halt execution at the destination address. If this is not possible (say, because the destination is in the
hardware ROM) an error is reported.
If there are breakpoints within any call that would otherwise be executed in full, execution will terminate
at the first breakpoint encountered.
If this is an unwanted breakpoint at this time you can select the Previous option within the Locate menu
of the code view to go back to the code position that was stepped from, move the highlight to the line of
code the Step would have gone to and use the Run to here option.
Execute one unit of code, tracing into any function call. The unit is dependent on the current tracking
code view display mode. The action is unaffected by the presence or absence of a breakpoint at the
current instruction pointer address.
If the tracking code view is currently displaying source code execution continues until either the next line
of source is reached, or a function call or return is encountered. If a function call is encountered the
process will enter that function call before execution halts.
If the tracking code view is displaying assembler or mixed source and assembler this request will cause
the process to execute one machine code instruction.
24
5 THE PROCESS WINDOW
_ SeSeSSSSSSSSSSSSSSSSSSMMMhhe
Tracing an INT instruction (usually an operating system function call) will, in general, cause the debugger
to step over the INT instruction. Although there is nothing, in principle, which prevents tracing through
ROM code, it is not possible to trace into an INT instruction. This would break fundamental operating
system rules which do not allow interrupts whilst building an operating system stack frame.
There are exceptions to this rule when the INT instruction corresponds to a call to an operating system
function that effectively performs a far call or a far return. The relevant operating system calls, and their
PLIB equivalents, are:
LibEnter p_enter
LibLeave p_leave
LibSend p_send
LibSendSuper p_supersend
LibSendExact p_exactsend
LibEnterSend p_entersend
LibSendExit
Note that LibsendExit is only called by the operating system and does not have, or require, any C
equivalent.
If one of these INTs is encountered by the debugger it will determine the destination address, generate a
temporary breakpoint there and allow the process to run to that breakpoint. If the temporary breakpoint
would be in the hardware ROM, the debugger reports an error.
Run the process until it terminates or until a breakpoint is hit.
If there is a breakpoint at the current instruction pointer, one machine code instruction is traced before
the breakpoints are applied. This allows code that is performing a repetitive task to execute the next cycle
before hitting the same breakpoint. In this situation, many debuggers require you to trace one instruction
manually before running to execute the next loop.
Se E—tFeEeF—EHRHRNRNGD cs i §$eisi( i&§$
Run to the position indicated by the highlight. The debugger generates a temporary breakpoint
address and allows the process to run.
OF Fa
for that
Not all source code lines have an address, if one of these is selected then the debugger will report an
error and not run the code.
To run to the start of a function you must set the highlight on the first line of code within the function,
rather than on the function declaration.
This is because the JPI compiler does not output the source line number and machine code offset for any
function declaration line of code. (It may also be noted that the first line of source code in a function
generally does not mark the first machine code instruction executed within a function - there will usually
be additional code to generate a stack frame.)
Break menu
Breakpoints .
Set or clear one or more breakpoints.
The dialog shows a list of the current breakpoints. You may enter additional breakpoints, or either delete
or temporarily disable any of the existing ones.
To add a breakpoint, enter into the edit box a function name or a function name plus an offset at which
execution is to be halted and press ENTER. If an offset value is included, be absolutely sure that this
points to a valid instruction or the results will be unpredictable.
Each breakpoint has an associated pass count (set, by default, to 1). This is the number of times which
the process must pass the breakpoint address before the debugger actually halts execution. This feature is
useful for setting breakpoints within loops, to examine the process state after a certain number of times
around the loop. The maximum pass count that can be set is 65535.
Selecting the Enabled check box changes the enabled state of the highlighted breakpoint.
25
THE SIBO DEBUGGER
Ticking the Disable breakpoints check box disables all breakpoints. It is a convenient means of
temporarily disabling breakpoints whilst, for example, stepping through code. On clearing the Disable
breakpoints check box, all breakpoints revert to their enabled states, as shown in the list box.
Note that the Enabled tick box, the Pass Count display and the Delete button will not be displayed in the
dialog box if there are NO existing breakpoints.
Set a breakpoint at the highlighted line.
Not all source code lines have a corresponding address. If you attempt to set a breakpoint on such a line
the debugger will report an error.
To set a breakpoint at the start of a function you must set the highlight on the first line of code within the
function, rather than on the function declaration (or use the Breakpoints option and type in the function
name). For an explanation, see the earlier description of the Run to here option in the Run menu.
Data menu
Select the preferred display mode as one of:
= assembler (lowest)
= mixed assembler and source
= source-level code (highest)
Depending on the availability of source information, the code is displayed in the highest mode that is
compatible with the selected mode.
egme
Perform an integrity check on the heap space of the process being debugged from the current window.
This is equivalent to a call to the PLIB function p_alichk. A dialog shows the result of this check,
together with information about stack usage by the process and the segment size.
Display the error text, if any, associated with the value in the AL register.
Many operating system calls generate errors. These are indicated by setting the Carry flag and placing a
negative error code into the AL register. (The PLIB library functions sign extend that number into a
negative error number in the AX register and thus return a negative result.)
Display the panic text, if any, associated with the value in the AL register.
The operating system will summarily terminate (or panic) a process if it detects any of a number of
serious error conditions in that process. On such a termination, a reason code is placed in the AL register
to assist in identifying the nature and possible cause of the error condition.
The debugger intercepts all processes that are panicked, regardless of whether the process is currently
being debugged or not.
Locate menu
Attempt to determine the address to which the process would go if the current instruction were executed,
and move the highlight in the code view to that address. The intervening code is nor executed.
26
5 THE PROCESS WINDOW
For a CALL instruction the debugger will go to the start address of the function being called.
For a BRANCH instruction (conditional or unconditional) the debugger will follow the branch, irrespective
of the current value of the flags register.
For an INT instruction the debugger will usually go to the instruction following the INT. Exceptions to
this are INT instructions corresponding to the operating system calls LibSend, LibSendSuper, LibSendExact,
LibEnterSend, LibEnter, LibLeave Or LibSendExit for which the highlight will be set to the appropriate
destination address. For further explanation, see the description of the Trace option in the Run menu.
Note that the debugger uses the current register set to determine the destination address, on the
assumption that the INT instruction was reached by executing code. If the registers have not been set up to
contain the correct values the debugger will generally report an error, but may go to the wrong address.
For any other instruction the debugger will go to the next instruction/source line.
Return to the last previous stored position in the view of the code.
Up to the last eight previous positions are stored automatically by any of the options that move to another
position in the code (for example, Step, Trace, Goto address).
The address can be specified as a valid decimal or hexadecimal value.
To go to an address within the current segment, simply enter the offset within that segment. To go to a
different segment, enter the symbolic name of that segment, followed by a colon (:) and the offset within
that segment. To go to an address that is currently stored in a register you may enter the register's
symbolic name, for example, entering tp (or ip) moves to the position indicated by the instruction
pointer.
If the address can be evaluated the code view is moved to the specified address.
Display code at the specified source code line number.
This option has no effect if the current code view is not showing source code.
Perform a case-independent search forwards from the current position for the specified text. An error is
reported if the text is not found.
This option is only effective if the current code view is showing source code.
If no previous search has been made, then the effect is the same as for Search.
This option is only effective if the current code view is showing source code.
Breakpoints in dynamic libraries and other shared code
Processes running under the EPOC operating system frequently make use of shared code. Two
simultaneously running processes of the same program, for example, share the same code segment. There
is only one loaded copy of the code of a dynamic library, irrespective of the number of processes that are
currently accessing it.
Setting a breakpoint in shared code therefore means that all processes sharing the code will, at some time,
encounter the breakpoint.
27
THE SIBO DEBUGGER
The debugger is notified of all such events, but can distinguish between breakpoints that are encountered
by a process under its control and those that are not. Processes not under the debugger's control are thus
not affected by the breakpoints, except by a decrease in their speed of execution (provided, of course,
that the breakpoints were set by the debugger).
When a process opens a dynamic library, the code may or may not be physically loaded, depending on
whether the code is currently in use by another process. Similarly, the code may or may not be unloaded
when a process closes a dynamic library.
The debugger can not guarantee to distinguish between these two cases, or to know whether the code has
been unloaded, or been unloaded and either reloaded or replaced by other code while not being accessed
by the process being debugged. If you are in a situation where this may have occurred, using the Source
module option of the View menu will force the debugger to re-evaluate its internal record of the contents
of memory segments. As part of this process the debugger will disable breakpoints that are set in
segments that no longer exist.
To guard against breakpoint errors you should not attempt to set a breakpoint in a dynamic library until
you are sure that it is loaded, that is, until the process you are debugging has opened the library.
For similar reasons, it is advisable to either disable or remove breakpoints in:
= dynamic library code, before the library is closed by the process being debugged
= before exiting any code that may be shared with another process
Se © ee ee ee ee ee eee
The data view
A data view presents a view of the contents of a single data segment. Each process may have up to five
data views.
By default the initial view of the data is as bytes, in a byte dump format. When the data view display
format is of bytes you can move the highlight between the left-hand byte display and the right hand text
representation with CTRL-LEFT ARROW and CTRL-RIGHT ARROW.
When the process stops running, a data view is automatically updated to reflect any changes in the data
currently being displayed.
Typically a data segment dynamically changes size during process execution, as demands are made on the
heap. The debugger resizes the view limits as appropriate.
Although a data segment may be up to 512k bytes in size (the maximum size of an EPOC operating
system segment) most segments, including the process data segment, do not exceed the 64k byte directly
addressable limit of the 8086 processor. Data window addresses are automatically displayed either as 16
bit or 32 bit numbers, depending on whether the data segment size is less or greater than 64k bytes.
Locate menu
Display data at the address indicated by the highlight in the data window. If the address is out of range
for the current data segment the debugger will report an error.
If the display is of bytes then the highlighted value is assumed to be the low byte of the address and the
next byte in the display is taken as the high byte. If the display is of words or longs then the address is
simply the highlighted value. An error message is presented if the display is of floats or doubles.
This option is useful, for example, to follow linked lists in the data space.
OL PEP
Return to the last previous stored position in the view of the data.
Up to the last eight previous positions are stored automatically by use of the Follow or Goto address
options.
28
5 THE PROCESS WINDOW
The address can be specified as a valid decimal or hexadecimal value.
For an address within the current data segment, just enter the segment offset. To move to another
segment, enter the symbolic name of the segment, followed by a colon (:) and the segment offset.
An error is reported if the destination address is outside the valid address range for the relevant data
segment.
Data menu
ro
Change one or more items of data within the data segment, where each item corresponds with a unit of
displayed data in the current format.
The user is presented with a dialog whose title indicates the current segment name and offset
(corresponding to the highlight in the display). Modifications to the data will be made from this address
onwards.
The dialog accepts a series of comma delimited items which should represent values to be entered at
successive addresses, in the context of the display. For example, if the current display format is of word
values, all the items are expected to evaluate to words and will replace successive words in the data
segment.
Quoted strings (using either double or single quotation marks) are valid input when the display is of
bytes. Use single quotes to insert the characters as typed, and double quotes to insert the characters as a
zero-terminated string. In all cases, non-quoted strings are assumed to be symbolic values (including
register symbolic names).
Items can include decimal and hexadecimal values provided that they evaluate to sensible values for the
current display format.
If an item can not be validly evaluated, that item is highlighted and an error status message is displayed.
All items up to the one containing the error will have been written to the appropriate addresses.
a a eG EE ag RE ee oe ae LE ET
The registers view
Each process can have only one registers view, showing the register set for the process being debugged.
The register set is evaluated each time the process is halted after executing some code. The registers and
status bits that have changed from the previous set are highlighted.
By default the view shows only the current register set. Increasing the size of the window allows it to
show up to the last 8 register sets.
The processor flags register is displayed as a series of bits having the value of 0 (clear) or 1 (set). The
characters that represents the status bit flags are as follows:
Overflow
Direction
Interrupt
Sign
Zero
Auxiliary carry
Parity
Carry
OUPRrRN YH TO
a i
29
THE SIBO DEBUGGER
—_—_ SSS
The segment registers are not displayed. As is described earlier, in the Introduction chapter, segment
addresses do not have any great significance in application programs running on SIBO machines, since
the EPOC operating system may move memory segments. For this reason the registers view does not
display the contents of the segment registers.
Also, some 8086 flags are not displayed. The Trace flag, for example, is used by the debugger itself to
trace instructions. An application may not set the Trace flag; if it attempts to do so it will be suspended
by the debugger.
Data menu
Select display of register values in octal, decimal or hexadecimal.
Present a dialog to modify the contents of the registers and/or the status bits.
To set a register to symbolic value select the Evaluate button to bring up a dialog in which the symbolic
name can be entered.
Se ee a i a er ay
The stack view
Each process may have only one stack view. It is a tracking view, displaying the stack of the process
being debugged.
The stack is displayed as a series of 16 bit values. When the process stops running the stack view is
automatically updated to reflect any changes in the SP register and the data on the stack.
If the debugger loaded the process it knows the stack size (this information is stored within the loaded
.img file) and thus limits the upper address of the display to the stack top. If the debugger did not load
the process now under control of the debugger and it cannot find the .img file the process was loaded
from, the stack will extend to the end of the data space of the process.
Operating system stack frames.
All operating system calls generate an operating system stack frame. This consists of the interrupt frame
generated by the INT instruction which implements the call, followed by the DS and ES segment
registers, the BP register, the operating system stack frame linkage value and finally various values -
including any registers that need to be preserved. (Interrupts are disabled for the duration of this process,
to prevent memory being moved while the stack frame is being built.)
The typical instructions executed when an operating system function is called are:
int XX generates Flags, CS and IP on stack
push ds
push es
push bp
push [DatOsFramePtr] a magic static value
mov ([DatOsFramePtr], sp
mov bp, sp
The stack view typically presents this as:
0908 DatOsFramePtr
O90A BP register
090C ES register
O90E DS register
0910 IP return address
0912 CS return address
0914 Flags return value
The BP register may be used by the operating system as a scratch variable, but the value at DatOsFramePtr
- memory address 30 (Ox1e) in the process data space - always contains a pointer to the last stack frame.
30
5 THE PROCESS WINDOW
jj eee
The CS and IP return address will indicate the code address that the operating system call was made
from. Viewing this code will enable the user to track further back and find the local function calls and
parameters to those functions.
Unfortunately the CS return address is the absolute segment address and the debugger has no mechanism
by which it can automatically determine the code segment to which this value refers. You can determine
the code segment by creating a segment view from the appropriate target and looking in the address field
for the CS value.
Very occasionally, memory segments may have moved between the time the debugger read the stack data
and the time the segment list was created and so it is possible that the CS value does not match any item
in the list. In such a case, regenerating both the segment view and the stack view (delete it and recreate
it) will resolve any differences.
Locating the origin of a panic
When a process is panicked by the operating system, the debugger stops the process at the point at which
the process was panicked.
To find out what code the process was executing, you have to trace back through the stack frames to
build up a list of the operating system calls that have been made. Before doing so you must first perform
the following steps:
= use a data view (or magic statics view) to find the contents of memory location DatOsFramePtr -
memory address 30 (Oxle) - in the process data space
= move the data view to that memory location and read its contents
= move the stack view to this address
The stack may now be interpreted as described earlier.
The extra level of indirection is required because the process, when panicked, makes a further operating
system call to tell the debugger that it has panicked. In this situation the SP address must be adjusted via
the data space contents, as described above.
Locate menu
Olle ...—v.__..._.aiaii_iw
Move the stack display to the address given by the contents of the currently highlighted stack item.
This option is useful, for example, for following operating system call frames.
Pre
Return to the last previous stored position in the view of the stack.
Up to the last eight previous positions are stored automatically by use of the Follow or Goto address
options.
Goto address —«i_.nj Gor (F10)
Prompt the user for a destination address and, if the address is valid, move the view to that address. You
may enter the symbolic name of a register (ep and sp are particularly relevant) to go to the address
contained in that register.
The address can be specified as a valid decimal or hexadecimal value.
An error is reported if the destination address is outside the valid stack address Tange.
Data menu
THE SIBO DEBUGGER
The user is presented with a dialog whose title indicates the current segment name and offset
(corresponding to the highlight in the display). Modifications to the data will be made from this address
onwards.
The dialog accepts a series of comma delimited items which should represent 16 bit values to be entered
at successive addresses. Items can include decimal and hexadecimal values. For example, if the highlight
is at address 0x9cO then entering 1,2,3 will set the word at address 0x9c0 to 1, the word at 0x9c2 to 2
and the word at 0x9c4 to 3.
If an item can not be validly evaluated, that item is highlighted and an error status message is displayed.
All items up to the one containing the error will have been written to the appropriate addresses.
Quoted strings are not valid data in the stack view. (If you want to modify a string on the stack, you can
position a data view to the appropriate location and use its Modify option.)
ESS Sa ee ee ee en a ee Se SY
The symbols view
A symbols view displays a list of symbols and their corresponding addresses for a memory segment, read
from a .map file.
If a program has multiple symbols for a single address, the debugger will only load the first symbol
encountered for that address when reading the .map file. The symbols view enables you to determine
which of these symbols the debugger has loaded.
A common way that this may arise is in the case of a function can take a variable, but limited, number of
parameters. To allow JPI prototyping to check the number of parameters being passed to the function,
you might declare a separate function for each of the parameter variants. The actual code, however, may
only exist as one routine.
i eee eee ee eee)
The variable view
Each process may have up to four variable views, each of which provides a symbolic display of a
program variable. A variable view will be updated automatically when the process stops execution after a
trace, step or run.
To view a variable you should move the code view highlight to the variable to be viewed and select the
Variable option from the View menu.
The debugger follows C scope rules when selecting the variable to be viewed, that is, automatics are
selected before statics.
Before viewing an automatic variable (declared on the stack) the instruction pointer must be within the
function in which the variable is declared - and you must have run, traced or stepped to at least the first
line of the source code. (When the debugger traces into a routine it does not execute the stack frame
generation code automatically. Creating a variable view immediately after stepping into a function will
therefore not display data at the correct address.)
Beware of selecting a variable when instruction pointer is in another function which declares a variable of
the same name - the debugger will generate a view of the variable in the function containing the
instruction pointer, rather than the selected one.
The variable name is handled in a case-insensitive manner and the debugger will not, for example,
distinguish between the variables myvariable and myVariable if they are both declared in the same
function. It is, in general, unwise to choose names that differ only slightly from each other.
The debugger does not inform you if the variable goes out of scope. In such a case the variable contents
will typically show nonsense values.
Display formats for variables
The variable view provides a multi-level view of complex data types. Each level of the view presents a
cross section of the data structure under examination. The levels can be traversed by using the Follow
and Previous options of the Locate menu.
32
5 THE PROCESS WINDOW
Within a variable view, ENTER and ESC are keyboard shortcuts for Follow and Previous.
The basic data types such as chars, ints, longs, floats and doubles form terminals of a data structure; the
debugger cannot traverse the data structure through any of these variable types. These differ from arrays,
structs unions and pointers; the debugger can traverse these data structures to provide the next level view.
Basic data types
Signed and unsigned chars, signed and unsigned ints, signed and unsigned longs, floats and doubles have
the following display format:
(address) name type value
The address field is the hexadecimal address of that variable within the process data segment. The name
field is the symbolic name of the variable, as selected in the source code view. The type field indicates
the variable type. The value field displays the current value of that variable, with the decimal value in
brackets, if appropriate.
These variables can not be followed. The debugger will simply present the same view if the Follow
option is selected.
For example:
(0x832) i signed int 0x43 (0067)
(0x834) ing unsigned long 0x21 (00000033)
(0x838) dt double 1.2e10
Pointers
All pointers are 16 bit values and are displayed as follows:
(address) name type * ptr_value (data)
The address field is the hexadecimal address within the process data segment of that variable. The name
field is the symbolic name of the variable, as selected in the source code view. The type field indicates
the type of the variable at which the pointer points. The * character(s) indicate the current level of
indirection of the displayed data; multiple * characters indicate that there are several more levels of
indirection before the terminal data is reached.
The ptr_vatue field displays the current value of the pointer. The data field is only displayed if the
pointer is at the first level of indirection. It shows the first element of the data to which the pointer
points. The data value is shown in decimal with, if appropriate, a preceding hexadecimal value.
For example, pointers to each of the above example fields would show:
(0x802) p unsigned char * 0x832 (0x43,0067)
(0x804) plng unsigned long * Ox834 (0x21,00000033)
(0x806) pdi double * 0x838 (1.2e10)
If the pointer is one to a basic data type (bytes, ints, longs, floats and doubles) using the follow option
will display up to 128 bytes at the address pointed at in the mode of the pointer, ie a pointer to longs will
display up to 128 bytes (32 longs) as longs.
If the pointer is one to a more complex data type, that data type will be displayed.
Structures and unions
If the data element being viewed is a structure or union, each field of the structure, or element of the
union, is displayed on a separate line. If one of the elements is itself a structure, this is indicated.
Selecting such a line by highlighting it and using the Follow option from the Locate menu will generate a
new view level, with the sub-structure fields now being individually displayed.
Arrays
If the elements of an array are of a single basic data type, the array elements are presented in a layout
similar to that of a data view. The display format is automatically determined from the array element
type.
For arrays of complex data types, each array element is displayed on a separate line, as for structures.
33
THE SIBO DEBUGGER
Enums
Enums are displayed in the same way as the basic data types. Provided the current value of the enum is
within its defined range, an additional value field shows the symbolic name of the enumeration value.
Bitfields
A bitfield is treated as a structure, with each component field being displayed as a basic data type. The
addresses of all the component fields will, however, be identical.
The Modify option of the Data menu can not be used to modify an individual component field. It will
only modify the bitfield as a whole and it is up to the user to specify the relevant bit pattern if only one
field is to be modified.
Data menu
Change the values of one or more variables.
The user is presented with a dialog whose title indicates the current segment name and offset
(corresponding to the currently highlighted data). Modifications to the data will be made from this
address onwards.
The dialog accepts a series of comma delimited items which should represent values to be entered at
successive addresses, in the context of the display. For example, if the display is of a pointer, each item
is expected to evaluate to a word.
You are advised to exercise caution when entering more than one item since this will, in general, modify
more than one variable.
Quoted strings (using either double or single quotation marks, as for the Modify option of the data view)
are valid input when the display is of bytes. In all cases, non-quoted strings are assumed to be symbolic
values.
Items can include decimal and hexadecimal values.
If an item can not be validly evaluated, that item is highlighted and an error status message is displayed.
All items up to the one containing the error will have been written to the appropriate addresses.
LESSEE er rr a)
The magic statics view
A magic statics view is a form of variable view which displays a list of the magic statics (or reserved
statics) for the process. See the description of reserved statics in the Processes and Interprocess
Messaging chapter of the PLIB Reference manual.
No new menus or menu items are introduced in this view.
——SSS SSS ee ara
The file view
You may have up to four file views for each process, subject to available memory.
A file view presents a view of a text file, similar in appearance to that available in a file top-level view.
As with all file views, the file to be viewed is selected by making appropriate choices in the file selection
dialog as discussed in The Graphics Interface chapter.
CHAPTER 6
THE FILE MANAGER
The file manager supplied as part of the debugger is identical to that supplied with MC400 and MC200
machines. It provides a comprehensive set of file management functions to perform operations on files,
directories or devices. You may, for example, use it to:
® browse through a filing system
= copy, delete and rename files
= make, delete or copy directories
= back up files to or from a remote system
The file manager presents a titled window containing a file name edit box, an Extensions button and two
list boxes.
The left hand list box shows a list of all parallel directories, at the same level as the current directory.
Initially, this list box shows a list of devices, including devices on any connected remote machine.
The right hand list box contains a directory listing of all files specified by the current path and file name
(which may contain wildcards) shown in the file name edit box (and selected in the left hand list box).
The list is headed by any subdirectories, regardless of the wildcard specification, displayed in bold.
Moving around the file manager
Click on the appropriate item, or use the following keypresses:
= TAB moves between the two list boxes
=" ALT-SPACEBAR moves to the file edit box, enabling you to edit its contents
® ALT-DOWN ARROW selects the Extensions button, enabling you to select an extension from the
list of those present in the current directory to replace that currently in the file edit box
You can move into a subdirectory listed in the right hand list box by highlighting it and pressing ENTER.
In addition to the normal ALT-number means of selecting menus from the menu bar:
=" ALT-LEFT ARROW selects the Ascend menu button, which moves up a directory level
=" ALT-RIGHT ARROW selects the Descend menu button, which moves into a subdirectory
= ALT-UP ARROW selects the Devices menu button, which moves straight to the devices level
Many commands bring up a dialog box at the bottom right of the screen. Press CTRL-TAB to move
between the main window and such a dialog box or use the mouse to point and click, if available.
There is no need to remove one dialog from the screen before selecting another item - the new dialog will
automatically remove the old one.
35
THE SIBO DEBUGGER
= EE ee ee eee
Operations on files
Selecting files
Edit the contents of the file name edit box directly, or use the Extensions button and directory-changing
menu buttons to see an appropriate list of files. To select a file, highlight it by clicking on it, or by using
the up and down arrow keys.
To select several files with related names, use wildcards in the file name edit box to select the required
group. If the names of the files not related you can still select them all at once by tagging them, provided
they are all in a single directory.
Tagging files
To tag a file, highlight it then either select Tag File from the Tag menu, press SHIFT-UP ARROW or SHIFT-
DOWN ARROW, or hold down SHIFT and click on the file. A tick appears next to the file name. (Note that
you can't tag sub-directories.)
To remove this tag, select Untag from the Tag menu (or, as for tagging, press SHIFT-UP ARROW or SHIFT-
DOWN ARROW, Or SHIFT-CLICK). In effect, actions such as SHIFT-CLICK toggle the tag indicator.
To tag all the files in one directory, highlight the directory name in either list box and select Tag All
from the Tag menu.
If you want to tag most, but not all, files in a directory, it is quicker to use Tag All and then Untag those
you don't want.
When you have tagged files, the tags remain until you do one of the following:
= copy or delete the tagged files
= set their file attributes
# move to a different directory and tag a file there.
You can move around the directory structure while files are tagged and they will still be tagged when you
come back to that directory.
To clear all the tags at once, select Clear Tags from the Tag menu.
Copying files
First select the file or group of files you want to copy by any of the methods described above, then select
Copy from the File menu. The Copy Files dialog appears with your selection entered in the Copy edit
box.
Select the place to where you want to make the copy, either by typing into the To edit box, or by moving
back to the main window and selecting the destination device and directory.
If appropriate, you can give the copy a different name, by typing into the To edit box.
Tick the Include SubDirectories check box to include files that match the current file name specification
in all subdirectories. A typical use would be with a wildcard of * to copy a whole directory structure.
Tick the Modified Files Only check box to copy only those files with the modified attribute set. During
the copy the modified attribute is removed from the original files, but is retained in the copy files. This is
useful for backing up files which have been modified since the last backup.
Click on COPY, or press ENTER to copy the files.
One or more of the files specified in the To box may already exist in the destination directory. In this
case, a message box appears to inform you that a file of the same name already exists. You are offered
these buttons:
= CANCEL - cancel the whole operation.
= SKIP - don't replace this file but go on to the next one (if you specified more than one). If the
file manager comes across another file with a name which already exists, you are offered these
same four choices again.
= REPLACE - replace the existing file with the new file (and go on to the next one if you
specified more than one)
36
6 THE FILE MANAGER
a SSS
= REPLACE ALL - replace the existing file with the new one and do the same for all subsequent
files; all files are copied and you are not offered these choices again.
You may then select and copy further files, if you wish. Click on EXIT, or press ESC, when you have
finished.
Renaming files
Rename in the File menu offers a dialog box asking for the file name to change. You can specify this file
by either:
= typing the file name into the edit box
" selecting the file from the right-hand list box so that its name is entered automatically into the
Rename edit box.
The rename dialog asks for the new name. This must be in the current directory.
If you want to rename a file to a different directory, use Copy in the File menu, specifying the new name
and directory, then delete the old version.
Deleting files
Specify the file(s) to delete in the same way as for copying.
As with copying, you can delete more than one file at a time by using wildcards or by tagging. If using a
wildcard, you can also delete matching files in sub-directories by ticking the 'Include SubDirectories
tick box.
A message appears, asking for confirmation before deleting anything.
Attributes
You can set or clear file attributes by selecting Attributes from the File menu. The Attributes dialog box
is displayed, containing the four choices, Modified, Read Only, Hidden and System.
As with Copy and Delete, tagging, or wildcards and the Include SubDirectories tick box can be used to
set attributes on a number of files at once.
Modified The Modified attribute is the equivalent of the DOS archive attribute. The file
manager automatically sets the Modified attribute on any file which you create
or change without backing up. For each file that has this attribute set, the text
"Mod" appears after the file name when it is displayed in the main window.
Read Only Setting this attribute for a file allows you to view and edit the file as usual, but
you can no longer save changes to it. For each file that has this attribute set,
the text 'RdO' appears after the file name when it is displayed in the main
window.
Hidden and System These two attributes are for files used by the operating system; you would not
normally change them. Files with the Hidden attribute set have 'Hid' after
their name in the file manager; those with the System attribute have Sys.
Files in either category will not be listed in a file selector dialog.
Changing the order of a directory listing
Select File Order from the File menu to specify the criteria by which you prefer the contents of a
directory to be listed.
To start with, they are displayed by Name - in alphabetical order, first directories, then files. If you tick
Descending Order, files now appear before directories in the list, and both groups are listed Z to A.
A choice of one of the following criteria is offered:
Name lists files alphabetically according to their file names.
Extension lists files alphabetically according to their file extensions.
Date lists files according to when they were last saved, from oldest to newest.
Time lists files according to the time of day they were last saved, from oldest to
newest.
Size lists files according to their size in bytes.
37
THE SIBO DEBUGGER
In each case, Descending Order reverses the order. If you had selected Date, Descending Order would
display the newest files first. In all cases it also places files before directories.
Note that after re-ordering the list, the list box display is always reset to the top of the list.
SSS LS ee ee ee ee ee ee ee eS)
Operations on directories
Creating a directory
First, select the place where you want to create your new directory. Then select Make Directory from the
File menu. The Make Directory dialog appears, containing your selection in its Make edit box. Type the
name of your new subdirectory onto the end of the text in this edit box and press ENTER.
When making a directory, any intermediate directories are created as necessary.
Removing directories
To remove directories, highlight the directory in the main window, then select Remove Directory from
the File menu. The Remove Directories dialog appears, with the highlighted name in its edit box.
On pressing ENTER, a message appears to warn you that any files in the directory will be automatically
deleted as the directory is removed.
You should be aware that Remove Directory always deletes all sub-directories of the directory specified,
and all files contained in all these directories. (It is not the same as the DOS RMDIR or RD command.)
SSS SSE SSS SS eee era
Operations on devices
Devices include the internal memory drive and Solid State Disks of a connected remote EPOC machine,
and the drives on the local filing system. With the Device menu you can use:
= Copy - to back up the entire contents of a device to another device
=s Name - to give a volume name to a device (remote SSD devices only)
= Info - to find out the name and size of a device, and see how much free space remains on it
The Format option has no effect in the PC environment.
CHAPTER 7
TROUBLESHOOTING
SS ae ee ee er eae
No source code displayed
If the Source module option in the View menu shows the source module for which source code is
required, the debugger has successfully loaded the .dbd symbol file, but has failed either to find or to
load the actual source file. This may for one of two reasons:
# the source file is not in any of the specified search paths - add the path to one of the two
sdbg.cfg configuration files.
= the debugger refuses to load the file because the source file modification date is later than that of
the .dbd file - recompile the file and relink the application.
If the source module does not appear in the list presented by the Source module option, the debugger has
failed either to find or to load the .dbd file. This may be for one of the following reasons:
= the file does not exist - ensure that the VID debug pragma is set to min or full, recompile and
relink.
= the file is not in any of the specified search paths - add the path to one of the two sdbg.cfg
configuration files.
= the debugger refuses to load the file because the file modification date is later than that of the
.img - recompile the file and relink the application.
= a.sym file, which identifies the .dbd files, is missing - ensure that the VID debug pragma is set
to min or full and relink.
The debugger will only attempt to load symbol information when a view is moved to a different segment.
Thus if an application loads a dynamic library or a device driver, a view has to be moved to the segment
containing that code in order to force the loading of source level information. This can be done, for
example, by using the Goto address option of the Locate menu to go to address zero in the segment
containing the newly loaded code.
A further reason may be that the application has been built with the optimise for speed pragma set to on -
code that is to be debugged should always be built with this pragma set to off.
When code is compiled with the optimise for speed pragma set to on, the JPI compiler places directives
in the output object file telling the linker to start each section of generated code (each function) on an
even byte boundary. The linker performs this by padding out the code as necessary. Unfortunately it pads
it out with NULL bytes instead of nop instructions. When the debugger disassembles code (a function that is
performed very frequently, even when debugging at source level) the NULL is interpreted as an opcode and
is disassembled into a 3 byte instruction, using the first two bytes of the code of the following function.
This invariably leaves the start of the next instruction (as far as the disassembler is concerned) in the
middle of an instruction. As a result of this the debugger is unable to match disassember output addresses
with any source code line numbers and thus fails to present the user with source code.
If, having checked all the above points, you still do not have source code displayed, this may mean that
there is not enough free memory to load the source module data. In this case you should either increase
the amount of free memory (if possible) or alter the application's .pr project file so that fewer modules
are built with debug information.
39
THE SIBO DEBUGGER
a See
A typical modified .pr file could contain:
#system epoc img
#model small jpi
#pragma debug(vid=>ful Ll)
#compile module
#compile module2
#pragma debug(vid=>off)
#compile module3
#compile module4
#compile module5
#pragma Link (hwif. lib)
#pragma debug(vid=>ful Ll)
#Link appname
SSE ee ee ee ee eee
Communications link broken
The debugger will only report a broken communications link if it attempts to communicate with the
remote machine while the link is broken.
The communications link can be broken in several ways:
= the remote machine has switched off
= apack door has been opened
= the link cable has been removed.
If the link is broken due to the remote machine switching off (either via auto switch off or opening the
pack door on an HC) switch the machine back on, wait a few moments to allow the link channels to be
re-established and then retry the required operation.
If the link is broken by opening a pack door, simply close the pack door and retry the required operation.
If the link is broken due to the cable being removed, replace the cable and retry the required operation.
If a remote process hits a breakpoint whilst the link is broken, the debugger will not receive notification
of the event. In such a case the only option is to terminate the debugging session and restart it.
SSS ne Se SS ee ee ee
Poor, distorted or missing display
During the start-up process the debugger detects the type of the host machine's graphics display and loads
a window server process containing the appropriate screen driver. It is possible that, for some unusual
configurations, the wrong screen driver may be selected. This will result in a poor or distorted display,
or even a failure to display anything.
The two files concerned are:
WSRVMCHR. IMG for Hercules
WSRVMCVG. IMG for VGA
The installation procedure copies these files into the same directory as sdbg.exe.
If you suffer from this problem and you know what kind of display your machine uses, copy the correct
file to overwrite the other one. If, for example, you know that your machine uses Hercules graphics then,
in the directory containing sdbg.exe, type:
copy wsrvmchr.img wsrvmcvg. img
If you are not sure what kind of graphics display your machine uses, first copy both files into another
directory.
Then copy one of these files back to overwrite both files in the directory containing sdbg.exe and try
running the debugger again. Repeat this, overwriting both files with the second of the copies, until the
debugger display is correct.
40