www.digitalmars.com         C & C++   DMDScript  

c++ - Debugger mysteriously never enters program...

reply dan <dan_member pathlink.com> writes:
This started happening a couple of days ago: (console app, debug mode) compiles
and links ok, but then I hit F4 to start debugging, and as soon as I hit F8 so
that it should stop at first instruction, it says "Program Ended".  How can this

sc main.cpp -cpp -Ae -Ar -mn -C -WA -S -5 -a8 -c -gf -DCONSOLE=1 -D_DEBUG=1
-D_X86_=1 -D_MT=1 -D_MBCS=1 -IG:\dm\stlport\stlport -IG:\dm\include
-IG:\boost-1.30.2 -IG:\boost-1.30.2\boost -oG:\BACnet\RS485\test\main.obj 
sc ..\Serial.cpp -cpp -Ae -Ar -mn -C -WA -S -5 -a8 -c -gf -DCONSOLE=1 -D_DEBUG=1
-D_X86_=1 -D_MT=1 -D_MBCS=1 -IG:\dm\stlport\stlport -IG:\dm\include
-IG:\boost-1.30.2 -IG:\boost-1.30.2\boost -oG:\BACnet\RS485\test\Serial.obj 
sc ..\rs485.cpp -cpp -Ae -Ar -mn -C -WA -S -5 -a8 -c -gf -DCONSOLE=1 -D_DEBUG=1
-D_X86_=1 -D_MT=1 -D_MBCS=1 -IG:\dm\stlport\stlport -IG:\dm\include
-IG:\boost-1.30.2 -IG:\boost-1.30.2\boost -oG:\BACnet\RS485\test\rs485.obj 
sc ..\xeiver.cpp -cpp -Ae -Ar -mn -C -WA -S -5 -a8 -c -gf -DCONSOLE=1 -D_DEBUG=1
-D_X86_=1 -D_MT=1 -D_MBCS=1 -IG:\dm\stlport\stlport -IG:\dm\include
-IG:\boost-1.30.2 -IG:\boost-1.30.2\boost -oG:\BACnet\RS485\test\xeiver.obj 
sc ..\..\TIME\mm_timer.cpp -cpp -Ae -Ar -mn -C -WA -S -5 -a8 -c -gf -DCONSOLE=1
-D_DEBUG=1 -D_X86_=1 -D_MT=1 -D_MBCS=1 -IG:\dm\stlport\stlport -IG:\dm\include
-IG:\boost-1.30.2 -IG:\boost-1.30.2\boost -oG:\BACnet\RS485\test\mm_timer.obj 
sc ..\..\VARS\variables.cpp -cpp -Ae -Ar -mn -C -WA -S -5 -a8 -c -gf -DCONSOLE=1
-D_DEBUG=1 -D_X86_=1 -D_MT=1 -D_MBCS=1 -IG:\dm\stlport\stlport -IG:\dm\include
-IG:\boost-1.30.2 -IG:\boost-1.30.2\boost -oG:\BACnet\RS485\test\variables.obj 
sc ..\..\VARS\params.cpp -cpp -Ae -Ar -mn -C -WA -S -5 -a8 -c -gf -DCONSOLE=1
-D_DEBUG=1 -D_X86_=1 -D_MT=1 -D_MBCS=1 -IG:\dm\stlport\stlport -IG:\dm\include
-IG:\boost-1.30.2 -IG:\boost-1.30.2\boost -oG:\BACnet\RS485\test\params.obj 
sc ..\..\REC_FRM\rec_frm.cpp -cpp -Ae -Ar -mn -C -WA -S -5 -a8 -c -gf
-DCONSOLE=1 -D_DEBUG=1 -D_X86_=1 -D_MT=1 -D_MBCS=1 -IG:\dm\stlport\stlport
-IG:\dm\include -IG:\boost-1.30.2 -IG:\boost-1.30.2\boost
link /CO /NOI /DE /NOPACKF /XN /NT /ENTRY:mainCRTStartup /BAS:4194304 /A:512
ren G:\BACnet\RS485\test\$SCW$.EXE test_serial.EXE
G:\BACnet\RS485\test\test_serial.EXE built
Lines Processed: 758156  Errors: 0  Warnings: 0
Successful build
Jan 19 2004
parent reply dan <dan_member pathlink.com> writes:
Found out part of what's happening: I had something being initialized in static
initializations time that triggered a start of the multimedia timer. Getting rid
of a static member in a class and turning it into a singleton solve the problem
of the debugger mysteriously exiting the program before seeming to step into a
single instruction. I can now single step through the code to the point of
failure, and the cause is still a mystery:  As soon as the multi-media timer
starts running I get the Program Ended message.  Here's the code of my class and
the instruction at which the program terminates:


class timer : public iface
virtual  void timerProc_() const = 0;
timer    ( size_t resolution );
virtual ~timer    ();
size_t   getTimerRes () const { return timerRes; };
bool     startTimer  ( size_t period, bool oneShot );
bool     stopTimer   ();
size_t   timerRes;
size_t   timerId;
void     timerProc(){ timerProc_(); }
timer::timer(size_t resolution) :
iface(), timerRes(0), timerId(0)
if(TIMERR_NOERROR == ::timeGetDevCaps(&tc,sizeof(TIMECAPS)))
timerRes = min(max(tc.wPeriodMin,resolution),tc.wPeriodMax);
if( timerRes )
::timeEndPeriod( timerRes );
timerRes = 0;
extern "C"
void CALLBACK internalTimerProc(size_t id, size_t msg,
DWORD dwUser, DWORD dw1, DWORD dw2)
timer *	tmr = static_cast<timer*>(dwUser);
bool timer::startTimer(size_t period,bool oneShot)
bool		res = false;
MMRESULT	result;
result = ::timeSetEvent(period, timerRes, internalTimerProc,
(DWORD)this,oneShot ? TIME_ONESHOT : TIME_PERIODIC); //<-- Program Ends !!!
if(NULL != result)
timerId = (size_t)result;
res = true;
return res;
bool timer::stopTimer()
if( timerId )
result = ::timeKillEvent(timerId);
if( result == TIMERR_NOERROR )
timerId = 0;
return( result == TIMERR_NOERROR );


Jan 20 2004
parent reply dan <dan_member pathlink.com> writes:
It just seems that the debugger chokes when the multimedia timer is turned on;
the code works okay when compiled for Release...
Jan 20 2004
parent "Walter" <walter digitalmars.com> writes:
"dan" <dan_member pathlink.com> wrote in message
news:buk8nj$10jt$1 digitaldaemon.com...
 It just seems that the debugger chokes when the multimedia timer is turned
 the code works okay when compiled for Release...
Try windbg.exe on it.
Jan 23 2004