[DUG] Program crashes - anyone knows why?

Conor Boyd Conor.Boyd at trimble.co.nz
Mon Nov 27 08:35:38 NZDT 2006


That's a very detailed email... ;-)

Without delving deeper, I've a couple of comments/suggestions.

A) You definitely need a try-except block in your Execute method.  You
must not let unhandled exceptions propagate out of a thread.  Even if
you only put a call to OutputDebugString in your exception handler, then
that means you could use e.g. DebugView from Sysinternals to view
exceptions being thrown.

B) Try adding the madExcept library from www.madshi.net to your
application.  It should help hugely in tracking down unhandled errors
like this, especially when they are happening on a remote machine.  You
can configure it so that in the event of an error, your program can
automatically email you the error reports including call stacks, etc.

C) You could also try using the URLDownloadToFile function from the
URLMon unit instead.  I use it in a threaded application, and it works
fine for me.

I don't know what you're using to access Google, but I've been using the
Indy components very successfully in one of my projects.

Good luck in trying your error down...

HTH,

Conor

-----Original Message-----
From: delphi-bounces at ns3.123.co.nz [mailto:delphi-bounces at ns3.123.co.nz]
On Behalf Of Gajo Csaba

I wrote a multithreaded application for a client and it crashes on the
client's computer, while it works ok on mine. Can someone give me a clue
as to what might be the problem?

The program works like this: I have two TThreadLists: one contains a
list of keywords (~20000) while the other a list of proxy servers
(~500). When the user clicks on the button, 21 threads are created. 1
thread directly accesses Google, enters the keyword and processes the
result. The other 20 threads do the same, except they use a proxy
server.

OK, so each thread grabs a keyword from the list and then removes it
from the list, so no one else could use it again. It tries to access the
internet. If the connection fails then it means the proxy doesn't work,
so it gets another proxy address from the list. No two threads ever
share the same proxy. If there are no more free proxies left, the thread
dies (and returns the unprocessed keyword to the list).

[snip]



More information about the Delphi mailing list