Frage zum Debugger
Übersicht

![]() |
PSYBetreff: Frage zum Debugger |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hoi...
ich hab ne grundsätzliche Frage zum Debugger. Also erstmal folgendes Szenario: Ich hab nen Dimfeld level(75,51) Nun steht die Spielfigur auf px=1 und py=1 Es kommt ne Tastaturabfrage, die checkt ob man die linke Cursortaste drückt und wenn ja, prüft sie das Feld level(px-2,y). Somit wird das Feld level(-1,1) geprüft, was zur Fehlermeldung "Array index out of bounds" führt. Wenn ich aber den Debugger ausschalte, funktioniert es. Wodran liegt das? Grüsse, PSY |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Weil Windows sich nicht beschwert, dass du in fremdem Speicher rumwühlst.
Grundsätzliche Regel wäre, nur wenn ein Programm mit und ohne Debugger fehlerfrei funktioniert, ist es wirklich fehlerfrei. Denn in fremdem Speicher rumzuwühlen kann böse Folgen haben. Also lass es am besten, außerhalb eines Arrays rumzufischen. |
||
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BORNtobeNAMELESS hat Folgendes geschrieben: Weil Windows sich nicht beschwert, dass du in fremdem Speicher rumwühlst.
Hätte er wirklich in "fremdem" Speicher rumgepfuscht, hätte sich Windows sehr wohl beschwert, nämlich mit einer Memory Access Violation. Jedes Programm bekommt zu Beginn einen eigenen Stack im Speicher zugewiesen, den es frei nutzen darf (bei Bedarf vergrößert und verkleinert sich das). Wenn er von seinem Array mal ein paar Bytes tiefer geht, wird er sich sehr sehr sehr höchstwahrscheinlich noch im eigenen Stack befinden, was erstmal keinen Fehler darstellt. Dass da allerdings Daten liegen, die man nicht beabsichtigt hat, dürfte klar sein. ![]() Als Probe könnte man einfach mal einen Array mit immer tieferen Indizes ausgeben lassen und beobachten, wann das Programm letztendlich abschmiert. Dann kann man sich sicher sein, dass der Programm-eigene Stack soeben verlassen wurde. ![]() |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
sowas dacht ich mir schon. natürlich werd ich das problem beheben. war halt nur mal interessant zu wissen, dass man überhaupt ausserhalb von festgelegten bereichen adressieren kann.
l8er, psy |
||
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Adressieren kannst du das ganze RAM. Nur ob dein Betriebssystem ohne Weiteres einen Zugriff zulässt, ist eine andere Sache. ![]() |
||
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schade, das es in BB keine Pointer gibt ![]() |
||
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter! |
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
PSY hat ja eine Möglichkeit gefunden, eine Art Pointer zu nutzen. Einfach utopische Indizes bei Arrays benutzen und schon sind dir keine Grenzen gesetzt. ![]() |
||
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das sind aber nur relative Pointer ![]() |
||
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter! |
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schon, wenn man aber rausfindet, wo das Array im Programmstack liegt, kann man zusätzlich noch über die WinAPI abfragen, welchen Speicherbereich das ganze Programm zugesichert bekommen hat (Startadresse und Länge). Dann kann man super vom Array aus überall "hinzeigen" - ist zwar immer noch relativ, aber auch semi-absolut, weil ich ja dann gezielt wandern kann. ![]() |
||
![]() |
PowerProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann würde ich doch besser ne DLL benutzen, statt es so umständlich zu machen;-)
Naja, ist schon wieder n bisschen off-topic... |
||
www.xairro.com Alles für Webmaster und Programmierer! Es gibt mehr als bloß einen Counter! |
Nox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mit ner DLL wär's aber nicht rein mit BB gelöst und nicht so 1337. ![]() Okay, lassen wir das mal. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group