AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Extern Debuggen?

Ein Thema von ralfiii · begonnen am 27. Jul 2010 · letzter Beitrag vom 28. Jul 2010
Antwort Antwort
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#1

Extern Debuggen?

  Alt 27. Jul 2010, 16:51
Hallo!

Eine unserer Anwendungen friert manchmal ein.

Das Einfrieren ist reichlich schwer zu reproduzieren. Nun hat ein Kollege das erstmalig auf einem Testrechner unter Windows7 geschafft. Dort läuft also der Prozess und tut nix mehr. Nun würde ich gern irgendwie rausfinden wo die Anwendung gerade hängt (ein Methodenname wär ein Traum). Auf dem Rechner ist Delphi nicht installiert. Ich muss den Wurm also irgendwie anders lokalisieren.

Ich hab hier zum Probieren eine kleine App gebaut die sich in einer Endlosschleife aufhängt und wollte nun mit irgendwelchen Tools herausfinden wo der Bug sein könnte.

Der ProcessExplorer von SysInternals bietet wohl einen Callstack, aber die Infos die dort geboten werden sind ... sagen wir mal: kryptisch.

Hilfe!
Danke!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Extern Debuggen?

  Alt 27. Jul 2010, 16:56
Man könnte versuchen dort den Remote-Debugger zu installieren
Markus Kinzler
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

AW: Extern Debuggen?

  Alt 27. Jul 2010, 17:11
Du kannst es mal mit dem Dependency Walker versuchen.
Du lädst dein Programm und drückst dann auf F7 (=Start Profiling).
Das Programm startet deutlich langsamer, aber dafür bekommst du jede Menge Info.

Interessant wird's dann, wenn du in deinem Programm die Funktion MSDN-Library durchsuchenOutputDebugString() verwendest um überall Meldungen auszugeben.
Der Dependency Walker fängt diese auf und zeigt sie an.
Andreas
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Extern Debuggen?

  Alt 27. Jul 2010, 17:12
Hallo,

warum loggst du die Aufrufe der Parameter nicht in einer Datei mit ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Extern Debuggen?

  Alt 28. Jul 2010, 10:04
warum loggst du die Aufrufe der Parameter nicht in einer Datei mit ?
Könnte ich die Anwendung ändern wär ja alles kein Problem, dann stopfe ich sie halt nach und nach mit Log-Messages voll, bis ich weiss wo es hakt.

Das ist aber nicht so.

Stell Dir vor du schreibst ein Programm und bei einem Kunden bleibt die Software GANZ SELTEN hängen.

Der Gedanke ist der: Man bittet den Kunden den Task nicht abzustechen wenn das Programm hängt. Und wenn's dann soweit ist geht man hin und versucht an dem Programm - das nicht speziell vorbereitet wurde - herauszufinden wo die Ausführung gerade hakt. Der Process Explorer sieht da schon vielversprechend aus, der liefert dir von einem beliebigen Programm den Call-Stack. Aber leider in einer dermassen blöden Form, dass man wieder nicht weiss was Sache ist.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#6

AW: Extern Debuggen?

  Alt 28. Jul 2010, 10:41
Vielleicht wäre dieses Buch für dich interessant: First Fault Software Problem Solving

Ohne zusätzliche Debuginformationen oder Logausgaben wirst du dich mit dem zufrieden geben müssen, was du hast. Du kannst nicht mehr Informationen herausholen als drin sind.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Extern Debuggen?

  Alt 28. Jul 2010, 11:29
Ohne zusätzliche Debuginformationen oder Logausgaben wirst du dich mit dem zufrieden geben müssen, was du hast. Du kannst nicht mehr Informationen herausholen als drin sind.
Es ist aber einiges da an Info.
Hier z.B. der Stack wie ihn der Process Monitor ausgibt.
Wär doch gelacht wenn man mit den Adressen nicht mehr anfangen könnte...
Miniaturansicht angehängter Grafiken
stack.png  
  Mit Zitat antworten Zitat
Benutzerbild von ralfiii
ralfiii

Registriert seit: 30. Mai 2007
489 Beiträge
 
Delphi 2010 Professional
 
#8

AW: Extern Debuggen?

  Alt 28. Jul 2010, 14:17
Ok, hier noch ein paar Infos:

Der Remote Debugger ist nur eine Option, wenn der Rechner übers Netz vom Entwicklungs-Rechner aus erreichbar ist.
Er erfordert, dass man die Anwendung mit ein paar speziellen Compiler-Optionen erzeugt (map-file, rsm-file, stack-frames...).
Dann startet man am Zielrechner "rmtdbg105.exe -listen". Danach kann man sich mit dem Zielrechner verbinden (Start/Mit Prozess verbinden/Ip eingeben) und mit dem Prozess verbinden.
Man landet dann in einem nichtssagenden CPU-Fenster mit zwei Zeilen
:7c911231 ntdll.DbgBreakPoint + 0x1
:7c9607a8 ntdll.DbgUiRemoteBreakin + 0x2d
Einfach Play drücken und dann wieder Pause, dann ist zumindest der Callstack OK.
Da kann man sich dann schon ganz orientieren, breakpoints setzen und halt normal mit dem Debugger arbeiten.


Wenn eine Anwendung im Feld spinnt wäre der Process Explorer die Wahl der Dinge. Man muss nichts an der Exe ändern, braucht sie nicht neu zu starten, man kann sich einfach in die Anwendung einklinken und den Stack anschauen.
Blöderweise erkennt man da nicht viel. (siehe Screenshot in vorigem Post).
Man kann für die Anwendung ein Map-File erzeugen und das mit map2dbg (http://code.google.com/p/map2dbg/downloads/list) in ein MS-kompatibles Format konvertieren, dann wird der Output vom Process Explorer etwas besser (siehe Anhang) aber so richtig toll ist das noch nicht. Meine Testapplikation bleibt in einer Routine "Hang" hängen, die sieht man im Callstack nicht)


Ich hab mich nun für ein Recompile entschieden und baue einfach madExcept ein. Dort kann man sagen man will einen Callstack wenn die Anwendung z.B: über 5 sec einfriert. Bild im Anhang. Und das neue Exe muss keinerlei Verbindung zum Entwicklungsrechner haben, funktioniert einfach so. Nach der Fehlersuche wirf ich's aber wieder raus.


Ach ja: Will man Log-Ausgaben die mit OutputDebugString gemacht wurden mitlesen, so empfehle ich DebugView von Sysinternals:
http://technet.microsoft.com/en-us/s.../bb896647.aspx


Hier noch ein paar nützliche Links:

http://blog.eurekalog.com/how-to-deb...ications-hang/
http://stackoverflow.com/questions/2...hi-application
Miniaturansicht angehängter Grafiken
newstack.png   stackwithmadexcept.png  

Geändert von ralfiii (28. Jul 2010 um 14:30 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz