Re: PQtrace doesn't work - Mailing list pgsql-general
From | Bruce Momjian |
---|---|
Subject | Re: PQtrace doesn't work |
Date | |
Msg-id | 200509230224.j8N2O2h21677@candle.pha.pa.us Whole thread Raw |
In response to | PQtrace doesn't work ("W. van den Akker" <listsrv@wilsoft.nl>) |
Responses |
Re: PQtrace doesn't work
|
List | pgsql-general |
W. van den Akker wrote: > Hello, > > I've send this message also on 29-1-2004 and have since no solution for > this problem .. >:o . > I have a little test program (see at the end of the message). > The program crashes when PQTrace is called (instruction xxxx referenced > memory at "0x00000010", the > memory could not be written" (obvious ... ). I use the library > libpqdll.lib and postgresql v8.0.1, but also happens > in 7.4.9. > Running under W2000 sp4, VC++ 6 SP5. If compiling under Linux then there > is no problem. Obvious there is > something wrong with the use under windows > > If I comment traceoption all works fine. Looking at the code, the only thing I see done by PQtrace are some calls to fprintf to that file descriptor, like this: fe-misc.c: fprintf(conn->Pfdebug, libpq_gettext("To backend> Msg %c\n"), Hard to imagine what would fail there, unless libpq_gettext() doesn't work, but you are probably not use NLS, so it would be a noop: #define libpq_gettext(x) (x) Can you send us a backtrace of the failure from VC++? We don't have too many internals guys using that setup, but the backtrace should suggest a cause. --------------------------------------------------------------------------- > > Any ideas? > > gr, > > Willem. > > #include <stdio.h> > #include <stdlib.h> > #include <libpq-fe.h> > #include <winsock.h> > > void main () > { > int nFields; > int i, j; > > PGconn *conn; > PGresult *res; > > char *pghost = "linux"; > char *dbName = "some_db"; > > FILE *debug; > > WSADATA wsadata; > WSAStartup(0x0101, &wsadata); > > > conn = PQsetdbLogin (pghost, NULL, NULL, NULL, dbName, "user",""); > > if (PQstatus(conn) == CONNECTION_BAD) > { > printf ("Connection to database %s is failed\n", dbName); > printf ("%s", PQerrorMessage (conn)); > PQfinish (conn); > exit (1); > } > > debug = fopen ("trace.out", "w"); > --->> PQtrace (conn, debug); > > res = PQexec (conn, "BEGIN"); > if (!res || PQresultStatus (res) != PGRES_COMMAND_OK) > { > printf ("BEGIN command failed\n"); > PQclear (res); > PQfinish (conn); > exit (1); > } > > PQclear (res); > > res = PQexec (conn, "DECLARE mycursor CURSOR FOR select sum(id) from > relaties"); > if (!res || PQresultStatus (res) != PGRES_COMMAND_OK) > { > printf ("DECLARE CURSOR command failed\n"); > PQclear (res); > PQfinish (conn); > exit (1); > } > > PQclear (res); > res = PQexec (conn, "FETCH ALL in mycursor"); > if (!res || PQresultStatus (res) != PGRES_TUPLES_OK) > { > printf ("FETCH ALL command didn't return tuples properly\n"); > PQclear (res); > PQfinish (conn); > exit (1); > } > > nFields = PQnfields (res); > for (i = 0; i < nFields; i++) > printf ("%-15s", PQfname (res, i)); > > printf ("\n\n"); > > for (i = 0; i < PQntuples (res); i++) > { > for (j = 0; j < nFields; j++) > printf ("%-15s", PQgetvalue (res, i, j)); > printf ("\n"); > } > > PQclear (res); > > res = PQexec (conn, "CLOSE mycursor"); > PQclear (res); > > res = PQexec (conn, "COMMIT"); > PQclear (res); > PQfinish (conn); > > fclose (debug); > > WSACleanup(); > } > > > ---------------------------(end of broadcast)--------------------------- > TIP 1: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly > -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073
pgsql-general by date: