ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4419845
Jetzt (Chat):
21 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
Sourcecode-Probleme
Re: wann verhält sich ein programm im debugger anders?
Normal
AutorThema
Psycho Offline
ZFX'ler


Registriert seit:
16.09.2002

Hamburg
wann verhält sich ein programm im debugger anders?Nach oben.
hallo.

welche ursachen gibt es alles, dass sich ein programm anders verhält, sobald es debuggt wird?

bei dem programm handelt es sich um was selbstgeschriebenes, was keine erkennung/selbstschutz vor debuggern oder so hat.
es wird aber wohl irgendwo speicher überschrieben, der nicht überschrieben werden soll.

wenn ich das programm normal ausführe, erhalte ich fehlerhafte werte.

starte ich das programm mit einem debugger (in diesem fall OllyDbg), dann kommen die korrekten werte raus.

ja geil!
und wie find ich meinen fehler?
03.02.2009, 19:34:04 Uhr
Schrompf Offline
ZFX'ler


Registriert seit:
04.04.2006

Sachsen
Re: wann verhält sich ein programm im debugger anders?Nach oben.
Könnte Timing sein. Sprich: eine Race Condition oder irgendwas anderes parallelläufiges. Oder es liegt nicht am Debugger, sondern an der IDE: Visual Studio zum Beispiel benutzt andere Heaps, wenn man das Programm von innerhalb der IDE startet. Bei korrektem Programmablauf stört das nicht, aber bei Array-Nebengriffen zum Beispiel (eins davor oder eins dahinter reicht schon) liest man dann in der IDE andere Werte als außerhalb. Auch nicht initialisierte Variablen enthalten andere Werte, wenn sie außerhalb der IDE gelesen werden (in der IDE meist definierte Fehlerwerte, außerhalb Zufallswerte). Ein klassischer Fehler ist der nicht initialisierte bool: Visual Studio initialisiert den mit 0xcdcdcdcd oder 0xcccccccc, was definiert auf "true" hinausläuft. Außerhalb der IDE kanns aber auch mal zufällig ein "false" werden.

Bye, Thomas
03.02.2009, 20:07:59 Uhr
Dreamworlds Development
Helmut Offline
ZFX'ler


Registriert seit:
11.07.2002

Deutschland
280083044 helmut4242
Re: wann verhält sich ein programm im debugger anders?Nach oben.
Probier doch mal, deine Anwendung erst normal zu starten, und erst zur Laufzeit den Debugger anzuhängen. In VS geht das ganz einach mit Debuggen->An den Prozess anhängen.

Wie Schrompf schon sagte könnte es Timing sein, wenn zB ein Haltepunkt einen kritischen Codeabschnitt aufhält. Ich hatte mal einen fiesen Fehler, der nur in der Releaseversion auftrat. Es stellte sich dann heraus, dass in der Release ein Codeteil so optimiert wurde, dass ein Thread nicht mehr auf einen anderen warten musste und in dem Fall auf eine uninitialisierte Variable zugegriffen wurde...

Ansonsten könnte es sein, dass eine API, die du benutzt, feststellt, ob gerade ein Debugger dranhängt (DirectShow gehört zB dazu, der Mist ist nicht umsonst deprecated..)

Also es muss eigentlich eins von den beiden sein. Zur Not musst du halt Messageboxdebuggen..

Ciao
03.02.2009, 20:22:28 Uhr
Bomber-Revolution
Psycho Offline
ZFX'ler


Registriert seit:
16.09.2002

Hamburg
Re: wann verhält sich ein programm im debugger anders?Nach oben.
hab ihn!

war eine stelle, in der ich irgendwie sowas wie new char[0]; gemacht hab und darein dann geschrieben, natürlich gut versteckt und nicht so offensichtlich.

habs nicht bis ins kleinste detail verfolgt warum es welche werte ergab, der bug ist jedenfalls weg.

komisch nur dass das programm mit mehreren aufrufen jedesmal dasselbe ergebnis gab, selbst nach einem neustart.

dass es probleme geben kann, wenn man von debug->release version wechselt habe ich schon gehört, jedoch habe ich meine exe nur einmal in release compiled und dann ja auch nicht über die vs-ide gestartet, sondern über einen externen debugger.

timing ist ein guter tipp für den nächsten fehler der art

Zitat:
Zur Not musst du halt Messageboxdebuggen..

hahaha...ganz ehrlich: benutz ich trotz aller tools immer noch am häufigsten.
03.02.2009, 21:51:36 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: wann verhält sich ein programm im debugger anders?Nach oben.
Wie wäre es, die Operatoren new, new[], delete und delete[] mit den Windows-Heapfunktionen zu überladen? Die brechen – auch im Release – bei der kleinsten Unregelmäßigkeit sofort ab (jedenfalls nach dem, was ich in den dazugehörigen Papern gelesen habe … ich hatte selbst lange keine solchen Fehler mehr) … und auf der Straße munkelt man, sie wären auch effizienter als die CRT …

… soll nur bedingt ein Vorschlag sein – ich würde auch gerne die Meinungen der Experten dazu hören, weil ich selbst nicht viel Erfahrungen damit gemacht habe (einmal geschrieben, funktionieren, nie mehr angeguckt) … lohnt sich sowas?

Gruß, Ky

3 Mal gendert, zuletzt am 03.02.2009, 22:44:09 Uhr von Krishty.
03.02.2009, 22:05:30 Uhr
Kimmi Offline
ZFX'ler


Registriert seit:
10.10.2002

Schleswig-Holstein
93425079
Re: wann verhält sich ein programm im debugger anders?Nach oben.
Da kann ich den LowFragmentationHeap unter Windows-XP empfehlen: http://msdn.microsoft.com/en-us/library/aa366750(VS.85).aspx

Gruß Kimmmi
04.02.2009, 11:43:09 Uhr
Kurzer Weblog
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel