Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fehlersuche - komm nicht weiter (https://www.delphipraxis.net/139433-fehlersuche-komm-nicht-weiter.html)

schwa226 28. Aug 2009 18:23


Fehlersuche - komm nicht weiter
 
Hi,

ich habe ein Programm, dass StayOnTop ist.

Wenn nun der PC gesperrt ist bekomme ich nach ~30min diese Meldung:
Zitat:

Erste Gelegenheit für Exception bei $768442EB. Exception-Klasse EOutOfResources mit Meldung 'Das Handle ist ungültig.
'. Prozess myApp.exe (1604)
Erste Gelegenheit für Exception bei $768442EB. Exception-Klasse EOutOfResources mit Meldung 'Systemressourcen erschöpft.'. Prozess myApp.exe (1604)
Erste Gelegenheit für Exception bei $768442EB. Exception-Klasse EOutOfResources mit Meldung 'Falscher Parameter.
'. Prozess myApp.exe (1604)
Erste Gelegenheit für Exception bei $768442EB. Exception-Klasse EOutOfResources mit Meldung 'Falscher Parameter.
'. Prozess myApp.exe (1604)
Erste Gelegenheit für Exception bei $768442EB. Exception-Klasse EStackOverflow mit Meldung 'Stack-Überlauf'. Prozess xHTPC.exe (1604)
und der Cursor steht in Graphics:
Delphi-Quellcode:
procedure GDIError;
const
  BufSize = 256;
var
  ErrorCode: Integer;
{$IF DEFINED(CLR)}
  Buf: StringBuilder;
{$ELSE}
  Buf: array [Byte] of Char;
{$IFEND}
begin
{$IF DEFINED(CLR)}
  Buf := StringBuilder.Create(BufSize);
{$IFEND}
  ErrorCode := GetLastError;
  if (ErrorCode <> 0) and (FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil,
    ErrorCode, LOCALE_USER_DEFAULT, Buf, BufSize, nil) <> 0) then
{$IF DEFINED(CLR)}
    raise EOutOfResources.Create(Buf.ToString)
{$ELSE}
    raise EOutOfResources.Create(Buf)
{$IFEND}
  else
    OutOfResources;
end;
raise EOutOfResources.Create(Buf)

Wie kann ich herausfinden wo es von meinem Programm aus einen Fehler gibt?
Denn mit Umschalt-F8 weiter gehe kommen noch mehr Meldungen in der Graphics.
Der Taskmanager sagt mir das dass Programm ~3MB RAM braucht.

Ich habe Bitmaps & TIcons in meinem Programm.
Das komische ist halt, dass dieser Fehler nur auftritt wenn der PC gesperrt ist!?

mkinzler 28. Aug 2009 18:34

Re: Fehlersuche - komm nicht weiter
 
Was macht den dein Programm?

himitsu 28. Aug 2009 19:11

Re: Fehlersuche - komm nicht weiter
 
Wichtiger, als die Auslöse-Prozedur, wäre z.B. der Aufrufstack,

denn in dieser Prpzedur wird nur "nachträglich" die Exception ausgelöst und der Verursacher ist wo anders.

schwa226 28. Aug 2009 19:52

Re: Fehlersuche - komm nicht weiter
 
Zitat:

Zitat von himitsu
Wichtiger, als die Auslöse-Prozedur, wäre z.B. der Aufrufstack,

denn in dieser Prpzedur wird nur "nachträglich" die Exception ausgelöst und der Verursacher ist wo anders.

Und wie mache ich das?

schwa226 29. Aug 2009 10:20

Re: Fehlersuche - komm nicht weiter
 
Ok

Das ist der Aufrufstack wenn ich auf Anhalten drücke:

Zitat:

:7c812afb kernel32.RaiseException + 0x52
Graphics.GDIError
Graphics.GDICheck(0)
Graphics.CopyBitmap(0,0,0,$12EB78,nil)
Graphics.TBitmap.CopyImage(0,0,((0, 75, 23, 0, 0, 0, nil), (40, 75, 23, 1, 24, 0, 0, 0, 0, 0, 0), (0, 0, 0), 0, 0))
Graphics.TBitmap.SetSize(???,???)
Graphics.TBitmap.SetHeight(???)
:0043b4b8 TBitmap.SetSize + $50
:7e368734 user32.GetDC + 0x6d
:7e368816 ; C:\WINDOWS\system32\user32.dll
:7e37927b ; C:\WINDOWS\system32\user32.dll
:7e3792e3 user32.SendMessageW + 0x49
:004fdf50 TacBtnWnd.acWndProc + $350
:7e368734 user32.GetDC + 0x6d
:7e368816 ; C:\WINDOWS\system32\user32.dll
:7e378ea0 ; C:\WINDOWS\system32\user32.dll
:7e378eec ; C:\WINDOWS\system32\user32.dll
:7c91e473 ntdll.KiUserCallbackDispatcher + 0x13
:7e368734 user32.GetDC + 0x6d
:7e37413c ; C:\WINDOWS\system32\user32.dll
:7e373b30 user32.EnumDisplaySettingsA + 0xc9
:7e373d5c user32.DefDlgProcW + 0x22
:7e368734 user32.GetDC + 0x6d
:7e368816 ; C:\WINDOWS\system32\user32.dll
:7e37927b ; C:\WINDOWS\system32\user32.dll
:7e37651a ; C:\WINDOWS\system32\user32.dll
:7e3749b1 ; C:\WINDOWS\system32\user32.dll
:7e38a956 ; C:\WINDOWS\system32\user32.dll
:7e38a2bc ; C:\WINDOWS\system32\user32.dll
:7e3b63fd user32.MessageBoxTimeoutW + 0x7a
:7e3a0853 user32.MessageBoxExW + 0x1b
:7e3b6579 user32.MessageBoxW + 0x45
Forms.TApplication.MessageBox(???,'myApp',???)
Forms.TApplication.ShowException(???)
Forms.TApplication.HandleException(???)
ExtCtrls.TTimer.WndProc(???)
Classes.StdWndProc(262192,275,1,0)
:7e368734 user32.GetDC + 0x6d
:7e368816 ; C:\WINDOWS\system32\user32.dll
:7e3689cd ; C:\WINDOWS\system32\user32.dll
:7e368a10 user32.DispatchMessageW + 0xf
Forms.TApplication.ProcessMessage(???)
Ich habe ein 'CopyIcon' in meinem Source.
Aber kein CopyBitmap oder auch kein CopyImage. Wird wahrscheinlich so sein, dass 'CopyIcon' diese Funktionen aufruft, oder?
Ich werde einmal eine Abfrage einfügen ob das Icon-Handle 0 ist bevor ein CopyIcon durchgeführt wird.

hoika 29. Aug 2009 10:32

Re: Fehlersuche - komm nicht weiter
 
Hallo,

kann es sein, dass dein Programm per Timer
ständig das Icon wechselt ?


Heiko

schwa226 29. Aug 2009 15:12

Re: Fehlersuche - komm nicht weiter
 
Nein,

das Icon wird von extern gewechselt (TNotifyIconData). Shell-Ersatz.

Habe nun das CopyIcon & DestroyIcon abgesichert.
Soweit ist der Fehler nicht mehr aufgetretten.

KridSElot 18. Feb 2010 14:44

Re: Fehlersuche - komm nicht weiter
 
Äh also ich habe diese Fehlermeldung einen ähnlichen Callstack wenn ich keinen Desktop Heap mehr habe.

Eventuell kann Dir das hier helfen: http://blogs.msdn.com/ntdebugging/ar...-overview.aspx


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:09 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