Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DebugViewer von Assarbad (https://www.delphipraxis.net/192690-debugviewer-von-assarbad.html)

EWeiss 10. Mai 2017 22:04

DebugViewer von Assarbad
 
Ich versuche den Viewer zu initialisieren.
Kein Ahnung wie ich das teil ans laufen bekomme.

Er schreibt

Zitat:

{$DEFINE DEBUGGING}
{$IFDEF DEBUGGING}{$INCLUDE .\Include\Debugging.pas}{$ENDIF DEBUGGING}
ok habe ich gemacht!
Dann kann ich den String den ich debuggen will aus kommentieren
Zitat:

{$IFDEF DEBUGGING}DbgOut('Now displaying message box'){$ENDIF DEBUGGING}
MessageBox(0,nil,nil,0);
wenn ich das Flag
{$DEFINE DEBUGGING}
aus kommentiere.
{!$DEFINE DEBUGGING}

so weit so gut.

Das Problem ist nur sein Include Pas

Delphi-Quellcode:
const
  Debug______szDebugPipeName = '\\.\pipe\AssasDebugView';

function Debug______Format(fmt: string; params: array of const): string;
var
  pdw1, pdw2: PDWORD;
  i: integer;
  pc: PCHAR;
const
  fmtbufsize = 1024;
begin
  pdw1 := nil;
  if High(params) >= 0 then
    GetMem(pdw1, (High(params) + 1) * sizeof(Pointer));
  pdw2 := pdw1;
  for i := 0 to High(params) do begin
    pdw2^ := PDWORD(@params[i])^;
    inc(pdw2);
  end;
  pc := GetMemory(fmtbufsize);
  if Assigned(pc) then
  try
    SetString(Result, pc, wvsprintf(pc, PCHAR(fmt), PCHAR(pdw1)));
  finally
    if (pdw1 <> nil) then FreeMem(pdw1);
    FreeMem(pc);
  end
  else
    Result := '';
end;

function Debug______GetMyName: string;
var
  buf: array[0..260] of char; // 260 = MAX_PATH
  idx: integer;
begin
  ZeroMemory(@buf, sizeof(buf));
  GetModuleFileName(hInstance, @buf, sizeof(buf));
  for idx := sizeof(buf) - 1 downto 0 do
    if buf[idx] = '\' then break;
  SetString(result, pchar(@buf[idx]), lstrlen(@buf[idx]));
end;

procedure DbgOut(s: string);
var
  hPipe: THandle;
  pc: PChar;
  numWritten: DWORD;
  temps: string;
const
  bufsize = 4096;
begin
  hPipe := CreateFile(Debug______szDebugPipeName, GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, 0);
  if hPipe <> INVALID_HANDLE_VALUE then
  try
    pc := GetMemory(bufsize);
    if Assigned(pc) then
    try
      temps := Debug______Format('[%s -> PID = %d]: ', [Debug______GetMyName, GetCurrentProcessID]);
      lstrcpyn(pc, @temps[1], bufsize);
      if not (length(s) < (bufsize - lstrlen(pc))) then
        setlength(s, bufsize - lstrlen(pc) - 1);
      lstrcat(pc, @s[1]);
      WriteFile(hPipe, pc^, lstrlen(pc), numWritten, nil);
    finally
      FreeMemory(pc);
    end;
  finally
    CloseHandle(hPipe);
    Sleep(200);
  end;
end;
er meldet hier schon bei
Delphi-Quellcode:
function Debug______Format(fmt: string; params: array of const): string;
var
  pdw1, pdw2: PDWORD;
Zitat:

[DCC Fehler] Debugging.pas(6): E2003 Undeklarierter Bezeichner: 'PDWORD'
ja es sind keine uses, Interface usw. deklariert
da er aber anscheinend einen Grund hatte das nicht zu tun würde ich gerne wissen warum und wie ich das teil ans laufen bekomme.

Ich brauche deinen DebugViewer der was taugt. ;)
Innerhalb der IDE nicht erst später wie von sysinternals

gruss

p80286 10. Mai 2017 22:39

AW: DebugViewer von Assarbad
 
unter D7 findest Du ...\SOURCE\RTL\SYS\Types.PAS
mit
Delphi-Quellcode:
type
  TOleChar = WideChar;
  POleStr = PWideChar;
  PPOleStr = ^POleStr;

  PCLSID = PGUID;
  TCLSID = TGUID;

{ 64-bit large integer }

  Largeint = Int64;
  {$EXTERNALSYM Largeint}

//  DWORD = LongWord;
//  {$EXTERNALSYM DWORD}
  PDWORD = ^DWORD;
  {$EXTERNALSYM PDWORD}
vllt. hilft Dir das weiter.

Gruß
K-H

EWeiss 10. Mai 2017 22:43

AW: DebugViewer von Assarbad
 
Zitat:

Zitat von p80286 (Beitrag 1370963)
unter D7 findest Du ...\SOURCE\RTL\SYS\Types.PAS
mit
Delphi-Quellcode:
type
  TOleChar = WideChar;
  POleStr = PWideChar;
  PPOleStr = ^POleStr;

  PCLSID = PGUID;
  TCLSID = TGUID;

{ 64-bit large integer }

  Largeint = Int64;
  {$EXTERNALSYM Largeint}

//  DWORD = LongWord;
//  {$EXTERNALSYM DWORD}
  PDWORD = ^DWORD;
  {$EXTERNALSYM PDWORD}
vllt. hilft Dir das weiter.

Gruß
K-H

Verstehe ich jetzt nicht.
Das Problem ist das er die Types nicht erkennt weil halt keine Uses eingebunden sind.
Oder sehe ich das falsch ?

EDIT:
Wenn ich die Type einbaue habe ich immer noch riesen Probleme mit anderen Typen.

Siehe shot.

gruss

p80286 10. Mai 2017 22:46

AW: DebugViewer von Assarbad
 
Könnte es nicht sein, das die notwendige Unit standardmäßig eingebunden war/ist ?
Du findest den Typ übrigens auch in der Windows.Pas.

Gruß
K-H

EWeiss 10. Mai 2017 22:48

AW: DebugViewer von Assarbad
 
Zitat:

Zitat von p80286 (Beitrag 1370965)
Könnte es nicht sein, das die notwendige Unit standardmäßig eingebunden war/ist ?
Du findest den Typ übrigens auch in der Windows.Pas.

Gruß
K-H

Ja danke..
Aber schau dir mal meinen Shot an. ;)
Wenn ich deine Einbaue meckert er trotzdem noch über 100 andere.
Wie soll diese UNIT funktionieren OHNE Uses ?

gruss

Luckie 10. Mai 2017 23:58

AW: DebugViewer von Assarbad
 
Von wann ist sein Programm? Und Assarbads (aka Olli) Sourcen waren schon immer etwas abgedreht. :?

EWeiss 11. Mai 2017 00:11

AW: DebugViewer von Assarbad
 
Zitat:

Zitat von Luckie (Beitrag 1370969)
Von wann ist sein Programm? Und Assarbads (aka Olli) Sourcen waren schon immer etwas abgedreht. :?

2002 so wie ich sehe.

Ich habe es jetzt mal Windows bei den Uses der *.dpr addiert macht keinen unterschied.
Denke das Teil kann man vergessen.

gruss

Zacherl 11. Mai 2017 01:27

AW: DebugViewer von Assarbad
 
Zitat:

Zitat von EWeiss (Beitrag 1370971)
Ich habe es jetzt mal Windows bei den Uses der *.dpr addiert macht keinen unterschied.

Die Winapi.Windows Unit muss in allen Units eingebunden werden, in denen du das Debug Include File verwendest. Alternativ könntest du aber auch einfach MSDN-Library durchsuchenOutputDebugString verwenden. Passend dazu gibt es DebugView, sofern du dein Tool nicht aus Delphi heraus starten solltest.

EWeiss 11. Mai 2017 01:38

AW: DebugViewer von Assarbad
 
Zitat:

Die Winapi.Windows Unit muss in allen Units eingebunden werden, in denen du das Debug Include File verwendest
Das nutzt nichts direkt beim Start ohne das irgendetwas von der Unit verwendet wird findet er die ganzen Messagen schon nicht.

Zitat:

sofern du dein Tool nicht aus Delphi heraus starten solltest.
Und genau das möchte ich ;)
Außerhalb nutzt es mir leider nichts.

gruss


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