AGB  ·  Datenschutz  ·  Impressum  







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

Debug Console oder ähnlich

Ein Thema von EWeiss · begonnen am 22. Okt 2010 · letzter Beitrag vom 24. Okt 2010
Antwort Antwort
Seite 1 von 2  1 2      
EWeiss
(Gast)

n/a Beiträge
 
#1

Debug Console oder ähnlich

  Alt 22. Okt 2010, 15:43
Habe ja meinen kleinen Wrapper für verschiedene Visualisierungs Plugins.
Mein Problem ist nun das es vorkommen kann das andere Programm hängen weil irgendein Plugin nicht richtig funktioniert
oder deren Threads nicht beenden.

Hat jemand ein Beispiel oder kann mir sagen wie ich am besten eine Console generieren kann
über der ich zur Laufzeit diverse Informationen direkt an dem User aus meiner DLL übergeben kann?
Am besten wäre es mit einem Compiler Schalter den man unter Bedingter Kompelierung oder ähnlich
eingeben kann um das Debug Fenster zu öffnen.

Würd mich über Hilfe freun.

Sorry wenn ihr mich für blöd haltet.
Habe mich mit dieser Problematik in Delphi noch nicht beschäftigt.
In VB habe ich so etwas für meinen Player erstellt.
Eine externe Anwendung welche über einen Schalter sich mit meiner Anwendung verbindet.
Vorrausgesetzt sie ist vorher gestartet.

gruss

Geändert von EWeiss ( 9. Jul 2019 um 09:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Debug Console oder ähnlich

  Alt 22. Okt 2010, 15:50
MSDN-Library durchsuchenCreateConsole und dann einfach über Write/WriteLn den Text ausgeben.
Aber das bringt nur was, wenn noch keine Konsole in der Anwendung existiert.

Ansonsten kannst du dir ja auch einfach eine Form erstellen, mit einem Memo drauf.
$2B or not $2B
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Debug Console oder ähnlich

  Alt 22. Okt 2010, 15:54
MSDN-Library durchsuchenCreateConsole und dann einfach über Write/WriteLn den Text ausgeben.
Aber das bringt nur was, wenn noch keine Konsole in der Anwendung existiert.

Ansonsten kannst du dir ja auch einfach eine Form erstellen, mit einem Memo drauf.
Hab mal ein Bild angehängt was ich meine..
Siehe eintrag unter bedingter Compilierung

Ich wollte eigentlich kein Fenster oder ähnliches in meine DLL einbauen sondern die Messagen
an eine Anwendung schicken ohne selbst an der DLL etwas zu ändern .. abgesehen von den Messagen die ich nach außen weiterleite.

gruss

Geändert von EWeiss ( 9. Jul 2019 um 09:32 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Debug Console oder ähnlich

  Alt 22. Okt 2010, 17:46
OutputDebugString ist eine Möglichkeit, die auch in der Delphi IDE unterstützt wird. Man kann auch externe Anwendungen zur Anzeige der Debug-Nachrichten nutzen.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Debug Console oder ähnlich

  Alt 22. Okt 2010, 18:43
OutputDebugString ist eine Möglichkeit, die auch in der Delphi IDE unterstützt wird. Man kann auch externe Anwendungen zur Anzeige der Debug-Nachrichten nutzen.
Ich könnte ja unter Parameter mein Argument übergeben von meinem VBTracer.
TRACEMODE = 1

Die Frage wäre dann nur wie ich in Delphi eine bedingte Compilierung durchführen kann.
Hier mal der Quelltext den ich in meinem Programm verwende um mit dem Tracer zu kommunizieren.

Code:
Option Explicit

...
Public Sub Assert(ByVal condition As Boolean)

End Sub

#End If
Um was es mir geht ist diese Abfrage
Code:
#If TRACEMODE = 1 Then
Welche die Bedingte Compilierung auslöst..
Also wie könnte ich so einen Schalter innerhalb Delphi setzen..

Die Übersetzung des Quelltextes spielt keine Rolle das ist ein leichtes für mich.

Die Message die gesendet wird sieht in etwa so aus.
Code:
Trace "Form_Load Error", "", "Error", err.Number, err.Description
Und findet nur verwendung wenn der Schalter gesetzt sowie das Handle vom Tracer gefunden wird.

Ansonsten springt er in Assert rein ... tut dann quasi nichts.

Ok hab die Schalter gefunden..
{$IFDEF ..}
{$ELSE}
{$ENDIF}

Werd mich dann mal drangeben.

gruss

Geändert von EWeiss (22. Okt 2010 um 19:17 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Debug Console oder ähnlich

  Alt 22. Okt 2010, 20:36
sorry wenn ich pusche

warum kann ich nun über den Schalter keine Funktionen mehr setzen ?

Delphi-Quellcode:
unit uTracer;

interface

uses Windows, Messages, Classes, Variants;

const
  THISAPPID = 'myTRACER';

var
  m_Hwnd : HWND;
  m_bInitialised: BOOL;

function FindTraceWindow: Integer;
function DoTrace: Boolean;
procedure SendTraceMessage(args: array of Variant);
function IsTraceWindow(WinHandle: HWND): Boolean;

implementation

{$IFDEF TRACEMODE = 1}
Sind Unterhalb vorhanden werden aber auf grund des Schalters nicht mehr erkannt.

Zitat:
[DCC Fehler] uTracer.pas(14): E2065 Ungenügende Forward- oder External-Deklaration: 'FindTraceWindow'
gruss
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: Debug Console oder ähnlich

  Alt 22. Okt 2010, 23:47
Delphi-Quellcode:
{$IFDEF TRACEMODE = 1}
function FindTraceWindow: Integer;
{$ENDIF}
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Debug Console oder ähnlich

  Alt 23. Okt 2010, 00:03
Delphi-Quellcode:
{$IFDEF TRACEMODE = 1}
function FindTraceWindow: Integer;
{$ENDIF}
Habe es jetzt mal übersetzt mit Fehler die kommen noch weg wenn ich es richtig debugen kann.

Delphi-Quellcode:
unit uTracer;

interface

uses Windows,
     Messages,
     Forms,
     Classes,
     Variants,
     SysUtils;
.
Der aufruf würde so erfolgen

Delphi-Quellcode:
SetLength(mytest,3);
mytest[0] := 'BASSVIS_Init '; mytest[1] := GlobalVisInit; mytest[2] := MainHandle;
Trace(mytest);
Wie gesagt ich komme nur in die untere Trace procedure hinein..
sollte aber die obere sein

wenn ich es jetzt so mache wie du vorgeschlagen hast.
Delphi-Quellcode:
{$IFDEF TRACEMODE = 1}
procedure Trace(args : array of Variant);
begin
   If (DoTrace) Then
      SendTraceMessage(args);

end;
{$ENDIF}
nicht genügend forward .. blablabla
bei der oben declarierten procedure um sie öffentlich zu machen

gruss

Geändert von EWeiss (23. Okt 2010 um 14:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Debug Console oder ähnlich

  Alt 23. Okt 2010, 00:18
ich fürchte ich komm nicht mehr mit...
der {$IFDEF} Kram sorgt für eine bedingte kompilierung, ja nach Schalter kommen verschiedene "Programme" raus
wenn Du TRACEMODE <> 1 definiert hast wird der Teil
{$IFDEF TRACEMODE = 1}
überhaupt nicht aufgenommen beim kompilieren.

Falls ich Dich richtig verstanden habe brauchst Du keine Kompilerschalter sondern Parametrisierte Aufrufe die dann verschieden verzweigen?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: Debug Console oder ähnlich

  Alt 23. Okt 2010, 00:26
Falls ich Dich richtig verstanden habe brauchst Du keine Kompilerschalter sondern Parametrisierte Aufrufe die dann verschieden verzweigen?
In meiner Anwendung wird geprüft ob diese Unit hier TRACEMODE = 1 als Parameter für die bedingte compilierung übergibt
Wird dieser nicht gefunden wird auch nichts ins Logbuch eingetragen
So schützt sich diese selbst vor unnötigen zugriffen von außen.

Ich habe in meiner DLL unter Parameter "TRACEMODE = 1" eingegeben eigentlich sollte der Compiler das erkennen
während der laufzeit und darauf hin entscheiden ob er den Codeteil freigibt also verwendet oder nicht.
Vorrausgesetzt die Anwendung läuft dann werden die Daten in das Fenster geschickt und dort ausgewertet.

in vb sieht mein compiler schalter so aus!
#If TRACEMODE = 1 Then
#Else
#End If

und steht genau an der gleichen stelle wie hier im Code übergeben.
Wie gesagt habe mich mit den Schaltern in Delphi noch nicht beschäftigt.

Nochmal ein ganz kleines Beispiel!
Zitat:
Der #If...Then...#Else-Block kann benutzt werden, um ein Symbol zu testen und entsprechende Anweisung einzukompilieren oder aus dem Kompilat herauszuhalten.
Daneben kann es auch zum Auskommentieren großer Quelltext-Passagen verwendet werden.
Code:
Option Explicit

#Const MitHinein = True

Public Sub Main
    Debug.Print "Dieser Text ist immer zu sehen"

    #If MitHinein Then
         Debug.Print "Dieser Text ist nur zu sehen, wenn " & _
                     "'MitHinein' entsprechend gesetzt wurde."
    #End If

    #If False Then
         Debug.Print "Dieser Text ist nie zu sehen."
    #End If

    Debug.Print "Das war es schon."
End Sub
So ist es veranschaulicht was bzw.. wofür die Schalter stehen.

Ist der Schalter unter Parameter im Debugger Dialog gesetzt muss der ganze obere Teil des Quelltextes aktiv sein
Andernfalls werden die beiden unteren proceduren verwendet die dann nichts tun...

gruss Emil

Geändert von EWeiss (23. Okt 2010 um 00:45 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01:57 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