![]() |
Konsolenanwendung mit Umleitung debuggen
Hallo,
ich möchte eine Konsolenanwendung debuggen, die ihre Eingabe per Dateiumleitung erhält. Wird die Anwendung von der Kommandozeile heraus aufgerufen, funktioniert das auch. Im integrierten Debugger mit entsprechenden Startparametern allerdings nicht - dort wartet die Anwendung dann auf eine Tastatureingabe.
Delphi-Quellcode:
Start -> Parameter : <input.txt
Program Redirect;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; var Line : string; begin try Readln(Line); writeln('Output', Line); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. Inhalt der Datei: Eingabe<CR/LF> Die einzige Möglichkeit die ich bisher gefunden habe, ist das Einfügen einer Warteschleife:
Delphi-Quellcode:
Dann wird die Anwendung auf der Kommandozeile gestartet und über Start->Mit Prozess verbinden funktioniert es.
{$ifdef DEBUG}
writeln('Debugger'); while not IsDebuggerPresent do begin Sleep(100); end; asm int 3; end; {$endif} Ebenfalls ausprobiert habe ich es mit cmd.exe /c als Hostanwendung, das Verhalten ändert sich aber nicht. Wie kriege ich das mit dem integrierten Debugger und direktem Start hin? |
AW: Konsolenanwendung mit Umleitung debuggen
Zitat:
Allen Kode, der mit dem Input arbeitet, packst Du in eine Prozedure mit einen Var-Parameter vom Typ Textfile. Beim Start überprüfst Du dann, ob ein Parameter übergeben wurde, wenn ja machst Du ein Textfile mit diesem Parameter auf und übergibst es an die Prozedure, wenn nein übergibst Du stattdessen Input (das ist der interne Name für stdin) an die Prozedur. Innerhalb derselben mußt Du nur bei jedem Read oder ReadLn den Namen des Parameters mit verwenden. Für die weitere Verarbeitung spielt es keine Rolle, ob der Input aus einer Textdatei oder aus stdin kommt. |
AW: Konsolenanwendung mit Umleitung debuggen
Danke für die Idee. Das Mini-Programm dient natürlich nur der Illustration. Die Lesevorgänge erfolgen außerhalb meines Einflussbereichs in TCGIRequest.ReadString(). Es handelt sich um den Contentstream einer CGI.
|
AW: Konsolenanwendung mit Umleitung debuggen
|
AW: Konsolenanwendung mit Umleitung debuggen
Leider nicht. Der idDebugger ist uralt und nicht zum Laufen zu bekommen. Und der content kann bei HTTPCGI nicht über eine Environment Variable gesetzt werden,
|
AW: Konsolenanwendung mit Umleitung debuggen
Was ist mit ISAPI-Dll aus dem CGI machen und dann den Webserver mit dem Debugger verbinden?
Arbeitest Du mit 'nem Webmodul? CGI-Programm:
Delphi-Quellcode:
entsprechende ISAPI.DLL
program CGI;
{$APPTYPE CONSOLE} uses WebBroker, CGIApp, Unit1 in 'Unit1.pas' {wm: TWebModule}; {$R *.RES} begin Application.Initialize; Application.CreateForm(Twm, wm); Application.Run; end.
Delphi-Quellcode:
Achso: Das ist aus Delphi-7-Zeiten, passt ja zu der Delphiversion in Deinem Profil ;-)
library Isapi;
uses WebBroker, ISAPIApp, Unit1 in 'Unit1.pas' {wm: TWebModule}; {$R *.RES} exports GetExtensionVersion, HttpExtensionProc; begin Application.Initialize; Application.CreateForm(TWebModule1, WebModule1); Application.Run; end. |
AW: Konsolenanwendung mit Umleitung debuggen
Zitat:
Delphi-Quellcode:
begin
Application.Initialize; Application.WebModuleClass := WebModuleClass; Application.Run; end. |
AW: Konsolenanwendung mit Umleitung debuggen
Dann sollte eigentlich ein Umbau in 'ne ISAPI.dll möglich sein und der Debugger mit dem Webserver verbunden werden können, um so die DLL zu debuggen.
Was für 'nen Webserver kannst / musst Du nutzen? |
AW: Konsolenanwendung mit Umleitung debuggen
Apache mit feststehender Konfiguration. Das muss weiterhin als CGI exe laufen. Frag nicht warum.
|
AW: Konsolenanwendung mit Umleitung debuggen
Naja, ich dachte eigentlich eher:
Zum Debuggen mal 'ne DLL draus machen und wenn die dann fertig ist und ordentlich läuft, wird's wieder ein CGI-Programm. Man braucht ja für DLL und CGI "nur" zwei unterschiedliche DPRs, die eingebundene Unit bleibt ja und funktioniert in beiden. Musst Du denn zum Debuggen den Apache nehmen oder könntest Du dazu auch temporär 'nen anderen Server nutzen, also 'nen anderen Rechner mit 'nem anderen Webserver (und wenns sein muss notfalls auch in 'ner VM)? Klar, ich weiß natürlich nicht, welche Abhängigkeiten sonst noch so bestehen, auf was die CGI.exe so alles zugreifen muss, da kann dann "mal eben 'nen anderen Webserver auf 'nem anderen Rechner nehmen" die eine oder andere Stunde oder Woche Arbeit bedeuten. Läuft der Apache als Service? Wenn ja, ist er mit "Interact with desktop" konfiguriert? Ohne das geht's nicht. Wahllose "Prosa" zum Thema, eventuell ist ja doch was nützliches dabei: ![]() ![]() ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz