Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Debug-Ausgabe (https://www.delphipraxis.net/211547-debug-ausgabe.html)

Michael II 30. Sep 2022 16:40

Debug-Ausgabe
 
Wenn ich in Delphi 11.2 unter Windows 11 22H2 (Build 22623.730) eines meiner Programme starte, wird mehrfach angezeigt

Zitat:

Debug-Ausgabe:
onecore\net\netprofiles\service\src\nsp\dll\namesp aceserviceprovider.cpp(550)\nlansp_c.dll!642784C8: (caller: 75B6E326) LogHr(11) tid(44f8) 8007277C Der angegebene Dienst ist unbekannt. Der Dienst wurde nicht im angegebenen Namespace gefunden.

Prozess sjOnline.exe (9956)
Wenn ich google, dann sehe ich, dass solche Meldungen beim Debuggen von Windows Programmen unter Windows 11 auftreten - finde aber keine Lösung.

Wenn ich mein Programm laufen lasse, dann scheint "alles" zu funktionieren.
Dennoch will ich wissen, wieso diese Meldung ausgelöst wird, bevor ich die nächste Version veröffentliche.

Ich bin aber offenbar zu doof, in meinem Delphi Code den Auslöser zu finden. Tipps?

himitsu 30. Sep 2022 17:04

AW: Debug-Ausgabe
 
https://en.delphipraxis.net/topic/56...in11-debugger/

geht wohl in diese Richtung:
https://learn.microsoft.com/en-us/wi...ce-providers-2

Entweder in deinem Programm, oder einer von dir verwendeten Komponente, wird ein Provider verwendet, der in deinem Windows 11 nicht registriert ist,
oder in deinem Windows ist ein Fehler, wie z.B. eine alte/falsche Registrierung auf einen so nicht existierenden Provider.



Eine Debugausgabe ala MSDN-Library durchsuchenOutputDebugString ist per se aber nicht Schlimmes.
Nutzen wir auch gerne, um aus unserem Programm raus Debug-Infos an den Debugger (ins Log der Delphi-IDE) auszugeben.

jaenicke 30. Sep 2022 22:01

AW: Debug-Ausgabe
 
Liste der Anhänge anzeigen (Anzahl: 1)
Woher das ggf. in deinem Code ausgelöst wird, ist sehr einfach zu finden. Mach selbst mit OutputDebugString eine Ausgabe und debugge in diese Funktion hinein (wenn du bei dem Aufruf ankommst, Assemblerfenster öffnen und in die Jumps mit F7 hinein debuggen bis du an der Funktion selbst ankommst). Dann setze dort einen Haltepunkt. Nun wirst du bei jedem Aufruf der Funktion an deinem Haltepunkt vorbei kommen. Das sieht dann aus wie hier:

Anhang 55424

Michael II 30. Sep 2022 22:20

AW: Debug-Ausgabe
 
Herzlichen Dank euch 2....

Danke für den ICS Link.

Ich hatte einen Breakpoint in der Windows.pas gesetzt - aber da hält in diesem Fall natürlich nix. Dass ich eine Ebene tiefer warten kann, kam mir echt nicht in den Sinn.

Michael II 1. Okt 2022 08:55

AW: Debug-Ausgabe
 
Windows 11 - Windows 32 Bit - ICS 8.69

Danke nochmals jaenicke für den Debugger Tipp. Ich weiss nun wo aber nicht wieso.

Da himitsu einen Link auf eine "ungelöste" DP Meldung von Angus (ICS) gepostet hat, schreib ich rasch wo...

Die Debugmeldung wird in OverbyteIcsWinsockImpl.Inc Result := Fgethostname(name, len); - genauer nach einem call in WS2_32.gethostname: - ausgegeben.


Delphi-Quellcode:
function Ics_gethostname(name: PAnsiChar; len: Integer): Integer;
begin
    if @Fgethostname = nil then
        @Fgethostname := GetProc('gethostname');
    Result := Fgethostname(name, len);
end;

Beispiel:
Delphi-Quellcode:
uses OverbyteICSWSocket;

  showmessage(localiplist.Count.ToString);

himitsu 1. Okt 2022 12:14

AW: Debug-Ausgabe
 
Im Windows können sich Programme/Kompoenten registrieren, welche beim Auslösen gewisser Namen helfen sollen.
Und da ist wohl was nicht richtig registriert/aufrufbar.

Zitat:

Zitat von Michael II (Beitrag 1512759)
Ich hatte einen Breakpoint in der Windows.pas gesetzt - aber da hält in diesem Fall natürlich nix. Dass ich eine Ebene tiefer warten kann, kam mir echt nicht in den Sinn.

Jupp, da hält er auch nur an, wenn der Aufruf aus Felphi kommt,
da der Haltepunkt nicht in der Funktion gesetzt wird, sondern auf den JMP in die Import-Tabelle deiner DLL/EXE ... andere DLLs haben ihre eigenen Imports.

[edit]
Zitat:

GetProc
hier wird nichtmal der Import aus der Windows-Unit genommen, sondern die Adresse direkt geholt, also an der Windows.pas vorbei aufgerufen.

MSDN-Library durchsuchenGetHostName ist eine API, die es erst seit Windows 8.1 gibt.
Auf diese Weise raucht es nicht gleich beim Programmstart und Windows verhindert den Start,
sondern es kommt erst beim Aufruf und man kann im Code drauf reagieren, wenn jemand das Programm in was Uraltem, wie Windows 7, XP usw. ausführen täte.


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