Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#1

DebugViewer von Assarbad

  Alt 10. Mai 2017, 23:04
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
  Mit Zitat antworten Zitat