[Lazarus] disable the debugger capturing the OutputDebugString() messages

Sven Barth pascaldragon at googlemail.com
Sun Jul 18 13:08:33 CEST 2010


Hi!

On 18.07.2010 12:53, Bernd wrote:
> It is absolutely not understandable why GDB captures these messages
> while it is completely unable to display them in any meaningful
> manner. It will capture the messages (it will replace and eat the
> whole function call, not only the message!) and then declare them
> wrongly as "warnings" and bury them in all the other warnings it does
> generate, Lazarus does not have any chance to extract only the debug
> messages from the output of GDB even if it wanted to. These messages
> are basically lost, once GDB gets its hands on them. GDB completely
> sabotages the usage of OutputDebugString().
>
> If there is no way to tell GDB to either stop intercepting these
> messages or at least display them in a more meaningful way or pass
> them on to where they were meant to go (the windows API) instead of
> silently *eating* the whole function call, then this is a bug in GDB.
> These debug messages are none of GDB's business as long as it does not
> provide any way do actually *display* them in a meaningful way.

GDB registers itself as a debugger with Windows for that application and 
thus Windows itself is routing all messages that are sent with 
OutputDebugString to that registered debugger. DebugView does the same 
(registering itself as a debugger for an application) but does only 
print the OutputDebugString messages without doing anything else that a 
debugger might do. You can only run one debugger at a time attached to a 
single application. It's not a bug in GDB but a rule of Windows and its API.

The only possible way to "fix" this in GDB would be to let it output all 
messages it got with OutputDebugString itself and attaching DebugView to 
GDB (this would be needed to be done in the GDB source though).

Regards,
Sven




More information about the Lazarus mailing list