Csound Csound-dev Csound-tekno Search About

[Cs-dev] Csound Debugger

Date2014-04-10 21:13
FromAndres Cabrera
Subject[Cs-dev] Csound Debugger
AttachmentsNone  None  
Hi,

The Csound debugger I'm working on is finally getting to a useful testing stage.

I've been doing the work in the csdebugger branch, if you have time, please have a look.

To build the debugger, you will need to add to cmake:
-DBUILD_DEBUGGER=1

I have written a debugger front-end within CsoundQt, which you are welcome to try out too:
http://qutecsound.sourceforge.net/debugger2.html

Some internal details:
The debugger interface is found at:
https://github.com/csound/csound/blob/csdebugger/include/csdebug.h

Although the debugger functions are part of the API, I think it's cleaner to have them in their own header, as they are also a compile time option.

Because the changes are somewhat invasive, I chose to make the kperf function a pointer within the CSOUND struct that defaults to nodebug. When the debugger is initialized the kperf function pointer is switched to the debug version, and switched back when the debugger is disabled csoundDebuggerInit() and csoundDebuggerClean() functions.

When a breakpoint is reached, a callback function that has been registered with csoundSetBreakpointCallback(CSOUND *csound, breakpoint_cb_t bkpt_cb, void *userdata) is called.

When a breakpoint is reached, after the callback is called, the kperf function continues running as usual, providing empty buffers to the audio hardware, and not incrementing the time counters in musmon. When a continue is reached, the graph traversing continues where it left off.

There are probably still a few bugs, but it's now working on my simple tests.

Any ideas, thoughts and suggestions are very welcome.

Cheers,
Andrés

Date2014-04-10 21:49
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Wow, this looks super cool Andres. I'm just looking through the code
now. Do you have a basic example of setting this up? The CUnit stuff
in that debugger test code you posted is confusing me.

On 10 April 2014 21:13, Andres Cabrera  wrote:
> Hi,
>
> The Csound debugger I'm working on is finally getting to a useful testing
> stage.
>
> I've been doing the work in the csdebugger branch, if you have time, please
> have a look.
>
> To build the debugger, you will need to add to cmake:
> -DBUILD_DEBUGGER=1
>
> You will find some simple tests of the API here:
> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>
> I have written a debugger front-end within CsoundQt, which you are welcome
> to try out too:
> http://qutecsound.sourceforge.net/debugger2.html
>
> Some internal details:
> The debugger interface is found at:
> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>
> Although the debugger functions are part of the API, I think it's cleaner to
> have them in their own header, as they are also a compile time option.
>
> Because the changes are somewhat invasive, I chose to make the kperf
> function a pointer within the CSOUND struct that defaults to nodebug. When
> the debugger is initialized the kperf function pointer is switched to the
> debug version, and switched back when the debugger is disabled
> csoundDebuggerInit() and csoundDebuggerClean() functions.
>
> When a breakpoint is reached, a callback function that has been registered
> with csoundSetBreakpointCallback(CSOUND *csound, breakpoint_cb_t bkpt_cb,
> void *userdata) is called.
>
> When a breakpoint is reached, after the callback is called, the kperf
> function continues running as usual, providing empty buffers to the audio
> hardware, and not incrementing the time counters in musmon. When a continue
> is reached, the graph traversing continues where it left off.
>
> There are probably still a few bugs, but it's now working on my simple
> tests.
>
> Any ideas, thoughts and suggestions are very welcome.
>
> Cheers,
> Andrés
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-10 21:58
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
Hi Rory,

Essentially, your application could do something like:

    int break_count = 0;
    CSOUND* csound = csoundCreate(NULL);
    csoundCompileOrc(csound, "instr 1\nasig oscil 1, p4\nendin\n");
    csoundInputMessage(csound, "i 1.1 0   1 440");
    csoundStart(csound);
    csoundDebuggerInit(csound);
    csoundSetBreakpointCallback(csound, brkpt_cb, (void *) &break_count);
    csoundSetInstrumentBreakpoint(csound, 1.1, 0);

    for (i = 0; i < 1000; i++) {
        csoundPerformKsmps(csound);
    }
    CU_ASSERT(break_count == 1);

    csoundDebuggerClean(csound);
    csoundDestroy(csound);

Whenever the breakpoint is reached, the breakpoint callback is called.

Currently only instrument breakpoints are implemented (i.e. the debugger breaks when an instrument is active), but I also want to add line breakpoints.

Cheers,
Andrés

On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>
> Wow, this looks super cool Andres. I'm just looking through the code
> now. Do you have a basic example of setting this up? The CUnit stuff
> in that debugger test code you posted is confusing me.
>
> On 10 April 2014 21:13, Andres Cabrera <mantaraya36@gmail.com> wrote:
> > Hi,
> >
> > The Csound debugger I'm working on is finally getting to a useful testing
> > stage.
> >
> > I've been doing the work in the csdebugger branch, if you have time, please
> > have a look.
> >
> > To build the debugger, you will need to add to cmake:
> > -DBUILD_DEBUGGER=1
> >
> > You will find some simple tests of the API here:
> > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
> >
> > I have written a debugger front-end within CsoundQt, which you are welcome
> > to try out too:
> > http://qutecsound.sourceforge.net/debugger2.html
> >
> > Some internal details:
> > The debugger interface is found at:
> > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
> >
> > Although the debugger functions are part of the API, I think it's cleaner to
> > have them in their own header, as they are also a compile time option.
> >
> > Because the changes are somewhat invasive, I chose to make the kperf
> > function a pointer within the CSOUND struct that defaults to nodebug. When
> > the debugger is initialized the kperf function pointer is switched to the
> > debug version, and switched back when the debugger is disabled
> > csoundDebuggerInit() and csoundDebuggerClean() functions.
> >
> > When a breakpoint is reached, a callback function that has been registered
> > with csoundSetBreakpointCallback(CSOUND *csound, breakpoint_cb_t bkpt_cb,
> > void *userdata) is called.
> >
> > When a breakpoint is reached, after the callback is called, the kperf
> > function continues running as usual, providing empty buffers to the audio
> > hardware, and not incrementing the time counters in musmon. When a continue
> > is reached, the graph traversing continues where it left off.
> >
> > There are probably still a few bugs, but it's now working on my simple
> > tests.
> >
> > Any ideas, thoughts and suggestions are very welcome.
> >
> > Cheers,
> > Andrés
> >
> > ------------------------------------------------------------------------------
> > Put Bad Developers to Shame
> > Dominate Development with Jenkins Continuous Integration
> > Continuously Automate Build, Test & Deployment
> > Start a new project now. Try Jenkins in the cloud.
> > http://p.sf.net/sfu/13600_Cloudbees
> > _______________________________________________
> > Csound-devel mailing list
> > Csound-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/csound-devel
> >
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-10 21:58
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
Also, since the breakpoint callback gets the CSOUND structure, it can get all of its information from there.

Cheers,
Andrés


On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera <mantaraya36@gmail.com> wrote:
Hi Rory,

Essentially, your application could do something like:

    int break_count = 0;
    CSOUND* csound = csoundCreate(NULL);
    csoundCompileOrc(csound, "instr 1\nasig oscil 1, p4\nendin\n");
    csoundInputMessage(csound, "i 1.1 0   1 440");
    csoundStart(csound);
    csoundDebuggerInit(csound);
    csoundSetBreakpointCallback(csound, brkpt_cb, (void *) &break_count);
    csoundSetInstrumentBreakpoint(csound, 1.1, 0);

    for (i = 0; i < 1000; i++) {
        csoundPerformKsmps(csound);
    }
    CU_ASSERT(break_count == 1);

    csoundDebuggerClean(csound);
    csoundDestroy(csound);

Whenever the breakpoint is reached, the breakpoint callback is called.

Currently only instrument breakpoints are implemented (i.e. the debugger breaks when an instrument is active), but I also want to add line breakpoints.

Cheers,
Andrés

On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>
> Wow, this looks super cool Andres. I'm just looking through the code
> now. Do you have a basic example of setting this up? The CUnit stuff
> in that debugger test code you posted is confusing me.
>
> On 10 April 2014 21:13, Andres Cabrera <mantaraya36@gmail.com> wrote:
> > Hi,
> >
> > The Csound debugger I'm working on is finally getting to a useful testing
> > stage.
> >
> > I've been doing the work in the csdebugger branch, if you have time, please
> > have a look.
> >
> > To build the debugger, you will need to add to cmake:
> > -DBUILD_DEBUGGER=1
> >
> > You will find some simple tests of the API here:
> > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
> >
> > I have written a debugger front-end within CsoundQt, which you are welcome
> > to try out too:
> > http://qutecsound.sourceforge.net/debugger2.html
> >
> > Some internal details:
> > The debugger interface is found at:
> > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
> >
> > Although the debugger functions are part of the API, I think it's cleaner to
> > have them in their own header, as they are also a compile time option.
> >
> > Because the changes are somewhat invasive, I chose to make the kperf
> > function a pointer within the CSOUND struct that defaults to nodebug. When
> > the debugger is initialized the kperf function pointer is switched to the
> > debug version, and switched back when the debugger is disabled
> > csoundDebuggerInit() and csoundDebuggerClean() functions.
> >
> > When a breakpoint is reached, a callback function that has been registered
> > with csoundSetBreakpointCallback(CSOUND *csound, breakpoint_cb_t bkpt_cb,
> > void *userdata) is called.
> >
> > When a breakpoint is reached, after the callback is called, the kperf
> > function continues running as usual, providing empty buffers to the audio
> > hardware, and not incrementing the time counters in musmon. When a continue
> > is reached, the graph traversing continues where it left off.
> >
> > There are probably still a few bugs, but it's now working on my simple
> > tests.
> >
> > Any ideas, thoughts and suggestions are very welcome.
> >
> > Cheers,
> > Andrés
> >
> > ------------------------------------------------------------------------------
> > Put Bad Developers to Shame
> > Dominate Development with Jenkins Continuous Integration
> > Continuously Automate Build, Test & Deployment
> > Start a new project now. Try Jenkins in the cloud.
> > http://p.sf.net/sfu/13600_Cloudbees
> > _______________________________________________
> > Csound-devel mailing list
> > Csound-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/csound-devel
> >
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel



Date2014-04-10 22:03
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Thanks. And how would one query the value of a variable once the
breakpoint is hit? How does one access that information from the
Csound structure? Btw, your debugger interface in CsounsQT looks
really top-class. I could hope to implement anything as professional
as that, but I like the idea of being able to stop and query variables
on the fly. Is this possible, your screen-shot seems to indicate so?
This will be so useful in teaching!


On 10 April 2014 21:58, Andres Cabrera  wrote:
> Also, since the breakpoint callback gets the CSOUND structure, it can get
> all of its information from there.
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera 
> wrote:
>>
>> Hi Rory,
>>
>> Essentially, your application could do something like:
>>
>>     int break_count = 0;
>>     CSOUND* csound = csoundCreate(NULL);
>>     csoundCompileOrc(csound, "instr 1\nasig oscil 1, p4\nendin\n");
>>     csoundInputMessage(csound, "i 1.1 0   1 440");
>>     csoundStart(csound);
>>     csoundDebuggerInit(csound);
>>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *) &break_count);
>>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>>
>>     for (i = 0; i < 1000; i++) {
>>         csoundPerformKsmps(csound);
>>     }
>>     CU_ASSERT(break_count == 1);
>>
>>     csoundDebuggerClean(csound);
>>     csoundDestroy(csound);
>>
>> Whenever the breakpoint is reached, the breakpoint callback is called.
>>
>> Currently only instrument breakpoints are implemented (i.e. the debugger
>> breaks when an instrument is active), but I also want to add line
>> breakpoints.
>>
>> Cheers,
>> Andrés
>>
>> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh  wrote:
>> >
>> > Wow, this looks super cool Andres. I'm just looking through the code
>> > now. Do you have a basic example of setting this up? The CUnit stuff
>> > in that debugger test code you posted is confusing me.
>> >
>> > On 10 April 2014 21:13, Andres Cabrera  wrote:
>> > > Hi,
>> > >
>> > > The Csound debugger I'm working on is finally getting to a useful
>> > > testing
>> > > stage.
>> > >
>> > > I've been doing the work in the csdebugger branch, if you have time,
>> > > please
>> > > have a look.
>> > >
>> > > To build the debugger, you will need to add to cmake:
>> > > -DBUILD_DEBUGGER=1
>> > >
>> > > You will find some simple tests of the API here:
>> > >
>> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> > >
>> > > I have written a debugger front-end within CsoundQt, which you are
>> > > welcome
>> > > to try out too:
>> > > http://qutecsound.sourceforge.net/debugger2.html
>> > >
>> > > Some internal details:
>> > > The debugger interface is found at:
>> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> > >
>> > > Although the debugger functions are part of the API, I think it's
>> > > cleaner to
>> > > have them in their own header, as they are also a compile time option.
>> > >
>> > > Because the changes are somewhat invasive, I chose to make the kperf
>> > > function a pointer within the CSOUND struct that defaults to nodebug.
>> > > When
>> > > the debugger is initialized the kperf function pointer is switched to
>> > > the
>> > > debug version, and switched back when the debugger is disabled
>> > > csoundDebuggerInit() and csoundDebuggerClean() functions.
>> > >
>> > > When a breakpoint is reached, a callback function that has been
>> > > registered
>> > > with csoundSetBreakpointCallback(CSOUND *csound, breakpoint_cb_t
>> > > bkpt_cb,
>> > > void *userdata) is called.
>> > >
>> > > When a breakpoint is reached, after the callback is called, the kperf
>> > > function continues running as usual, providing empty buffers to the
>> > > audio
>> > > hardware, and not incrementing the time counters in musmon. When a
>> > > continue
>> > > is reached, the graph traversing continues where it left off.
>> > >
>> > > There are probably still a few bugs, but it's now working on my simple
>> > > tests.
>> > >
>> > > Any ideas, thoughts and suggestions are very welcome.
>> > >
>> > > Cheers,
>> > > Andrés
>> > >
>> > >
>> > > ------------------------------------------------------------------------------
>> > > Put Bad Developers to Shame
>> > > Dominate Development with Jenkins Continuous Integration
>> > > Continuously Automate Build, Test & Deployment
>> > > Start a new project now. Try Jenkins in the cloud.
>> > > http://p.sf.net/sfu/13600_Cloudbees
>> > > _______________________________________________
>> > > Csound-devel mailing list
>> > > Csound-devel@lists.sourceforge.net
>> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> > >
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Put Bad Developers to Shame
>> > Dominate Development with Jenkins Continuous Integration
>> > Continuously Automate Build, Test & Deployment
>> > Start a new project now. Try Jenkins in the cloud.
>> > http://p.sf.net/sfu/13600_Cloudbees
>> > _______________________________________________
>> > Csound-devel mailing list
>> > Csound-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-10 22:10
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
Hi,

My breakpoint callback looks like this:

void CsoundEngine::breakpointCallback(CSOUND *csound, int line, double instr, void *udata)
{
    qDebug() <<"breakpointCallback " << line << instr;
    INSDS *insds = csoundDebugGetInstrument(csound);
    CsoundEngine *cs = (CsoundEngine *) udata;
    // Copy variable list
    CS_VARIABLE *vp = insds->instr->varPool->head;
    cs->variableMutex.lock();
    cs->m_varList.clear();
    while (vp) {
        if (vp->varName[0] != '#') {
            QVariantList varDetails;
            varDetails << vp->varName;
            if (strcmp(vp->varType->varTypeName, "i") == 0
                    || strcmp(vp->varType->varTypeName, "k") == 0) {
                if (vp->memBlock) {
                    varDetails << *((MYFLT *)vp->memBlock);
                } else {
                    MYFLT *varmem = insds->lclbas + vp->memBlockIndex;
                    varDetails << QVariant(*varmem);
                }
            } else if(strcmp(vp->varType->varTypeName, "S") == 0) {
                if (vp->memBlock) {
                    varDetails << *((char *)vp->memBlock);
                } else {
                    char *varmem = (char *) (insds->lclbas + vp->memBlockIndex);
                    varDetails << QVariant(varmem);
                }
            } else if (strcmp(vp->varType->varTypeName, "a") == 0) {
                if (vp->memBlock) {
                    varDetails << *((MYFLT *)vp->memBlock) << *((MYFLT *)vp->memBlock + 1)
                               << *((MYFLT *)vp->memBlock + 2)<< *((MYFLT *)vp->memBlock + 3);
                } else {
                    MYFLT *varmem = insds->lclbas + vp->memBlockIndex;
                    varDetails << QVariant(*varmem);
                }
            } else {
                varDetails << QVariant();
            }
            varDetails << vp->varType->varTypeName;
            cs->m_varList << varDetails;
        }
        vp = vp->next;
    }
    cs->variableMutex.unlock();

    //Copy active instrument list
    cs->instrumentMutex.lock();
    cs->m_instrumentList.clear();
    INSDS *in = insds;
    while (in->prvact) {
        in = in->prvact;
    }

    while (in) {
        QVariantList instance;
        instance << in->p1;
        instance << QString("%1 %2").arg(in->p2).arg(in->p3);
        instance << in->kcounter;
        cs->m_instrumentList << instance;
        in = in->nxtact;
    }

    cs->instrumentMutex.unlock();
    emit cs->breakpointReached();
}


And yes you can actually click the pause button and the debugger will stop and show you where it is, even if there is no breakpoint there.

Cheers,
Andrés


On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
Thanks. And how would one query the value of a variable once the
breakpoint is hit? How does one access that information from the
Csound structure? Btw, your debugger interface in CsounsQT looks
really top-class. I could hope to implement anything as professional
as that, but I like the idea of being able to stop and query variables
on the fly. Is this possible, your screen-shot seems to indicate so?
This will be so useful in teaching!


On 10 April 2014 21:58, Andres Cabrera <mantaraya36@gmail.com> wrote:
> Also, since the breakpoint callback gets the CSOUND structure, it can get
> all of its information from there.
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera <mantaraya36@gmail.com>
> wrote:
>>
>> Hi Rory,
>>
>> Essentially, your application could do something like:
>>
>>     int break_count = 0;
>>     CSOUND* csound = csoundCreate(NULL);
>>     csoundCompileOrc(csound, "instr 1\nasig oscil 1, p4\nendin\n");
>>     csoundInputMessage(csound, "i 1.1 0   1 440");
>>     csoundStart(csound);
>>     csoundDebuggerInit(csound);
>>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *) &break_count);
>>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>>
>>     for (i = 0; i < 1000; i++) {
>>         csoundPerformKsmps(csound);
>>     }
>>     CU_ASSERT(break_count == 1);
>>
>>     csoundDebuggerClean(csound);
>>     csoundDestroy(csound);
>>
>> Whenever the breakpoint is reached, the breakpoint callback is called.
>>
>> Currently only instrument breakpoints are implemented (i.e. the debugger
>> breaks when an instrument is active), but I also want to add line
>> breakpoints.
>>
>> Cheers,
>> Andrés
>>
>> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >
>> > Wow, this looks super cool Andres. I'm just looking through the code
>> > now. Do you have a basic example of setting this up? The CUnit stuff
>> > in that debugger test code you posted is confusing me.
>> >
>> > On 10 April 2014 21:13, Andres Cabrera <mantaraya36@gmail.com> wrote:
>> > > Hi,
>> > >
>> > > The Csound debugger I'm working on is finally getting to a useful
>> > > testing
>> > > stage.
>> > >
>> > > I've been doing the work in the csdebugger branch, if you have time,
>> > > please
>> > > have a look.
>> > >
>> > > To build the debugger, you will need to add to cmake:
>> > > -DBUILD_DEBUGGER=1
>> > >
>> > > You will find some simple tests of the API here:
>> > >
>> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> > >
>> > > I have written a debugger front-end within CsoundQt, which you are
>> > > welcome
>> > > to try out too:
>> > > http://qutecsound.sourceforge.net/debugger2.html
>> > >
>> > > Some internal details:
>> > > The debugger interface is found at:
>> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> > >
>> > > Although the debugger functions are part of the API, I think it's
>> > > cleaner to
>> > > have them in their own header, as they are also a compile time option.
>> > >
>> > > Because the changes are somewhat invasive, I chose to make the kperf
>> > > function a pointer within the CSOUND struct that defaults to nodebug.
>> > > When
>> > > the debugger is initialized the kperf function pointer is switched to
>> > > the
>> > > debug version, and switched back when the debugger is disabled
>> > > csoundDebuggerInit() and csoundDebuggerClean() functions.
>> > >
>> > > When a breakpoint is reached, a callback function that has been
>> > > registered
>> > > with csoundSetBreakpointCallback(CSOUND *csound, breakpoint_cb_t
>> > > bkpt_cb,
>> > > void *userdata) is called.
>> > >
>> > > When a breakpoint is reached, after the callback is called, the kperf
>> > > function continues running as usual, providing empty buffers to the
>> > > audio
>> > > hardware, and not incrementing the time counters in musmon. When a
>> > > continue
>> > > is reached, the graph traversing continues where it left off.
>> > >
>> > > There are probably still a few bugs, but it's now working on my simple
>> > > tests.
>> > >
>> > > Any ideas, thoughts and suggestions are very welcome.
>> > >
>> > > Cheers,
>> > > Andrés
>> > >
>> > >
>> > > ------------------------------------------------------------------------------
>> > > Put Bad Developers to Shame
>> > > Dominate Development with Jenkins Continuous Integration
>> > > Continuously Automate Build, Test & Deployment
>> > > Start a new project now. Try Jenkins in the cloud.
>> > > http://p.sf.net/sfu/13600_Cloudbees
>> > > _______________________________________________
>> > > Csound-devel mailing list
>> > > Csound-devel@lists.sourceforge.net
>> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> > >
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Put Bad Developers to Shame
>> > Dominate Development with Jenkins Continuous Integration
>> > Continuously Automate Build, Test & Deployment
>> > Start a new project now. Try Jenkins in the cloud.
>> > http://p.sf.net/sfu/13600_Cloudbees
>> > _______________________________________________
>> > Csound-devel mailing list
>> > Csound-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-10 22:20
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
So you grab the values for all the variables in a particular line each
time this callback function is hit? Am I reading that right?

On 10 April 2014 22:10, Andres Cabrera  wrote:
> Hi,
>
> My breakpoint callback looks like this:
>
> void CsoundEngine::breakpointCallback(CSOUND *csound, int line, double
> instr, void *udata)
> {
>     qDebug() <<"breakpointCallback " << line << instr;
>     INSDS *insds = csoundDebugGetInstrument(csound);
>     CsoundEngine *cs = (CsoundEngine *) udata;
>     // Copy variable list
>     CS_VARIABLE *vp = insds->instr->varPool->head;
>     cs->variableMutex.lock();
>     cs->m_varList.clear();
>     while (vp) {
>         if (vp->varName[0] != '#') {
>             QVariantList varDetails;
>             varDetails << vp->varName;
>             if (strcmp(vp->varType->varTypeName, "i") == 0
>                     || strcmp(vp->varType->varTypeName, "k") == 0) {
>                 if (vp->memBlock) {
>                     varDetails << *((MYFLT *)vp->memBlock);
>                 } else {
>                     MYFLT *varmem = insds->lclbas + vp->memBlockIndex;
>                     varDetails << QVariant(*varmem);
>                 }
>             } else if(strcmp(vp->varType->varTypeName, "S") == 0) {
>                 if (vp->memBlock) {
>                     varDetails << *((char *)vp->memBlock);
>                 } else {
>                     char *varmem = (char *) (insds->lclbas +
> vp->memBlockIndex);
>                     varDetails << QVariant(varmem);
>                 }
>             } else if (strcmp(vp->varType->varTypeName, "a") == 0) {
>                 if (vp->memBlock) {
>                     varDetails << *((MYFLT *)vp->memBlock) << *((MYFLT
> *)vp->memBlock + 1)
>                                << *((MYFLT *)vp->memBlock + 2)<< *((MYFLT
> *)vp->memBlock + 3);
>                 } else {
>                     MYFLT *varmem = insds->lclbas + vp->memBlockIndex;
>                     varDetails << QVariant(*varmem);
>                 }
>             } else {
>                 varDetails << QVariant();
>             }
>             varDetails << vp->varType->varTypeName;
>             cs->m_varList << varDetails;
>         }
>         vp = vp->next;
>     }
>     cs->variableMutex.unlock();
>
>     //Copy active instrument list
>     cs->instrumentMutex.lock();
>     cs->m_instrumentList.clear();
>     INSDS *in = insds;
>     while (in->prvact) {
>         in = in->prvact;
>     }
>
>     while (in) {
>         QVariantList instance;
>         instance << in->p1;
>         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>         instance << in->kcounter;
>         cs->m_instrumentList << instance;
>         in = in->nxtact;
>     }
>
>     cs->instrumentMutex.unlock();
>     emit cs->breakpointReached();
> }
>
>
> And yes you can actually click the pause button and the debugger will stop
> and show you where it is, even if there is no breakpoint there.
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh  wrote:
>>
>> Thanks. And how would one query the value of a variable once the
>> breakpoint is hit? How does one access that information from the
>> Csound structure? Btw, your debugger interface in CsounsQT looks
>> really top-class. I could hope to implement anything as professional
>> as that, but I like the idea of being able to stop and query variables
>> on the fly. Is this possible, your screen-shot seems to indicate so?
>> This will be so useful in teaching!
>>
>>
>> On 10 April 2014 21:58, Andres Cabrera  wrote:
>> > Also, since the breakpoint callback gets the CSOUND structure, it can
>> > get
>> > all of its information from there.
>> >
>> > Cheers,
>> > Andrés
>> >
>> >
>> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera 
>> > wrote:
>> >>
>> >> Hi Rory,
>> >>
>> >> Essentially, your application could do something like:
>> >>
>> >>     int break_count = 0;
>> >>     CSOUND* csound = csoundCreate(NULL);
>> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1, p4\nendin\n");
>> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>> >>     csoundStart(csound);
>> >>     csoundDebuggerInit(csound);
>> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >> &break_count);
>> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>> >>
>> >>     for (i = 0; i < 1000; i++) {
>> >>         csoundPerformKsmps(csound);
>> >>     }
>> >>     CU_ASSERT(break_count == 1);
>> >>
>> >>     csoundDebuggerClean(csound);
>> >>     csoundDestroy(csound);
>> >>
>> >> Whenever the breakpoint is reached, the breakpoint callback is called.
>> >>
>> >> Currently only instrument breakpoints are implemented (i.e. the
>> >> debugger
>> >> breaks when an instrument is active), but I also want to add line
>> >> breakpoints.
>> >>
>> >> Cheers,
>> >> Andrés
>> >>
>> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh  wrote:
>> >> >
>> >> > Wow, this looks super cool Andres. I'm just looking through the code
>> >> > now. Do you have a basic example of setting this up? The CUnit stuff
>> >> > in that debugger test code you posted is confusing me.
>> >> >
>> >> > On 10 April 2014 21:13, Andres Cabrera  wrote:
>> >> > > Hi,
>> >> > >
>> >> > > The Csound debugger I'm working on is finally getting to a useful
>> >> > > testing
>> >> > > stage.
>> >> > >
>> >> > > I've been doing the work in the csdebugger branch, if you have
>> >> > > time,
>> >> > > please
>> >> > > have a look.
>> >> > >
>> >> > > To build the debugger, you will need to add to cmake:
>> >> > > -DBUILD_DEBUGGER=1
>> >> > >
>> >> > > You will find some simple tests of the API here:
>> >> > >
>> >> > >
>> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >> > >
>> >> > > I have written a debugger front-end within CsoundQt, which you are
>> >> > > welcome
>> >> > > to try out too:
>> >> > > http://qutecsound.sourceforge.net/debugger2.html
>> >> > >
>> >> > > Some internal details:
>> >> > > The debugger interface is found at:
>> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >> > >
>> >> > > Although the debugger functions are part of the API, I think it's
>> >> > > cleaner to
>> >> > > have them in their own header, as they are also a compile time
>> >> > > option.
>> >> > >
>> >> > > Because the changes are somewhat invasive, I chose to make the
>> >> > > kperf
>> >> > > function a pointer within the CSOUND struct that defaults to
>> >> > > nodebug.
>> >> > > When
>> >> > > the debugger is initialized the kperf function pointer is switched
>> >> > > to
>> >> > > the
>> >> > > debug version, and switched back when the debugger is disabled
>> >> > > csoundDebuggerInit() and csoundDebuggerClean() functions.
>> >> > >
>> >> > > When a breakpoint is reached, a callback function that has been
>> >> > > registered
>> >> > > with csoundSetBreakpointCallback(CSOUND *csound, breakpoint_cb_t
>> >> > > bkpt_cb,
>> >> > > void *userdata) is called.
>> >> > >
>> >> > > When a breakpoint is reached, after the callback is called, the
>> >> > > kperf
>> >> > > function continues running as usual, providing empty buffers to the
>> >> > > audio
>> >> > > hardware, and not incrementing the time counters in musmon. When a
>> >> > > continue
>> >> > > is reached, the graph traversing continues where it left off.
>> >> > >
>> >> > > There are probably still a few bugs, but it's now working on my
>> >> > > simple
>> >> > > tests.
>> >> > >
>> >> > > Any ideas, thoughts and suggestions are very welcome.
>> >> > >
>> >> > > Cheers,
>> >> > > Andrés
>> >> > >
>> >> > >
>> >> > >
>> >> > > ------------------------------------------------------------------------------
>> >> > > Put Bad Developers to Shame
>> >> > > Dominate Development with Jenkins Continuous Integration
>> >> > > Continuously Automate Build, Test & Deployment
>> >> > > Start a new project now. Try Jenkins in the cloud.
>> >> > > http://p.sf.net/sfu/13600_Cloudbees
>> >> > > _______________________________________________
>> >> > > Csound-devel mailing list
>> >> > > Csound-devel@lists.sourceforge.net
>> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> > >
>> >> >
>> >> >
>> >> >
>> >> > ------------------------------------------------------------------------------
>> >> > Put Bad Developers to Shame
>> >> > Dominate Development with Jenkins Continuous Integration
>> >> > Continuously Automate Build, Test & Deployment
>> >> > Start a new project now. Try Jenkins in the cloud.
>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> > _______________________________________________
>> >> > Csound-devel mailing list
>> >> > Csound-devel@lists.sourceforge.net
>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>
>> >
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Put Bad Developers to Shame
>> > Dominate Development with Jenkins Continuous Integration
>> > Continuously Automate Build, Test & Deployment
>> > Start a new project now. Try Jenkins in the cloud.
>> > http://p.sf.net/sfu/13600_Cloudbees
>> > _______________________________________________
>> > Csound-devel mailing list
>> > Csound-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-10 22:29
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
Not exactly.

the function:
csoundDebugGetInstrument(csound);

Gives you a pointer to the currently active instrument (where the debugger interrupted execution). You can then get the information about the instrument instance (variables and time counters, p-fields, etc.) from it.

The callback function is only called if a breakpoint is reached, which is checked inside csound's kperf function. There is a linked list of breakpoints (that is managed in a thread-safe way), which is traversed to check if the current instrument matches a breakpoint. For line breakpoints, what will need to happen is that for every opcode that is executed, it is checked whether it matches to a breakpoint line.

Cheers,
Andrés


On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
So you grab the values for all the variables in a particular line each
time this callback function is hit? Am I reading that right?

On 10 April 2014 22:10, Andres Cabrera <mantaraya36@gmail.com> wrote:
> Hi,
>
> My breakpoint callback looks like this:
>
> void CsoundEngine::breakpointCallback(CSOUND *csound, int line, double
> instr, void *udata)
> {
>     qDebug() <<"breakpointCallback " << line << instr;
>     INSDS *insds = csoundDebugGetInstrument(csound);
>     CsoundEngine *cs = (CsoundEngine *) udata;
>     // Copy variable list
>     CS_VARIABLE *vp = insds->instr->varPool->head;
>     cs->variableMutex.lock();
>     cs->m_varList.clear();
>     while (vp) {
>         if (vp->varName[0] != '#') {
>             QVariantList varDetails;
>             varDetails << vp->varName;
>             if (strcmp(vp->varType->varTypeName, "i") == 0
>                     || strcmp(vp->varType->varTypeName, "k") == 0) {
>                 if (vp->memBlock) {
>                     varDetails << *((MYFLT *)vp->memBlock);
>                 } else {
>                     MYFLT *varmem = insds->lclbas + vp->memBlockIndex;
>                     varDetails << QVariant(*varmem);
>                 }
>             } else if(strcmp(vp->varType->varTypeName, "S") == 0) {
>                 if (vp->memBlock) {
>                     varDetails << *((char *)vp->memBlock);
>                 } else {
>                     char *varmem = (char *) (insds->lclbas +
> vp->memBlockIndex);
>                     varDetails << QVariant(varmem);
>                 }
>             } else if (strcmp(vp->varType->varTypeName, "a") == 0) {
>                 if (vp->memBlock) {
>                     varDetails << *((MYFLT *)vp->memBlock) << *((MYFLT
> *)vp->memBlock + 1)
>                                << *((MYFLT *)vp->memBlock + 2)<< *((MYFLT
> *)vp->memBlock + 3);
>                 } else {
>                     MYFLT *varmem = insds->lclbas + vp->memBlockIndex;
>                     varDetails << QVariant(*varmem);
>                 }
>             } else {
>                 varDetails << QVariant();
>             }
>             varDetails << vp->varType->varTypeName;
>             cs->m_varList << varDetails;
>         }
>         vp = vp->next;
>     }
>     cs->variableMutex.unlock();
>
>     //Copy active instrument list
>     cs->instrumentMutex.lock();
>     cs->m_instrumentList.clear();
>     INSDS *in = insds;
>     while (in->prvact) {
>         in = in->prvact;
>     }
>
>     while (in) {
>         QVariantList instance;
>         instance << in->p1;
>         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>         instance << in->kcounter;
>         cs->m_instrumentList << instance;
>         in = in->nxtact;
>     }
>
>     cs->instrumentMutex.unlock();
>     emit cs->breakpointReached();
> }
>
>
> And yes you can actually click the pause button and the debugger will stop
> and show you where it is, even if there is no breakpoint there.
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>
>> Thanks. And how would one query the value of a variable once the
>> breakpoint is hit? How does one access that information from the
>> Csound structure? Btw, your debugger interface in CsounsQT looks
>> really top-class. I could hope to implement anything as professional
>> as that, but I like the idea of being able to stop and query variables
>> on the fly. Is this possible, your screen-shot seems to indicate so?
>> This will be so useful in teaching!
>>
>>
>> On 10 April 2014 21:58, Andres Cabrera <mantaraya36@gmail.com> wrote:
>> > Also, since the breakpoint callback gets the CSOUND structure, it can
>> > get
>> > all of its information from there.
>> >
>> > Cheers,
>> > Andrés
>> >
>> >
>> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera <mantaraya36@gmail.com>
>> > wrote:
>> >>
>> >> Hi Rory,
>> >>
>> >> Essentially, your application could do something like:
>> >>
>> >>     int break_count = 0;
>> >>     CSOUND* csound = csoundCreate(NULL);
>> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1, p4\nendin\n");
>> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>> >>     csoundStart(csound);
>> >>     csoundDebuggerInit(csound);
>> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >> &break_count);
>> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>> >>
>> >>     for (i = 0; i < 1000; i++) {
>> >>         csoundPerformKsmps(csound);
>> >>     }
>> >>     CU_ASSERT(break_count == 1);
>> >>
>> >>     csoundDebuggerClean(csound);
>> >>     csoundDestroy(csound);
>> >>
>> >> Whenever the breakpoint is reached, the breakpoint callback is called.
>> >>
>> >> Currently only instrument breakpoints are implemented (i.e. the
>> >> debugger
>> >> breaks when an instrument is active), but I also want to add line
>> >> breakpoints.
>> >>
>> >> Cheers,
>> >> Andrés
>> >>
>> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >> >
>> >> > Wow, this looks super cool Andres. I'm just looking through the code
>> >> > now. Do you have a basic example of setting this up? The CUnit stuff
>> >> > in that debugger test code you posted is confusing me.
>> >> >
>> >> > On 10 April 2014 21:13, Andres Cabrera <mantaraya36@gmail.com> wrote:
>> >> > > Hi,
>> >> > >
>> >> > > The Csound debugger I'm working on is finally getting to a useful
>> >> > > testing
>> >> > > stage.
>> >> > >
>> >> > > I've been doing the work in the csdebugger branch, if you have
>> >> > > time,
>> >> > > please
>> >> > > have a look.
>> >> > >
>> >> > > To build the debugger, you will need to add to cmake:
>> >> > > -DBUILD_DEBUGGER=1
>> >> > >
>> >> > > You will find some simple tests of the API here:
>> >> > >
>> >> > >
>> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >> > >
>> >> > > I have written a debugger front-end within CsoundQt, which you are
>> >> > > welcome
>> >> > > to try out too:
>> >> > > http://qutecsound.sourceforge.net/debugger2.html
>> >> > >
>> >> > > Some internal details:
>> >> > > The debugger interface is found at:
>> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >> > >
>> >> > > Although the debugger functions are part of the API, I think it's
>> >> > > cleaner to
>> >> > > have them in their own header, as they are also a compile time
>> >> > > option.
>> >> > >
>> >> > > Because the changes are somewhat invasive, I chose to make the
>> >> > > kperf
>> >> > > function a pointer within the CSOUND struct that defaults to
>> >> > > nodebug.
>> >> > > When
>> >> > > the debugger is initialized the kperf function pointer is switched
>> >> > > to
>> >> > > the
>> >> > > debug version, and switched back when the debugger is disabled
>> >> > > csoundDebuggerInit() and csoundDebuggerClean() functions.
>> >> > >
>> >> > > When a breakpoint is reached, a callback function that has been
>> >> > > registered
>> >> > > with csoundSetBreakpointCallback(CSOUND *csound, breakpoint_cb_t
>> >> > > bkpt_cb,
>> >> > > void *userdata) is called.
>> >> > >
>> >> > > When a breakpoint is reached, after the callback is called, the
>> >> > > kperf
>> >> > > function continues running as usual, providing empty buffers to the
>> >> > > audio
>> >> > > hardware, and not incrementing the time counters in musmon. When a
>> >> > > continue
>> >> > > is reached, the graph traversing continues where it left off.
>> >> > >
>> >> > > There are probably still a few bugs, but it's now working on my
>> >> > > simple
>> >> > > tests.
>> >> > >
>> >> > > Any ideas, thoughts and suggestions are very welcome.
>> >> > >
>> >> > > Cheers,
>> >> > > Andrés
>> >> > >
>> >> > >
>> >> > >
>> >> > > ------------------------------------------------------------------------------
>> >> > > Put Bad Developers to Shame
>> >> > > Dominate Development with Jenkins Continuous Integration
>> >> > > Continuously Automate Build, Test & Deployment
>> >> > > Start a new project now. Try Jenkins in the cloud.
>> >> > > http://p.sf.net/sfu/13600_Cloudbees
>> >> > > _______________________________________________
>> >> > > Csound-devel mailing list
>> >> > > Csound-devel@lists.sourceforge.net
>> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> > >
>> >> >
>> >> >
>> >> >
>> >> > ------------------------------------------------------------------------------
>> >> > Put Bad Developers to Shame
>> >> > Dominate Development with Jenkins Continuous Integration
>> >> > Continuously Automate Build, Test & Deployment
>> >> > Start a new project now. Try Jenkins in the cloud.
>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> > _______________________________________________
>> >> > Csound-devel mailing list
>> >> > Csound-devel@lists.sourceforge.net
>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>
>> >
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Put Bad Developers to Shame
>> > Dominate Development with Jenkins Continuous Integration
>> > Continuously Automate Build, Test & Deployment
>> > Start a new project now. Try Jenkins in the cloud.
>> > http://p.sf.net/sfu/13600_Cloudbees
>> > _______________________________________________
>> > Csound-devel mailing list
>> > Csound-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-10 22:35
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Ok, that sounds good. To help get my head around this I might try to
write a simple command line app that passes a breakpoint line number
as a parameter, and then when it hits, it will print out the values of
each variable in that instrument. That would be a start.

On 10 April 2014 22:29, Andres Cabrera  wrote:
> Not exactly.
>
> the function:
> csoundDebugGetInstrument(csound);
>
> Gives you a pointer to the currently active instrument (where the debugger
> interrupted execution). You can then get the information about the
> instrument instance (variables and time counters, p-fields, etc.) from it.
>
> The callback function is only called if a breakpoint is reached, which is
> checked inside csound's kperf function. There is a linked list of
> breakpoints (that is managed in a thread-safe way), which is traversed to
> check if the current instrument matches a breakpoint. For line breakpoints,
> what will need to happen is that for every opcode that is executed, it is
> checked whether it matches to a breakpoint line.
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh  wrote:
>>
>> So you grab the values for all the variables in a particular line each
>> time this callback function is hit? Am I reading that right?
>>
>> On 10 April 2014 22:10, Andres Cabrera  wrote:
>> > Hi,
>> >
>> > My breakpoint callback looks like this:
>> >
>> > void CsoundEngine::breakpointCallback(CSOUND *csound, int line, double
>> > instr, void *udata)
>> > {
>> >     qDebug() <<"breakpointCallback " << line << instr;
>> >     INSDS *insds = csoundDebugGetInstrument(csound);
>> >     CsoundEngine *cs = (CsoundEngine *) udata;
>> >     // Copy variable list
>> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>> >     cs->variableMutex.lock();
>> >     cs->m_varList.clear();
>> >     while (vp) {
>> >         if (vp->varName[0] != '#') {
>> >             QVariantList varDetails;
>> >             varDetails << vp->varName;
>> >             if (strcmp(vp->varType->varTypeName, "i") == 0
>> >                     || strcmp(vp->varType->varTypeName, "k") == 0) {
>> >                 if (vp->memBlock) {
>> >                     varDetails << *((MYFLT *)vp->memBlock);
>> >                 } else {
>> >                     MYFLT *varmem = insds->lclbas + vp->memBlockIndex;
>> >                     varDetails << QVariant(*varmem);
>> >                 }
>> >             } else if(strcmp(vp->varType->varTypeName, "S") == 0) {
>> >                 if (vp->memBlock) {
>> >                     varDetails << *((char *)vp->memBlock);
>> >                 } else {
>> >                     char *varmem = (char *) (insds->lclbas +
>> > vp->memBlockIndex);
>> >                     varDetails << QVariant(varmem);
>> >                 }
>> >             } else if (strcmp(vp->varType->varTypeName, "a") == 0) {
>> >                 if (vp->memBlock) {
>> >                     varDetails << *((MYFLT *)vp->memBlock) << *((MYFLT
>> > *)vp->memBlock + 1)
>> >                                << *((MYFLT *)vp->memBlock + 2)<<
>> > *((MYFLT
>> > *)vp->memBlock + 3);
>> >                 } else {
>> >                     MYFLT *varmem = insds->lclbas + vp->memBlockIndex;
>> >                     varDetails << QVariant(*varmem);
>> >                 }
>> >             } else {
>> >                 varDetails << QVariant();
>> >             }
>> >             varDetails << vp->varType->varTypeName;
>> >             cs->m_varList << varDetails;
>> >         }
>> >         vp = vp->next;
>> >     }
>> >     cs->variableMutex.unlock();
>> >
>> >     //Copy active instrument list
>> >     cs->instrumentMutex.lock();
>> >     cs->m_instrumentList.clear();
>> >     INSDS *in = insds;
>> >     while (in->prvact) {
>> >         in = in->prvact;
>> >     }
>> >
>> >     while (in) {
>> >         QVariantList instance;
>> >         instance << in->p1;
>> >         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>> >         instance << in->kcounter;
>> >         cs->m_instrumentList << instance;
>> >         in = in->nxtact;
>> >     }
>> >
>> >     cs->instrumentMutex.unlock();
>> >     emit cs->breakpointReached();
>> > }
>> >
>> >
>> > And yes you can actually click the pause button and the debugger will
>> > stop
>> > and show you where it is, even if there is no breakpoint there.
>> >
>> > Cheers,
>> > Andrés
>> >
>> >
>> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh  wrote:
>> >>
>> >> Thanks. And how would one query the value of a variable once the
>> >> breakpoint is hit? How does one access that information from the
>> >> Csound structure? Btw, your debugger interface in CsounsQT looks
>> >> really top-class. I could hope to implement anything as professional
>> >> as that, but I like the idea of being able to stop and query variables
>> >> on the fly. Is this possible, your screen-shot seems to indicate so?
>> >> This will be so useful in teaching!
>> >>
>> >>
>> >> On 10 April 2014 21:58, Andres Cabrera  wrote:
>> >> > Also, since the breakpoint callback gets the CSOUND structure, it can
>> >> > get
>> >> > all of its information from there.
>> >> >
>> >> > Cheers,
>> >> > Andrés
>> >> >
>> >> >
>> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>> >> > 
>> >> > wrote:
>> >> >>
>> >> >> Hi Rory,
>> >> >>
>> >> >> Essentially, your application could do something like:
>> >> >>
>> >> >>     int break_count = 0;
>> >> >>     CSOUND* csound = csoundCreate(NULL);
>> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1, p4\nendin\n");
>> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>> >> >>     csoundStart(csound);
>> >> >>     csoundDebuggerInit(csound);
>> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >> >> &break_count);
>> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>> >> >>
>> >> >>     for (i = 0; i < 1000; i++) {
>> >> >>         csoundPerformKsmps(csound);
>> >> >>     }
>> >> >>     CU_ASSERT(break_count == 1);
>> >> >>
>> >> >>     csoundDebuggerClean(csound);
>> >> >>     csoundDestroy(csound);
>> >> >>
>> >> >> Whenever the breakpoint is reached, the breakpoint callback is
>> >> >> called.
>> >> >>
>> >> >> Currently only instrument breakpoints are implemented (i.e. the
>> >> >> debugger
>> >> >> breaks when an instrument is active), but I also want to add line
>> >> >> breakpoints.
>> >> >>
>> >> >> Cheers,
>> >> >> Andrés
>> >> >>
>> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh 
>> >> >> wrote:
>> >> >> >
>> >> >> > Wow, this looks super cool Andres. I'm just looking through the
>> >> >> > code
>> >> >> > now. Do you have a basic example of setting this up? The CUnit
>> >> >> > stuff
>> >> >> > in that debugger test code you posted is confusing me.
>> >> >> >
>> >> >> > On 10 April 2014 21:13, Andres Cabrera 
>> >> >> > wrote:
>> >> >> > > Hi,
>> >> >> > >
>> >> >> > > The Csound debugger I'm working on is finally getting to a
>> >> >> > > useful
>> >> >> > > testing
>> >> >> > > stage.
>> >> >> > >
>> >> >> > > I've been doing the work in the csdebugger branch, if you have
>> >> >> > > time,
>> >> >> > > please
>> >> >> > > have a look.
>> >> >> > >
>> >> >> > > To build the debugger, you will need to add to cmake:
>> >> >> > > -DBUILD_DEBUGGER=1
>> >> >> > >
>> >> >> > > You will find some simple tests of the API here:
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >> >> > >
>> >> >> > > I have written a debugger front-end within CsoundQt, which you
>> >> >> > > are
>> >> >> > > welcome
>> >> >> > > to try out too:
>> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>> >> >> > >
>> >> >> > > Some internal details:
>> >> >> > > The debugger interface is found at:
>> >> >> > >
>> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >> >> > >
>> >> >> > > Although the debugger functions are part of the API, I think
>> >> >> > > it's
>> >> >> > > cleaner to
>> >> >> > > have them in their own header, as they are also a compile time
>> >> >> > > option.
>> >> >> > >
>> >> >> > > Because the changes are somewhat invasive, I chose to make the
>> >> >> > > kperf
>> >> >> > > function a pointer within the CSOUND struct that defaults to
>> >> >> > > nodebug.
>> >> >> > > When
>> >> >> > > the debugger is initialized the kperf function pointer is
>> >> >> > > switched
>> >> >> > > to
>> >> >> > > the
>> >> >> > > debug version, and switched back when the debugger is disabled
>> >> >> > > csoundDebuggerInit() and csoundDebuggerClean() functions.
>> >> >> > >
>> >> >> > > When a breakpoint is reached, a callback function that has been
>> >> >> > > registered
>> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound, breakpoint_cb_t
>> >> >> > > bkpt_cb,
>> >> >> > > void *userdata) is called.
>> >> >> > >
>> >> >> > > When a breakpoint is reached, after the callback is called, the
>> >> >> > > kperf
>> >> >> > > function continues running as usual, providing empty buffers to
>> >> >> > > the
>> >> >> > > audio
>> >> >> > > hardware, and not incrementing the time counters in musmon. When
>> >> >> > > a
>> >> >> > > continue
>> >> >> > > is reached, the graph traversing continues where it left off.
>> >> >> > >
>> >> >> > > There are probably still a few bugs, but it's now working on my
>> >> >> > > simple
>> >> >> > > tests.
>> >> >> > >
>> >> >> > > Any ideas, thoughts and suggestions are very welcome.
>> >> >> > >
>> >> >> > > Cheers,
>> >> >> > > Andrés
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >> > > ------------------------------------------------------------------------------
>> >> >> > > Put Bad Developers to Shame
>> >> >> > > Dominate Development with Jenkins Continuous Integration
>> >> >> > > Continuously Automate Build, Test & Deployment
>> >> >> > > Start a new project now. Try Jenkins in the cloud.
>> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>> >> >> > > _______________________________________________
>> >> >> > > Csound-devel mailing list
>> >> >> > > Csound-devel@lists.sourceforge.net
>> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >> > >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > ------------------------------------------------------------------------------
>> >> >> > Put Bad Developers to Shame
>> >> >> > Dominate Development with Jenkins Continuous Integration
>> >> >> > Continuously Automate Build, Test & Deployment
>> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >> > _______________________________________________
>> >> >> > Csound-devel mailing list
>> >> >> > Csound-devel@lists.sourceforge.net
>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > ------------------------------------------------------------------------------
>> >> > Put Bad Developers to Shame
>> >> > Dominate Development with Jenkins Continuous Integration
>> >> > Continuously Automate Build, Test & Deployment
>> >> > Start a new project now. Try Jenkins in the cloud.
>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> > _______________________________________________
>> >> > Csound-devel mailing list
>> >> > Csound-devel@lists.sourceforge.net
>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >
>> >>
>> >>
>> >>
>> >> ------------------------------------------------------------------------------
>> >> Put Bad Developers to Shame
>> >> Dominate Development with Jenkins Continuous Integration
>> >> Continuously Automate Build, Test & Deployment
>> >> Start a new project now. Try Jenkins in the cloud.
>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> _______________________________________________
>> >> Csound-devel mailing list
>> >> Csound-devel@lists.sourceforge.net
>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>> >
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Put Bad Developers to Shame
>> > Dominate Development with Jenkins Continuous Integration
>> > Continuously Automate Build, Test & Deployment
>> > Start a new project now. Try Jenkins in the cloud.
>> > http://p.sf.net/sfu/13600_Cloudbees
>> > _______________________________________________
>> > Csound-devel mailing list
>> > Csound-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-10 22:44
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
Currently only instrument breakpoints are implemented...

Cheers,
Andrés


On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
Ok, that sounds good. To help get my head around this I might try to
write a simple command line app that passes a breakpoint line number
as a parameter, and then when it hits, it will print out the values of
each variable in that instrument. That would be a start.

On 10 April 2014 22:29, Andres Cabrera <mantaraya36@gmail.com> wrote:
> Not exactly.
>
> the function:
> csoundDebugGetInstrument(csound);
>
> Gives you a pointer to the currently active instrument (where the debugger
> interrupted execution). You can then get the information about the
> instrument instance (variables and time counters, p-fields, etc.) from it.
>
> The callback function is only called if a breakpoint is reached, which is
> checked inside csound's kperf function. There is a linked list of
> breakpoints (that is managed in a thread-safe way), which is traversed to
> check if the current instrument matches a breakpoint. For line breakpoints,
> what will need to happen is that for every opcode that is executed, it is
> checked whether it matches to a breakpoint line.
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>
>> So you grab the values for all the variables in a particular line each
>> time this callback function is hit? Am I reading that right?
>>
>> On 10 April 2014 22:10, Andres Cabrera <mantaraya36@gmail.com> wrote:
>> > Hi,
>> >
>> > My breakpoint callback looks like this:
>> >
>> > void CsoundEngine::breakpointCallback(CSOUND *csound, int line, double
>> > instr, void *udata)
>> > {
>> >     qDebug() <<"breakpointCallback " << line << instr;
>> >     INSDS *insds = csoundDebugGetInstrument(csound);
>> >     CsoundEngine *cs = (CsoundEngine *) udata;
>> >     // Copy variable list
>> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>> >     cs->variableMutex.lock();
>> >     cs->m_varList.clear();
>> >     while (vp) {
>> >         if (vp->varName[0] != '#') {
>> >             QVariantList varDetails;
>> >             varDetails << vp->varName;
>> >             if (strcmp(vp->varType->varTypeName, "i") == 0
>> >                     || strcmp(vp->varType->varTypeName, "k") == 0) {
>> >                 if (vp->memBlock) {
>> >                     varDetails << *((MYFLT *)vp->memBlock);
>> >                 } else {
>> >                     MYFLT *varmem = insds->lclbas + vp->memBlockIndex;
>> >                     varDetails << QVariant(*varmem);
>> >                 }
>> >             } else if(strcmp(vp->varType->varTypeName, "S") == 0) {
>> >                 if (vp->memBlock) {
>> >                     varDetails << *((char *)vp->memBlock);
>> >                 } else {
>> >                     char *varmem = (char *) (insds->lclbas +
>> > vp->memBlockIndex);
>> >                     varDetails << QVariant(varmem);
>> >                 }
>> >             } else if (strcmp(vp->varType->varTypeName, "a") == 0) {
>> >                 if (vp->memBlock) {
>> >                     varDetails << *((MYFLT *)vp->memBlock) << *((MYFLT
>> > *)vp->memBlock + 1)
>> >                                << *((MYFLT *)vp->memBlock + 2)<<
>> > *((MYFLT
>> > *)vp->memBlock + 3);
>> >                 } else {
>> >                     MYFLT *varmem = insds->lclbas + vp->memBlockIndex;
>> >                     varDetails << QVariant(*varmem);
>> >                 }
>> >             } else {
>> >                 varDetails << QVariant();
>> >             }
>> >             varDetails << vp->varType->varTypeName;
>> >             cs->m_varList << varDetails;
>> >         }
>> >         vp = vp->next;
>> >     }
>> >     cs->variableMutex.unlock();
>> >
>> >     //Copy active instrument list
>> >     cs->instrumentMutex.lock();
>> >     cs->m_instrumentList.clear();
>> >     INSDS *in = insds;
>> >     while (in->prvact) {
>> >         in = in->prvact;
>> >     }
>> >
>> >     while (in) {
>> >         QVariantList instance;
>> >         instance << in->p1;
>> >         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>> >         instance << in->kcounter;
>> >         cs->m_instrumentList << instance;
>> >         in = in->nxtact;
>> >     }
>> >
>> >     cs->instrumentMutex.unlock();
>> >     emit cs->breakpointReached();
>> > }
>> >
>> >
>> > And yes you can actually click the pause button and the debugger will
>> > stop
>> > and show you where it is, even if there is no breakpoint there.
>> >
>> > Cheers,
>> > Andrés
>> >
>> >
>> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >>
>> >> Thanks. And how would one query the value of a variable once the
>> >> breakpoint is hit? How does one access that information from the
>> >> Csound structure? Btw, your debugger interface in CsounsQT looks
>> >> really top-class. I could hope to implement anything as professional
>> >> as that, but I like the idea of being able to stop and query variables
>> >> on the fly. Is this possible, your screen-shot seems to indicate so?
>> >> This will be so useful in teaching!
>> >>
>> >>
>> >> On 10 April 2014 21:58, Andres Cabrera <mantaraya36@gmail.com> wrote:
>> >> > Also, since the breakpoint callback gets the CSOUND structure, it can
>> >> > get
>> >> > all of its information from there.
>> >> >
>> >> > Cheers,
>> >> > Andrés
>> >> >
>> >> >
>> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>> >> > <mantaraya36@gmail.com>
>> >> > wrote:
>> >> >>
>> >> >> Hi Rory,
>> >> >>
>> >> >> Essentially, your application could do something like:
>> >> >>
>> >> >>     int break_count = 0;
>> >> >>     CSOUND* csound = csoundCreate(NULL);
>> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1, p4\nendin\n");
>> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>> >> >>     csoundStart(csound);
>> >> >>     csoundDebuggerInit(csound);
>> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >> >> &break_count);
>> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>> >> >>
>> >> >>     for (i = 0; i < 1000; i++) {
>> >> >>         csoundPerformKsmps(csound);
>> >> >>     }
>> >> >>     CU_ASSERT(break_count == 1);
>> >> >>
>> >> >>     csoundDebuggerClean(csound);
>> >> >>     csoundDestroy(csound);
>> >> >>
>> >> >> Whenever the breakpoint is reached, the breakpoint callback is
>> >> >> called.
>> >> >>
>> >> >> Currently only instrument breakpoints are implemented (i.e. the
>> >> >> debugger
>> >> >> breaks when an instrument is active), but I also want to add line
>> >> >> breakpoints.
>> >> >>
>> >> >> Cheers,
>> >> >> Andrés
>> >> >>
>> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh <rorywalsh@ear.ie>
>> >> >> wrote:
>> >> >> >
>> >> >> > Wow, this looks super cool Andres. I'm just looking through the
>> >> >> > code
>> >> >> > now. Do you have a basic example of setting this up? The CUnit
>> >> >> > stuff
>> >> >> > in that debugger test code you posted is confusing me.
>> >> >> >
>> >> >> > On 10 April 2014 21:13, Andres Cabrera <mantaraya36@gmail.com>
>> >> >> > wrote:
>> >> >> > > Hi,
>> >> >> > >
>> >> >> > > The Csound debugger I'm working on is finally getting to a
>> >> >> > > useful
>> >> >> > > testing
>> >> >> > > stage.
>> >> >> > >
>> >> >> > > I've been doing the work in the csdebugger branch, if you have
>> >> >> > > time,
>> >> >> > > please
>> >> >> > > have a look.
>> >> >> > >
>> >> >> > > To build the debugger, you will need to add to cmake:
>> >> >> > > -DBUILD_DEBUGGER=1
>> >> >> > >
>> >> >> > > You will find some simple tests of the API here:
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >> >> > >
>> >> >> > > I have written a debugger front-end within CsoundQt, which you
>> >> >> > > are
>> >> >> > > welcome
>> >> >> > > to try out too:
>> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>> >> >> > >
>> >> >> > > Some internal details:
>> >> >> > > The debugger interface is found at:
>> >> >> > >
>> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >> >> > >
>> >> >> > > Although the debugger functions are part of the API, I think
>> >> >> > > it's
>> >> >> > > cleaner to
>> >> >> > > have them in their own header, as they are also a compile time
>> >> >> > > option.
>> >> >> > >
>> >> >> > > Because the changes are somewhat invasive, I chose to make the
>> >> >> > > kperf
>> >> >> > > function a pointer within the CSOUND struct that defaults to
>> >> >> > > nodebug.
>> >> >> > > When
>> >> >> > > the debugger is initialized the kperf function pointer is
>> >> >> > > switched
>> >> >> > > to
>> >> >> > > the
>> >> >> > > debug version, and switched back when the debugger is disabled
>> >> >> > > csoundDebuggerInit() and csoundDebuggerClean() functions.
>> >> >> > >
>> >> >> > > When a breakpoint is reached, a callback function that has been
>> >> >> > > registered
>> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound, breakpoint_cb_t
>> >> >> > > bkpt_cb,
>> >> >> > > void *userdata) is called.
>> >> >> > >
>> >> >> > > When a breakpoint is reached, after the callback is called, the
>> >> >> > > kperf
>> >> >> > > function continues running as usual, providing empty buffers to
>> >> >> > > the
>> >> >> > > audio
>> >> >> > > hardware, and not incrementing the time counters in musmon. When
>> >> >> > > a
>> >> >> > > continue
>> >> >> > > is reached, the graph traversing continues where it left off.
>> >> >> > >
>> >> >> > > There are probably still a few bugs, but it's now working on my
>> >> >> > > simple
>> >> >> > > tests.
>> >> >> > >
>> >> >> > > Any ideas, thoughts and suggestions are very welcome.
>> >> >> > >
>> >> >> > > Cheers,
>> >> >> > > Andrés
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >> > > ------------------------------------------------------------------------------
>> >> >> > > Put Bad Developers to Shame
>> >> >> > > Dominate Development with Jenkins Continuous Integration
>> >> >> > > Continuously Automate Build, Test & Deployment
>> >> >> > > Start a new project now. Try Jenkins in the cloud.
>> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>> >> >> > > _______________________________________________
>> >> >> > > Csound-devel mailing list
>> >> >> > > Csound-devel@lists.sourceforge.net
>> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >> > >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > ------------------------------------------------------------------------------
>> >> >> > Put Bad Developers to Shame
>> >> >> > Dominate Development with Jenkins Continuous Integration
>> >> >> > Continuously Automate Build, Test & Deployment
>> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >> > _______________________________________________
>> >> >> > Csound-devel mailing list
>> >> >> > Csound-devel@lists.sourceforge.net
>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > ------------------------------------------------------------------------------
>> >> > Put Bad Developers to Shame
>> >> > Dominate Development with Jenkins Continuous Integration
>> >> > Continuously Automate Build, Test & Deployment
>> >> > Start a new project now. Try Jenkins in the cloud.
>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> > _______________________________________________
>> >> > Csound-devel mailing list
>> >> > Csound-devel@lists.sourceforge.net
>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >
>> >>
>> >>
>> >>
>> >> ------------------------------------------------------------------------------
>> >> Put Bad Developers to Shame
>> >> Dominate Development with Jenkins Continuous Integration
>> >> Continuously Automate Build, Test & Deployment
>> >> Start a new project now. Try Jenkins in the cloud.
>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> _______________________________________________
>> >> Csound-devel mailing list
>> >> Csound-devel@lists.sourceforge.net
>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>> >
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Put Bad Developers to Shame
>> > Dominate Development with Jenkins Continuous Integration
>> > Continuously Automate Build, Test & Deployment
>> > Start a new project now. Try Jenkins in the cloud.
>> > http://p.sf.net/sfu/13600_Cloudbees
>> > _______________________________________________
>> > Csound-devel mailing list
>> > Csound-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-10 22:56
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  

That's great. Thanks.

On 10 Apr 2014 22:44, "Andres Cabrera" <mantaraya36@gmail.com> wrote:
Currently only instrument breakpoints are implemented...

Cheers,
Andrés


On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
Ok, that sounds good. To help get my head around this I might try to
write a simple command line app that passes a breakpoint line number
as a parameter, and then when it hits, it will print out the values of
each variable in that instrument. That would be a start.

On 10 April 2014 22:29, Andres Cabrera <mantaraya36@gmail.com> wrote:
> Not exactly.
>
> the function:
> csoundDebugGetInstrument(csound);
>
> Gives you a pointer to the currently active instrument (where the debugger
> interrupted execution). You can then get the information about the
> instrument instance (variables and time counters, p-fields, etc.) from it.
>
> The callback function is only called if a breakpoint is reached, which is
> checked inside csound's kperf function. There is a linked list of
> breakpoints (that is managed in a thread-safe way), which is traversed to
> check if the current instrument matches a breakpoint. For line breakpoints,
> what will need to happen is that for every opcode that is executed, it is
> checked whether it matches to a breakpoint line.
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>
>> So you grab the values for all the variables in a particular line each
>> time this callback function is hit? Am I reading that right?
>>
>> On 10 April 2014 22:10, Andres Cabrera <mantaraya36@gmail.com> wrote:
>> > Hi,
>> >
>> > My breakpoint callback looks like this:
>> >
>> > void CsoundEngine::breakpointCallback(CSOUND *csound, int line, double
>> > instr, void *udata)
>> > {
>> >     qDebug() <<"breakpointCallback " << line << instr;
>> >     INSDS *insds = csoundDebugGetInstrument(csound);
>> >     CsoundEngine *cs = (CsoundEngine *) udata;
>> >     // Copy variable list
>> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>> >     cs->variableMutex.lock();
>> >     cs->m_varList.clear();
>> >     while (vp) {
>> >         if (vp->varName[0] != '#') {
>> >             QVariantList varDetails;
>> >             varDetails << vp->varName;
>> >             if (strcmp(vp->varType->varTypeName, "i") == 0
>> >                     || strcmp(vp->varType->varTypeName, "k") == 0) {
>> >                 if (vp->memBlock) {
>> >                     varDetails << *((MYFLT *)vp->memBlock);
>> >                 } else {
>> >                     MYFLT *varmem = insds->lclbas + vp->memBlockIndex;
>> >                     varDetails << QVariant(*varmem);
>> >                 }
>> >             } else if(strcmp(vp->varType->varTypeName, "S") == 0) {
>> >                 if (vp->memBlock) {
>> >                     varDetails << *((char *)vp->memBlock);
>> >                 } else {
>> >                     char *varmem = (char *) (insds->lclbas +
>> > vp->memBlockIndex);
>> >                     varDetails << QVariant(varmem);
>> >                 }
>> >             } else if (strcmp(vp->varType->varTypeName, "a") == 0) {
>> >                 if (vp->memBlock) {
>> >                     varDetails << *((MYFLT *)vp->memBlock) << *((MYFLT
>> > *)vp->memBlock + 1)
>> >                                << *((MYFLT *)vp->memBlock + 2)<<
>> > *((MYFLT
>> > *)vp->memBlock + 3);
>> >                 } else {
>> >                     MYFLT *varmem = insds->lclbas + vp->memBlockIndex;
>> >                     varDetails << QVariant(*varmem);
>> >                 }
>> >             } else {
>> >                 varDetails << QVariant();
>> >             }
>> >             varDetails << vp->varType->varTypeName;
>> >             cs->m_varList << varDetails;
>> >         }
>> >         vp = vp->next;
>> >     }
>> >     cs->variableMutex.unlock();
>> >
>> >     //Copy active instrument list
>> >     cs->instrumentMutex.lock();
>> >     cs->m_instrumentList.clear();
>> >     INSDS *in = insds;
>> >     while (in->prvact) {
>> >         in = in->prvact;
>> >     }
>> >
>> >     while (in) {
>> >         QVariantList instance;
>> >         instance << in->p1;
>> >         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>> >         instance << in->kcounter;
>> >         cs->m_instrumentList << instance;
>> >         in = in->nxtact;
>> >     }
>> >
>> >     cs->instrumentMutex.unlock();
>> >     emit cs->breakpointReached();
>> > }
>> >
>> >
>> > And yes you can actually click the pause button and the debugger will
>> > stop
>> > and show you where it is, even if there is no breakpoint there.
>> >
>> > Cheers,
>> > Andrés
>> >
>> >
>> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >>
>> >> Thanks. And how would one query the value of a variable once the
>> >> breakpoint is hit? How does one access that information from the
>> >> Csound structure? Btw, your debugger interface in CsounsQT looks
>> >> really top-class. I could hope to implement anything as professional
>> >> as that, but I like the idea of being able to stop and query variables
>> >> on the fly. Is this possible, your screen-shot seems to indicate so?
>> >> This will be so useful in teaching!
>> >>
>> >>
>> >> On 10 April 2014 21:58, Andres Cabrera <mantaraya36@gmail.com> wrote:
>> >> > Also, since the breakpoint callback gets the CSOUND structure, it can
>> >> > get
>> >> > all of its information from there.
>> >> >
>> >> > Cheers,
>> >> > Andrés
>> >> >
>> >> >
>> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>> >> > <mantaraya36@gmail.com>
>> >> > wrote:
>> >> >>
>> >> >> Hi Rory,
>> >> >>
>> >> >> Essentially, your application could do something like:
>> >> >>
>> >> >>     int break_count = 0;
>> >> >>     CSOUND* csound = csoundCreate(NULL);
>> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1, p4\nendin\n");
>> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>> >> >>     csoundStart(csound);
>> >> >>     csoundDebuggerInit(csound);
>> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >> >> &break_count);
>> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>> >> >>
>> >> >>     for (i = 0; i < 1000; i++) {
>> >> >>         csoundPerformKsmps(csound);
>> >> >>     }
>> >> >>     CU_ASSERT(break_count == 1);
>> >> >>
>> >> >>     csoundDebuggerClean(csound);
>> >> >>     csoundDestroy(csound);
>> >> >>
>> >> >> Whenever the breakpoint is reached, the breakpoint callback is
>> >> >> called.
>> >> >>
>> >> >> Currently only instrument breakpoints are implemented (i.e. the
>> >> >> debugger
>> >> >> breaks when an instrument is active), but I also want to add line
>> >> >> breakpoints.
>> >> >>
>> >> >> Cheers,
>> >> >> Andrés
>> >> >>
>> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh <rorywalsh@ear.ie>
>> >> >> wrote:
>> >> >> >
>> >> >> > Wow, this looks super cool Andres. I'm just looking through the
>> >> >> > code
>> >> >> > now. Do you have a basic example of setting this up? The CUnit
>> >> >> > stuff
>> >> >> > in that debugger test code you posted is confusing me.
>> >> >> >
>> >> >> > On 10 April 2014 21:13, Andres Cabrera <mantaraya36@gmail.com>
>> >> >> > wrote:
>> >> >> > > Hi,
>> >> >> > >
>> >> >> > > The Csound debugger I'm working on is finally getting to a
>> >> >> > > useful
>> >> >> > > testing
>> >> >> > > stage.
>> >> >> > >
>> >> >> > > I've been doing the work in the csdebugger branch, if you have
>> >> >> > > time,
>> >> >> > > please
>> >> >> > > have a look.
>> >> >> > >
>> >> >> > > To build the debugger, you will need to add to cmake:
>> >> >> > > -DBUILD_DEBUGGER=1
>> >> >> > >
>> >> >> > > You will find some simple tests of the API here:
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >> >> > >
>> >> >> > > I have written a debugger front-end within CsoundQt, which you
>> >> >> > > are
>> >> >> > > welcome
>> >> >> > > to try out too:
>> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>> >> >> > >
>> >> >> > > Some internal details:
>> >> >> > > The debugger interface is found at:
>> >> >> > >
>> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >> >> > >
>> >> >> > > Although the debugger functions are part of the API, I think
>> >> >> > > it's
>> >> >> > > cleaner to
>> >> >> > > have them in their own header, as they are also a compile time
>> >> >> > > option.
>> >> >> > >
>> >> >> > > Because the changes are somewhat invasive, I chose to make the
>> >> >> > > kperf
>> >> >> > > function a pointer within the CSOUND struct that defaults to
>> >> >> > > nodebug.
>> >> >> > > When
>> >> >> > > the debugger is initialized the kperf function pointer is
>> >> >> > > switched
>> >> >> > > to
>> >> >> > > the
>> >> >> > > debug version, and switched back when the debugger is disabled
>> >> >> > > csoundDebuggerInit() and csoundDebuggerClean() functions.
>> >> >> > >
>> >> >> > > When a breakpoint is reached, a callback function that has been
>> >> >> > > registered
>> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound, breakpoint_cb_t
>> >> >> > > bkpt_cb,
>> >> >> > > void *userdata) is called.
>> >> >> > >
>> >> >> > > When a breakpoint is reached, after the callback is called, the
>> >> >> > > kperf
>> >> >> > > function continues running as usual, providing empty buffers to
>> >> >> > > the
>> >> >> > > audio
>> >> >> > > hardware, and not incrementing the time counters in musmon. When
>> >> >> > > a
>> >> >> > > continue
>> >> >> > > is reached, the graph traversing continues where it left off.
>> >> >> > >
>> >> >> > > There are probably still a few bugs, but it's now working on my
>> >> >> > > simple
>> >> >> > > tests.
>> >> >> > >
>> >> >> > > Any ideas, thoughts and suggestions are very welcome.
>> >> >> > >
>> >> >> > > Cheers,
>> >> >> > > Andrés
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >> > > ------------------------------------------------------------------------------
>> >> >> > > Put Bad Developers to Shame
>> >> >> > > Dominate Development with Jenkins Continuous Integration
>> >> >> > > Continuously Automate Build, Test & Deployment
>> >> >> > > Start a new project now. Try Jenkins in the cloud.
>> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>> >> >> > > _______________________________________________
>> >> >> > > Csound-devel mailing list
>> >> >> > > Csound-devel@lists.sourceforge.net
>> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >> > >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > ------------------------------------------------------------------------------
>> >> >> > Put Bad Developers to Shame
>> >> >> > Dominate Development with Jenkins Continuous Integration
>> >> >> > Continuously Automate Build, Test & Deployment
>> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >> > _______________________________________________
>> >> >> > Csound-devel mailing list
>> >> >> > Csound-devel@lists.sourceforge.net
>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > ------------------------------------------------------------------------------
>> >> > Put Bad Developers to Shame
>> >> > Dominate Development with Jenkins Continuous Integration
>> >> > Continuously Automate Build, Test & Deployment
>> >> > Start a new project now. Try Jenkins in the cloud.
>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> > _______________________________________________
>> >> > Csound-devel mailing list
>> >> > Csound-devel@lists.sourceforge.net
>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >
>> >>
>> >>
>> >>
>> >> ------------------------------------------------------------------------------
>> >> Put Bad Developers to Shame
>> >> Dominate Development with Jenkins Continuous Integration
>> >> Continuously Automate Build, Test & Deployment
>> >> Start a new project now. Try Jenkins in the cloud.
>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> _______________________________________________
>> >> Csound-devel mailing list
>> >> Csound-devel@lists.sourceforge.net
>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>> >
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Put Bad Developers to Shame
>> > Dominate Development with Jenkins Continuous Integration
>> > Continuously Automate Build, Test & Deployment
>> > Start a new project now. Try Jenkins in the cloud.
>> > http://p.sf.net/sfu/13600_Cloudbees
>> > _______________________________________________
>> > Csound-devel mailing list
>> > Csound-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-11 00:01
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
I'm using a csd file instead of compiling orcs and scores, is this
allowed? My breakpoint callback is never being hit. What am I missing?

void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata);

int main(int argc, char *argv[])
{
    int break_count = 0;
    CSOUND* csound = csoundCreate(NULL);
    csoundCompile(csound,argc,argv);
    csoundStart(csound);
    csoundDebuggerInit(csound);
    csoundSetBreakpointCallback(csound, brkpt_cb, (void *) &break_count);
    csoundSetInstrumentBreakpoint(csound, 1, 0);

    while (csoundPerformKsmps(csound)==0);

    csoundDebuggerClean(csound);
    csoundDestroy(csound);
}

//this never gets called.
void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata)
{
    int *count = (int *) userdata;
    printf("bkpt line %i instr %f\n", line, instr);
    *count = *count + 1;
};

On 10 April 2014 22:56, Rory Walsh  wrote:
> That's great. Thanks.
>
> On 10 Apr 2014 22:44, "Andres Cabrera"  wrote:
>>
>> Currently only instrument breakpoints are implemented...
>>
>> Cheers,
>> Andrés
>>
>>
>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh  wrote:
>>>
>>> Ok, that sounds good. To help get my head around this I might try to
>>> write a simple command line app that passes a breakpoint line number
>>> as a parameter, and then when it hits, it will print out the values of
>>> each variable in that instrument. That would be a start.
>>>
>>> On 10 April 2014 22:29, Andres Cabrera  wrote:
>>> > Not exactly.
>>> >
>>> > the function:
>>> > csoundDebugGetInstrument(csound);
>>> >
>>> > Gives you a pointer to the currently active instrument (where the
>>> > debugger
>>> > interrupted execution). You can then get the information about the
>>> > instrument instance (variables and time counters, p-fields, etc.) from
>>> > it.
>>> >
>>> > The callback function is only called if a breakpoint is reached, which
>>> > is
>>> > checked inside csound's kperf function. There is a linked list of
>>> > breakpoints (that is managed in a thread-safe way), which is traversed
>>> > to
>>> > check if the current instrument matches a breakpoint. For line
>>> > breakpoints,
>>> > what will need to happen is that for every opcode that is executed, it
>>> > is
>>> > checked whether it matches to a breakpoint line.
>>> >
>>> > Cheers,
>>> > Andrés
>>> >
>>> >
>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh  wrote:
>>> >>
>>> >> So you grab the values for all the variables in a particular line each
>>> >> time this callback function is hit? Am I reading that right?
>>> >>
>>> >> On 10 April 2014 22:10, Andres Cabrera  wrote:
>>> >> > Hi,
>>> >> >
>>> >> > My breakpoint callback looks like this:
>>> >> >
>>> >> > void CsoundEngine::breakpointCallback(CSOUND *csound, int line,
>>> >> > double
>>> >> > instr, void *udata)
>>> >> > {
>>> >> >     qDebug() <<"breakpointCallback " << line << instr;
>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>>> >> >     // Copy variable list
>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>>> >> >     cs->variableMutex.lock();
>>> >> >     cs->m_varList.clear();
>>> >> >     while (vp) {
>>> >> >         if (vp->varName[0] != '#') {
>>> >> >             QVariantList varDetails;
>>> >> >             varDetails << vp->varName;
>>> >> >             if (strcmp(vp->varType->varTypeName, "i") == 0
>>> >> >                     || strcmp(vp->varType->varTypeName, "k") == 0) {
>>> >> >                 if (vp->memBlock) {
>>> >> >                     varDetails << *((MYFLT *)vp->memBlock);
>>> >> >                 } else {
>>> >> >                     MYFLT *varmem = insds->lclbas +
>>> >> > vp->memBlockIndex;
>>> >> >                     varDetails << QVariant(*varmem);
>>> >> >                 }
>>> >> >             } else if(strcmp(vp->varType->varTypeName, "S") == 0) {
>>> >> >                 if (vp->memBlock) {
>>> >> >                     varDetails << *((char *)vp->memBlock);
>>> >> >                 } else {
>>> >> >                     char *varmem = (char *) (insds->lclbas +
>>> >> > vp->memBlockIndex);
>>> >> >                     varDetails << QVariant(varmem);
>>> >> >                 }
>>> >> >             } else if (strcmp(vp->varType->varTypeName, "a") == 0) {
>>> >> >                 if (vp->memBlock) {
>>> >> >                     varDetails << *((MYFLT *)vp->memBlock) <<
>>> >> > *((MYFLT
>>> >> > *)vp->memBlock + 1)
>>> >> >                                << *((MYFLT *)vp->memBlock + 2)<<
>>> >> > *((MYFLT
>>> >> > *)vp->memBlock + 3);
>>> >> >                 } else {
>>> >> >                     MYFLT *varmem = insds->lclbas +
>>> >> > vp->memBlockIndex;
>>> >> >                     varDetails << QVariant(*varmem);
>>> >> >                 }
>>> >> >             } else {
>>> >> >                 varDetails << QVariant();
>>> >> >             }
>>> >> >             varDetails << vp->varType->varTypeName;
>>> >> >             cs->m_varList << varDetails;
>>> >> >         }
>>> >> >         vp = vp->next;
>>> >> >     }
>>> >> >     cs->variableMutex.unlock();
>>> >> >
>>> >> >     //Copy active instrument list
>>> >> >     cs->instrumentMutex.lock();
>>> >> >     cs->m_instrumentList.clear();
>>> >> >     INSDS *in = insds;
>>> >> >     while (in->prvact) {
>>> >> >         in = in->prvact;
>>> >> >     }
>>> >> >
>>> >> >     while (in) {
>>> >> >         QVariantList instance;
>>> >> >         instance << in->p1;
>>> >> >         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>>> >> >         instance << in->kcounter;
>>> >> >         cs->m_instrumentList << instance;
>>> >> >         in = in->nxtact;
>>> >> >     }
>>> >> >
>>> >> >     cs->instrumentMutex.unlock();
>>> >> >     emit cs->breakpointReached();
>>> >> > }
>>> >> >
>>> >> >
>>> >> > And yes you can actually click the pause button and the debugger
>>> >> > will
>>> >> > stop
>>> >> > and show you where it is, even if there is no breakpoint there.
>>> >> >
>>> >> > Cheers,
>>> >> > Andrés
>>> >> >
>>> >> >
>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh 
>>> >> > wrote:
>>> >> >>
>>> >> >> Thanks. And how would one query the value of a variable once the
>>> >> >> breakpoint is hit? How does one access that information from the
>>> >> >> Csound structure? Btw, your debugger interface in CsounsQT looks
>>> >> >> really top-class. I could hope to implement anything as
>>> >> >> professional
>>> >> >> as that, but I like the idea of being able to stop and query
>>> >> >> variables
>>> >> >> on the fly. Is this possible, your screen-shot seems to indicate
>>> >> >> so?
>>> >> >> This will be so useful in teaching!
>>> >> >>
>>> >> >>
>>> >> >> On 10 April 2014 21:58, Andres Cabrera 
>>> >> >> wrote:
>>> >> >> > Also, since the breakpoint callback gets the CSOUND structure, it
>>> >> >> > can
>>> >> >> > get
>>> >> >> > all of its information from there.
>>> >> >> >
>>> >> >> > Cheers,
>>> >> >> > Andrés
>>> >> >> >
>>> >> >> >
>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>>> >> >> > 
>>> >> >> > wrote:
>>> >> >> >>
>>> >> >> >> Hi Rory,
>>> >> >> >>
>>> >> >> >> Essentially, your application could do something like:
>>> >> >> >>
>>> >> >> >>     int break_count = 0;
>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1,
>>> >> >> >> p4\nendin\n");
>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>>> >> >> >>     csoundStart(csound);
>>> >> >> >>     csoundDebuggerInit(csound);
>>> >> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>>> >> >> >> &break_count);
>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>>> >> >> >>
>>> >> >> >>     for (i = 0; i < 1000; i++) {
>>> >> >> >>         csoundPerformKsmps(csound);
>>> >> >> >>     }
>>> >> >> >>     CU_ASSERT(break_count == 1);
>>> >> >> >>
>>> >> >> >>     csoundDebuggerClean(csound);
>>> >> >> >>     csoundDestroy(csound);
>>> >> >> >>
>>> >> >> >> Whenever the breakpoint is reached, the breakpoint callback is
>>> >> >> >> called.
>>> >> >> >>
>>> >> >> >> Currently only instrument breakpoints are implemented (i.e. the
>>> >> >> >> debugger
>>> >> >> >> breaks when an instrument is active), but I also want to add
>>> >> >> >> line
>>> >> >> >> breakpoints.
>>> >> >> >>
>>> >> >> >> Cheers,
>>> >> >> >> Andrés
>>> >> >> >>
>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh 
>>> >> >> >> wrote:
>>> >> >> >> >
>>> >> >> >> > Wow, this looks super cool Andres. I'm just looking through
>>> >> >> >> > the
>>> >> >> >> > code
>>> >> >> >> > now. Do you have a basic example of setting this up? The CUnit
>>> >> >> >> > stuff
>>> >> >> >> > in that debugger test code you posted is confusing me.
>>> >> >> >> >
>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera 
>>> >> >> >> > wrote:
>>> >> >> >> > > Hi,
>>> >> >> >> > >
>>> >> >> >> > > The Csound debugger I'm working on is finally getting to a
>>> >> >> >> > > useful
>>> >> >> >> > > testing
>>> >> >> >> > > stage.
>>> >> >> >> > >
>>> >> >> >> > > I've been doing the work in the csdebugger branch, if you
>>> >> >> >> > > have
>>> >> >> >> > > time,
>>> >> >> >> > > please
>>> >> >> >> > > have a look.
>>> >> >> >> > >
>>> >> >> >> > > To build the debugger, you will need to add to cmake:
>>> >> >> >> > > -DBUILD_DEBUGGER=1
>>> >> >> >> > >
>>> >> >> >> > > You will find some simple tests of the API here:
>>> >> >> >> > >
>>> >> >> >> > >
>>> >> >> >> > >
>>> >> >> >> > >
>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>> >> >> >> > >
>>> >> >> >> > > I have written a debugger front-end within CsoundQt, which
>>> >> >> >> > > you
>>> >> >> >> > > are
>>> >> >> >> > > welcome
>>> >> >> >> > > to try out too:
>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>>> >> >> >> > >
>>> >> >> >> > > Some internal details:
>>> >> >> >> > > The debugger interface is found at:
>>> >> >> >> > >
>>> >> >> >> > >
>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>> >> >> >> > >
>>> >> >> >> > > Although the debugger functions are part of the API, I think
>>> >> >> >> > > it's
>>> >> >> >> > > cleaner to
>>> >> >> >> > > have them in their own header, as they are also a compile
>>> >> >> >> > > time
>>> >> >> >> > > option.
>>> >> >> >> > >
>>> >> >> >> > > Because the changes are somewhat invasive, I chose to make
>>> >> >> >> > > the
>>> >> >> >> > > kperf
>>> >> >> >> > > function a pointer within the CSOUND struct that defaults to
>>> >> >> >> > > nodebug.
>>> >> >> >> > > When
>>> >> >> >> > > the debugger is initialized the kperf function pointer is
>>> >> >> >> > > switched
>>> >> >> >> > > to
>>> >> >> >> > > the
>>> >> >> >> > > debug version, and switched back when the debugger is
>>> >> >> >> > > disabled
>>> >> >> >> > > csoundDebuggerInit() and csoundDebuggerClean() functions.
>>> >> >> >> > >
>>> >> >> >> > > When a breakpoint is reached, a callback function that has
>>> >> >> >> > > been
>>> >> >> >> > > registered
>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound,
>>> >> >> >> > > breakpoint_cb_t
>>> >> >> >> > > bkpt_cb,
>>> >> >> >> > > void *userdata) is called.
>>> >> >> >> > >
>>> >> >> >> > > When a breakpoint is reached, after the callback is called,
>>> >> >> >> > > the
>>> >> >> >> > > kperf
>>> >> >> >> > > function continues running as usual, providing empty buffers
>>> >> >> >> > > to
>>> >> >> >> > > the
>>> >> >> >> > > audio
>>> >> >> >> > > hardware, and not incrementing the time counters in musmon.
>>> >> >> >> > > When
>>> >> >> >> > > a
>>> >> >> >> > > continue
>>> >> >> >> > > is reached, the graph traversing continues where it left
>>> >> >> >> > > off.
>>> >> >> >> > >
>>> >> >> >> > > There are probably still a few bugs, but it's now working on
>>> >> >> >> > > my
>>> >> >> >> > > simple
>>> >> >> >> > > tests.
>>> >> >> >> > >
>>> >> >> >> > > Any ideas, thoughts and suggestions are very welcome.
>>> >> >> >> > >
>>> >> >> >> > > Cheers,
>>> >> >> >> > > Andrés
>>> >> >> >> > >
>>> >> >> >> > >
>>> >> >> >> > >
>>> >> >> >> > >
>>> >> >> >> > >
>>> >> >> >> > > ------------------------------------------------------------------------------
>>> >> >> >> > > Put Bad Developers to Shame
>>> >> >> >> > > Dominate Development with Jenkins Continuous Integration
>>> >> >> >> > > Continuously Automate Build, Test & Deployment
>>> >> >> >> > > Start a new project now. Try Jenkins in the cloud.
>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>>> >> >> >> > > _______________________________________________
>>> >> >> >> > > Csound-devel mailing list
>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >> >> >> > >
>>> >> >> >> >
>>> >> >> >> >
>>> >> >> >> >
>>> >> >> >> >
>>> >> >> >> >
>>> >> >> >> > ------------------------------------------------------------------------------
>>> >> >> >> > Put Bad Developers to Shame
>>> >> >> >> > Dominate Development with Jenkins Continuous Integration
>>> >> >> >> > Continuously Automate Build, Test & Deployment
>>> >> >> >> > Start a new project now. Try Jenkins in the cloud.
>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>> >> >> >> > _______________________________________________
>>> >> >> >> > Csound-devel mailing list
>>> >> >> >> > Csound-devel@lists.sourceforge.net
>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >> >> >>
>>> >> >> >
>>> >> >> >
>>> >> >> >
>>> >> >> >
>>> >> >> >
>>> >> >> > ------------------------------------------------------------------------------
>>> >> >> > Put Bad Developers to Shame
>>> >> >> > Dominate Development with Jenkins Continuous Integration
>>> >> >> > Continuously Automate Build, Test & Deployment
>>> >> >> > Start a new project now. Try Jenkins in the cloud.
>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>> >> >> > _______________________________________________
>>> >> >> > Csound-devel mailing list
>>> >> >> > Csound-devel@lists.sourceforge.net
>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >> >> >
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> ------------------------------------------------------------------------------
>>> >> >> Put Bad Developers to Shame
>>> >> >> Dominate Development with Jenkins Continuous Integration
>>> >> >> Continuously Automate Build, Test & Deployment
>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>> >> >> _______________________________________________
>>> >> >> Csound-devel mailing list
>>> >> >> Csound-devel@lists.sourceforge.net
>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >> >
>>> >> >
>>> >> >
>>> >> >
>>> >> >
>>> >> > ------------------------------------------------------------------------------
>>> >> > Put Bad Developers to Shame
>>> >> > Dominate Development with Jenkins Continuous Integration
>>> >> > Continuously Automate Build, Test & Deployment
>>> >> > Start a new project now. Try Jenkins in the cloud.
>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>> >> > _______________________________________________
>>> >> > Csound-devel mailing list
>>> >> > Csound-devel@lists.sourceforge.net
>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >> >
>>> >>
>>> >>
>>> >>
>>> >> ------------------------------------------------------------------------------
>>> >> Put Bad Developers to Shame
>>> >> Dominate Development with Jenkins Continuous Integration
>>> >> Continuously Automate Build, Test & Deployment
>>> >> Start a new project now. Try Jenkins in the cloud.
>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>> >> _______________________________________________
>>> >> Csound-devel mailing list
>>> >> Csound-devel@lists.sourceforge.net
>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >
>>> >
>>> >
>>> >
>>> > ------------------------------------------------------------------------------
>>> > Put Bad Developers to Shame
>>> > Dominate Development with Jenkins Continuous Integration
>>> > Continuously Automate Build, Test & Deployment
>>> > Start a new project now. Try Jenkins in the cloud.
>>> > http://p.sf.net/sfu/13600_Cloudbees
>>> > _______________________________________________
>>> > Csound-devel mailing list
>>> > Csound-devel@lists.sourceforge.net
>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-11 00:02
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
It would help if I built with the debugger enabled :)

On 11 April 2014 00:01, Rory Walsh  wrote:
> I'm using a csd file instead of compiling orcs and scores, is this
> allowed? My breakpoint callback is never being hit. What am I missing?
>
> void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata);
>
> int main(int argc, char *argv[])
> {
>     int break_count = 0;
>     CSOUND* csound = csoundCreate(NULL);
>     csoundCompile(csound,argc,argv);
>     csoundStart(csound);
>     csoundDebuggerInit(csound);
>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *) &break_count);
>     csoundSetInstrumentBreakpoint(csound, 1, 0);
>
>     while (csoundPerformKsmps(csound)==0);
>
>     csoundDebuggerClean(csound);
>     csoundDestroy(csound);
> }
>
> //this never gets called.
> void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata)
> {
>     int *count = (int *) userdata;
>     printf("bkpt line %i instr %f\n", line, instr);
>     *count = *count + 1;
> };
>
> On 10 April 2014 22:56, Rory Walsh  wrote:
>> That's great. Thanks.
>>
>> On 10 Apr 2014 22:44, "Andres Cabrera"  wrote:
>>>
>>> Currently only instrument breakpoints are implemented...
>>>
>>> Cheers,
>>> Andrés
>>>
>>>
>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh  wrote:
>>>>
>>>> Ok, that sounds good. To help get my head around this I might try to
>>>> write a simple command line app that passes a breakpoint line number
>>>> as a parameter, and then when it hits, it will print out the values of
>>>> each variable in that instrument. That would be a start.
>>>>
>>>> On 10 April 2014 22:29, Andres Cabrera  wrote:
>>>> > Not exactly.
>>>> >
>>>> > the function:
>>>> > csoundDebugGetInstrument(csound);
>>>> >
>>>> > Gives you a pointer to the currently active instrument (where the
>>>> > debugger
>>>> > interrupted execution). You can then get the information about the
>>>> > instrument instance (variables and time counters, p-fields, etc.) from
>>>> > it.
>>>> >
>>>> > The callback function is only called if a breakpoint is reached, which
>>>> > is
>>>> > checked inside csound's kperf function. There is a linked list of
>>>> > breakpoints (that is managed in a thread-safe way), which is traversed
>>>> > to
>>>> > check if the current instrument matches a breakpoint. For line
>>>> > breakpoints,
>>>> > what will need to happen is that for every opcode that is executed, it
>>>> > is
>>>> > checked whether it matches to a breakpoint line.
>>>> >
>>>> > Cheers,
>>>> > Andrés
>>>> >
>>>> >
>>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh  wrote:
>>>> >>
>>>> >> So you grab the values for all the variables in a particular line each
>>>> >> time this callback function is hit? Am I reading that right?
>>>> >>
>>>> >> On 10 April 2014 22:10, Andres Cabrera  wrote:
>>>> >> > Hi,
>>>> >> >
>>>> >> > My breakpoint callback looks like this:
>>>> >> >
>>>> >> > void CsoundEngine::breakpointCallback(CSOUND *csound, int line,
>>>> >> > double
>>>> >> > instr, void *udata)
>>>> >> > {
>>>> >> >     qDebug() <<"breakpointCallback " << line << instr;
>>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>>>> >> >     // Copy variable list
>>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>>>> >> >     cs->variableMutex.lock();
>>>> >> >     cs->m_varList.clear();
>>>> >> >     while (vp) {
>>>> >> >         if (vp->varName[0] != '#') {
>>>> >> >             QVariantList varDetails;
>>>> >> >             varDetails << vp->varName;
>>>> >> >             if (strcmp(vp->varType->varTypeName, "i") == 0
>>>> >> >                     || strcmp(vp->varType->varTypeName, "k") == 0) {
>>>> >> >                 if (vp->memBlock) {
>>>> >> >                     varDetails << *((MYFLT *)vp->memBlock);
>>>> >> >                 } else {
>>>> >> >                     MYFLT *varmem = insds->lclbas +
>>>> >> > vp->memBlockIndex;
>>>> >> >                     varDetails << QVariant(*varmem);
>>>> >> >                 }
>>>> >> >             } else if(strcmp(vp->varType->varTypeName, "S") == 0) {
>>>> >> >                 if (vp->memBlock) {
>>>> >> >                     varDetails << *((char *)vp->memBlock);
>>>> >> >                 } else {
>>>> >> >                     char *varmem = (char *) (insds->lclbas +
>>>> >> > vp->memBlockIndex);
>>>> >> >                     varDetails << QVariant(varmem);
>>>> >> >                 }
>>>> >> >             } else if (strcmp(vp->varType->varTypeName, "a") == 0) {
>>>> >> >                 if (vp->memBlock) {
>>>> >> >                     varDetails << *((MYFLT *)vp->memBlock) <<
>>>> >> > *((MYFLT
>>>> >> > *)vp->memBlock + 1)
>>>> >> >                                << *((MYFLT *)vp->memBlock + 2)<<
>>>> >> > *((MYFLT
>>>> >> > *)vp->memBlock + 3);
>>>> >> >                 } else {
>>>> >> >                     MYFLT *varmem = insds->lclbas +
>>>> >> > vp->memBlockIndex;
>>>> >> >                     varDetails << QVariant(*varmem);
>>>> >> >                 }
>>>> >> >             } else {
>>>> >> >                 varDetails << QVariant();
>>>> >> >             }
>>>> >> >             varDetails << vp->varType->varTypeName;
>>>> >> >             cs->m_varList << varDetails;
>>>> >> >         }
>>>> >> >         vp = vp->next;
>>>> >> >     }
>>>> >> >     cs->variableMutex.unlock();
>>>> >> >
>>>> >> >     //Copy active instrument list
>>>> >> >     cs->instrumentMutex.lock();
>>>> >> >     cs->m_instrumentList.clear();
>>>> >> >     INSDS *in = insds;
>>>> >> >     while (in->prvact) {
>>>> >> >         in = in->prvact;
>>>> >> >     }
>>>> >> >
>>>> >> >     while (in) {
>>>> >> >         QVariantList instance;
>>>> >> >         instance << in->p1;
>>>> >> >         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>>>> >> >         instance << in->kcounter;
>>>> >> >         cs->m_instrumentList << instance;
>>>> >> >         in = in->nxtact;
>>>> >> >     }
>>>> >> >
>>>> >> >     cs->instrumentMutex.unlock();
>>>> >> >     emit cs->breakpointReached();
>>>> >> > }
>>>> >> >
>>>> >> >
>>>> >> > And yes you can actually click the pause button and the debugger
>>>> >> > will
>>>> >> > stop
>>>> >> > and show you where it is, even if there is no breakpoint there.
>>>> >> >
>>>> >> > Cheers,
>>>> >> > Andrés
>>>> >> >
>>>> >> >
>>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh 
>>>> >> > wrote:
>>>> >> >>
>>>> >> >> Thanks. And how would one query the value of a variable once the
>>>> >> >> breakpoint is hit? How does one access that information from the
>>>> >> >> Csound structure? Btw, your debugger interface in CsounsQT looks
>>>> >> >> really top-class. I could hope to implement anything as
>>>> >> >> professional
>>>> >> >> as that, but I like the idea of being able to stop and query
>>>> >> >> variables
>>>> >> >> on the fly. Is this possible, your screen-shot seems to indicate
>>>> >> >> so?
>>>> >> >> This will be so useful in teaching!
>>>> >> >>
>>>> >> >>
>>>> >> >> On 10 April 2014 21:58, Andres Cabrera 
>>>> >> >> wrote:
>>>> >> >> > Also, since the breakpoint callback gets the CSOUND structure, it
>>>> >> >> > can
>>>> >> >> > get
>>>> >> >> > all of its information from there.
>>>> >> >> >
>>>> >> >> > Cheers,
>>>> >> >> > Andrés
>>>> >> >> >
>>>> >> >> >
>>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>>>> >> >> > 
>>>> >> >> > wrote:
>>>> >> >> >>
>>>> >> >> >> Hi Rory,
>>>> >> >> >>
>>>> >> >> >> Essentially, your application could do something like:
>>>> >> >> >>
>>>> >> >> >>     int break_count = 0;
>>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1,
>>>> >> >> >> p4\nendin\n");
>>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>>>> >> >> >>     csoundStart(csound);
>>>> >> >> >>     csoundDebuggerInit(csound);
>>>> >> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>>>> >> >> >> &break_count);
>>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>>>> >> >> >>
>>>> >> >> >>     for (i = 0; i < 1000; i++) {
>>>> >> >> >>         csoundPerformKsmps(csound);
>>>> >> >> >>     }
>>>> >> >> >>     CU_ASSERT(break_count == 1);
>>>> >> >> >>
>>>> >> >> >>     csoundDebuggerClean(csound);
>>>> >> >> >>     csoundDestroy(csound);
>>>> >> >> >>
>>>> >> >> >> Whenever the breakpoint is reached, the breakpoint callback is
>>>> >> >> >> called.
>>>> >> >> >>
>>>> >> >> >> Currently only instrument breakpoints are implemented (i.e. the
>>>> >> >> >> debugger
>>>> >> >> >> breaks when an instrument is active), but I also want to add
>>>> >> >> >> line
>>>> >> >> >> breakpoints.
>>>> >> >> >>
>>>> >> >> >> Cheers,
>>>> >> >> >> Andrés
>>>> >> >> >>
>>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh 
>>>> >> >> >> wrote:
>>>> >> >> >> >
>>>> >> >> >> > Wow, this looks super cool Andres. I'm just looking through
>>>> >> >> >> > the
>>>> >> >> >> > code
>>>> >> >> >> > now. Do you have a basic example of setting this up? The CUnit
>>>> >> >> >> > stuff
>>>> >> >> >> > in that debugger test code you posted is confusing me.
>>>> >> >> >> >
>>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera 
>>>> >> >> >> > wrote:
>>>> >> >> >> > > Hi,
>>>> >> >> >> > >
>>>> >> >> >> > > The Csound debugger I'm working on is finally getting to a
>>>> >> >> >> > > useful
>>>> >> >> >> > > testing
>>>> >> >> >> > > stage.
>>>> >> >> >> > >
>>>> >> >> >> > > I've been doing the work in the csdebugger branch, if you
>>>> >> >> >> > > have
>>>> >> >> >> > > time,
>>>> >> >> >> > > please
>>>> >> >> >> > > have a look.
>>>> >> >> >> > >
>>>> >> >> >> > > To build the debugger, you will need to add to cmake:
>>>> >> >> >> > > -DBUILD_DEBUGGER=1
>>>> >> >> >> > >
>>>> >> >> >> > > You will find some simple tests of the API here:
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>>> >> >> >> > >
>>>> >> >> >> > > I have written a debugger front-end within CsoundQt, which
>>>> >> >> >> > > you
>>>> >> >> >> > > are
>>>> >> >> >> > > welcome
>>>> >> >> >> > > to try out too:
>>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>>>> >> >> >> > >
>>>> >> >> >> > > Some internal details:
>>>> >> >> >> > > The debugger interface is found at:
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>>> >> >> >> > >
>>>> >> >> >> > > Although the debugger functions are part of the API, I think
>>>> >> >> >> > > it's
>>>> >> >> >> > > cleaner to
>>>> >> >> >> > > have them in their own header, as they are also a compile
>>>> >> >> >> > > time
>>>> >> >> >> > > option.
>>>> >> >> >> > >
>>>> >> >> >> > > Because the changes are somewhat invasive, I chose to make
>>>> >> >> >> > > the
>>>> >> >> >> > > kperf
>>>> >> >> >> > > function a pointer within the CSOUND struct that defaults to
>>>> >> >> >> > > nodebug.
>>>> >> >> >> > > When
>>>> >> >> >> > > the debugger is initialized the kperf function pointer is
>>>> >> >> >> > > switched
>>>> >> >> >> > > to
>>>> >> >> >> > > the
>>>> >> >> >> > > debug version, and switched back when the debugger is
>>>> >> >> >> > > disabled
>>>> >> >> >> > > csoundDebuggerInit() and csoundDebuggerClean() functions.
>>>> >> >> >> > >
>>>> >> >> >> > > When a breakpoint is reached, a callback function that has
>>>> >> >> >> > > been
>>>> >> >> >> > > registered
>>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound,
>>>> >> >> >> > > breakpoint_cb_t
>>>> >> >> >> > > bkpt_cb,
>>>> >> >> >> > > void *userdata) is called.
>>>> >> >> >> > >
>>>> >> >> >> > > When a breakpoint is reached, after the callback is called,
>>>> >> >> >> > > the
>>>> >> >> >> > > kperf
>>>> >> >> >> > > function continues running as usual, providing empty buffers
>>>> >> >> >> > > to
>>>> >> >> >> > > the
>>>> >> >> >> > > audio
>>>> >> >> >> > > hardware, and not incrementing the time counters in musmon.
>>>> >> >> >> > > When
>>>> >> >> >> > > a
>>>> >> >> >> > > continue
>>>> >> >> >> > > is reached, the graph traversing continues where it left
>>>> >> >> >> > > off.
>>>> >> >> >> > >
>>>> >> >> >> > > There are probably still a few bugs, but it's now working on
>>>> >> >> >> > > my
>>>> >> >> >> > > simple
>>>> >> >> >> > > tests.
>>>> >> >> >> > >
>>>> >> >> >> > > Any ideas, thoughts and suggestions are very welcome.
>>>> >> >> >> > >
>>>> >> >> >> > > Cheers,
>>>> >> >> >> > > Andrés
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > > ------------------------------------------------------------------------------
>>>> >> >> >> > > Put Bad Developers to Shame
>>>> >> >> >> > > Dominate Development with Jenkins Continuous Integration
>>>> >> >> >> > > Continuously Automate Build, Test & Deployment
>>>> >> >> >> > > Start a new project now. Try Jenkins in the cloud.
>>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >> > > _______________________________________________
>>>> >> >> >> > > Csound-devel mailing list
>>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >> > >
>>>> >> >> >> >
>>>> >> >> >> >
>>>> >> >> >> >
>>>> >> >> >> >
>>>> >> >> >> >
>>>> >> >> >> > ------------------------------------------------------------------------------
>>>> >> >> >> > Put Bad Developers to Shame
>>>> >> >> >> > Dominate Development with Jenkins Continuous Integration
>>>> >> >> >> > Continuously Automate Build, Test & Deployment
>>>> >> >> >> > Start a new project now. Try Jenkins in the cloud.
>>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >> > _______________________________________________
>>>> >> >> >> > Csound-devel mailing list
>>>> >> >> >> > Csound-devel@lists.sourceforge.net
>>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >>
>>>> >> >> >
>>>> >> >> >
>>>> >> >> >
>>>> >> >> >
>>>> >> >> >
>>>> >> >> > ------------------------------------------------------------------------------
>>>> >> >> > Put Bad Developers to Shame
>>>> >> >> > Dominate Development with Jenkins Continuous Integration
>>>> >> >> > Continuously Automate Build, Test & Deployment
>>>> >> >> > Start a new project now. Try Jenkins in the cloud.
>>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> > _______________________________________________
>>>> >> >> > Csound-devel mailing list
>>>> >> >> > Csound-devel@lists.sourceforge.net
>>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >
>>>> >> >>
>>>> >> >>
>>>> >> >>
>>>> >> >>
>>>> >> >> ------------------------------------------------------------------------------
>>>> >> >> Put Bad Developers to Shame
>>>> >> >> Dominate Development with Jenkins Continuous Integration
>>>> >> >> Continuously Automate Build, Test & Deployment
>>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> _______________________________________________
>>>> >> >> Csound-devel mailing list
>>>> >> >> Csound-devel@lists.sourceforge.net
>>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> > ------------------------------------------------------------------------------
>>>> >> > Put Bad Developers to Shame
>>>> >> > Dominate Development with Jenkins Continuous Integration
>>>> >> > Continuously Automate Build, Test & Deployment
>>>> >> > Start a new project now. Try Jenkins in the cloud.
>>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> > _______________________________________________
>>>> >> > Csound-devel mailing list
>>>> >> > Csound-devel@lists.sourceforge.net
>>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >
>>>> >>
>>>> >>
>>>> >>
>>>> >> ------------------------------------------------------------------------------
>>>> >> Put Bad Developers to Shame
>>>> >> Dominate Development with Jenkins Continuous Integration
>>>> >> Continuously Automate Build, Test & Deployment
>>>> >> Start a new project now. Try Jenkins in the cloud.
>>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>>> >> _______________________________________________
>>>> >> Csound-devel mailing list
>>>> >> Csound-devel@lists.sourceforge.net
>>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > ------------------------------------------------------------------------------
>>>> > Put Bad Developers to Shame
>>>> > Dominate Development with Jenkins Continuous Integration
>>>> > Continuously Automate Build, Test & Deployment
>>>> > Start a new project now. Try Jenkins in the cloud.
>>>> > http://p.sf.net/sfu/13600_Cloudbees
>>>> > _______________________________________________
>>>> > Csound-devel mailing list
>>>> > Csound-devel@lists.sourceforge.net
>>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Put Bad Developers to Shame
>>>> Dominate Development with Jenkins Continuous Integration
>>>> Continuously Automate Build, Test & Deployment
>>>> Start a new project now. Try Jenkins in the cloud.
>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> _______________________________________________
>>>> Csound-devel mailing list
>>>> Csound-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-11 00:06
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
Yes it would :)

Cheers,
Andrés


On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
It would help if I built with the debugger enabled :)

On 11 April 2014 00:01, Rory Walsh <rorywalsh@ear.ie> wrote:
> I'm using a csd file instead of compiling orcs and scores, is this
> allowed? My breakpoint callback is never being hit. What am I missing?
>
> void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata);
>
> int main(int argc, char *argv[])
> {
>     int break_count = 0;
>     CSOUND* csound = csoundCreate(NULL);
>     csoundCompile(csound,argc,argv);
>     csoundStart(csound);
>     csoundDebuggerInit(csound);
>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *) &break_count);
>     csoundSetInstrumentBreakpoint(csound, 1, 0);
>
>     while (csoundPerformKsmps(csound)==0);
>
>     csoundDebuggerClean(csound);
>     csoundDestroy(csound);
> }
>
> //this never gets called.
> void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata)
> {
>     int *count = (int *) userdata;
>     printf("bkpt line %i instr %f\n", line, instr);
>     *count = *count + 1;
> };
>
> On 10 April 2014 22:56, Rory Walsh <rorywalsh@ear.ie> wrote:
>> That's great. Thanks.
>>
>> On 10 Apr 2014 22:44, "Andres Cabrera" <mantaraya36@gmail.com> wrote:
>>>
>>> Currently only instrument breakpoints are implemented...
>>>
>>> Cheers,
>>> Andrés
>>>
>>>
>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>
>>>> Ok, that sounds good. To help get my head around this I might try to
>>>> write a simple command line app that passes a breakpoint line number
>>>> as a parameter, and then when it hits, it will print out the values of
>>>> each variable in that instrument. That would be a start.
>>>>
>>>> On 10 April 2014 22:29, Andres Cabrera <mantaraya36@gmail.com> wrote:
>>>> > Not exactly.
>>>> >
>>>> > the function:
>>>> > csoundDebugGetInstrument(csound);
>>>> >
>>>> > Gives you a pointer to the currently active instrument (where the
>>>> > debugger
>>>> > interrupted execution). You can then get the information about the
>>>> > instrument instance (variables and time counters, p-fields, etc.) from
>>>> > it.
>>>> >
>>>> > The callback function is only called if a breakpoint is reached, which
>>>> > is
>>>> > checked inside csound's kperf function. There is a linked list of
>>>> > breakpoints (that is managed in a thread-safe way), which is traversed
>>>> > to
>>>> > check if the current instrument matches a breakpoint. For line
>>>> > breakpoints,
>>>> > what will need to happen is that for every opcode that is executed, it
>>>> > is
>>>> > checked whether it matches to a breakpoint line.
>>>> >
>>>> > Cheers,
>>>> > Andrés
>>>> >
>>>> >
>>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >>
>>>> >> So you grab the values for all the variables in a particular line each
>>>> >> time this callback function is hit? Am I reading that right?
>>>> >>
>>>> >> On 10 April 2014 22:10, Andres Cabrera <mantaraya36@gmail.com> wrote:
>>>> >> > Hi,
>>>> >> >
>>>> >> > My breakpoint callback looks like this:
>>>> >> >
>>>> >> > void CsoundEngine::breakpointCallback(CSOUND *csound, int line,
>>>> >> > double
>>>> >> > instr, void *udata)
>>>> >> > {
>>>> >> >     qDebug() <<"breakpointCallback " << line << instr;
>>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>>>> >> >     // Copy variable list
>>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>>>> >> >     cs->variableMutex.lock();
>>>> >> >     cs->m_varList.clear();
>>>> >> >     while (vp) {
>>>> >> >         if (vp->varName[0] != '#') {
>>>> >> >             QVariantList varDetails;
>>>> >> >             varDetails << vp->varName;
>>>> >> >             if (strcmp(vp->varType->varTypeName, "i") == 0
>>>> >> >                     || strcmp(vp->varType->varTypeName, "k") == 0) {
>>>> >> >                 if (vp->memBlock) {
>>>> >> >                     varDetails << *((MYFLT *)vp->memBlock);
>>>> >> >                 } else {
>>>> >> >                     MYFLT *varmem = insds->lclbas +
>>>> >> > vp->memBlockIndex;
>>>> >> >                     varDetails << QVariant(*varmem);
>>>> >> >                 }
>>>> >> >             } else if(strcmp(vp->varType->varTypeName, "S") == 0) {
>>>> >> >                 if (vp->memBlock) {
>>>> >> >                     varDetails << *((char *)vp->memBlock);
>>>> >> >                 } else {
>>>> >> >                     char *varmem = (char *) (insds->lclbas +
>>>> >> > vp->memBlockIndex);
>>>> >> >                     varDetails << QVariant(varmem);
>>>> >> >                 }
>>>> >> >             } else if (strcmp(vp->varType->varTypeName, "a") == 0) {
>>>> >> >                 if (vp->memBlock) {
>>>> >> >                     varDetails << *((MYFLT *)vp->memBlock) <<
>>>> >> > *((MYFLT
>>>> >> > *)vp->memBlock + 1)
>>>> >> >                                << *((MYFLT *)vp->memBlock + 2)<<
>>>> >> > *((MYFLT
>>>> >> > *)vp->memBlock + 3);
>>>> >> >                 } else {
>>>> >> >                     MYFLT *varmem = insds->lclbas +
>>>> >> > vp->memBlockIndex;
>>>> >> >                     varDetails << QVariant(*varmem);
>>>> >> >                 }
>>>> >> >             } else {
>>>> >> >                 varDetails << QVariant();
>>>> >> >             }
>>>> >> >             varDetails << vp->varType->varTypeName;
>>>> >> >             cs->m_varList << varDetails;
>>>> >> >         }
>>>> >> >         vp = vp->next;
>>>> >> >     }
>>>> >> >     cs->variableMutex.unlock();
>>>> >> >
>>>> >> >     //Copy active instrument list
>>>> >> >     cs->instrumentMutex.lock();
>>>> >> >     cs->m_instrumentList.clear();
>>>> >> >     INSDS *in = insds;
>>>> >> >     while (in->prvact) {
>>>> >> >         in = in->prvact;
>>>> >> >     }
>>>> >> >
>>>> >> >     while (in) {
>>>> >> >         QVariantList instance;
>>>> >> >         instance << in->p1;
>>>> >> >         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>>>> >> >         instance << in->kcounter;
>>>> >> >         cs->m_instrumentList << instance;
>>>> >> >         in = in->nxtact;
>>>> >> >     }
>>>> >> >
>>>> >> >     cs->instrumentMutex.unlock();
>>>> >> >     emit cs->breakpointReached();
>>>> >> > }
>>>> >> >
>>>> >> >
>>>> >> > And yes you can actually click the pause button and the debugger
>>>> >> > will
>>>> >> > stop
>>>> >> > and show you where it is, even if there is no breakpoint there.
>>>> >> >
>>>> >> > Cheers,
>>>> >> > Andrés
>>>> >> >
>>>> >> >
>>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh <rorywalsh@ear.ie>
>>>> >> > wrote:
>>>> >> >>
>>>> >> >> Thanks. And how would one query the value of a variable once the
>>>> >> >> breakpoint is hit? How does one access that information from the
>>>> >> >> Csound structure? Btw, your debugger interface in CsounsQT looks
>>>> >> >> really top-class. I could hope to implement anything as
>>>> >> >> professional
>>>> >> >> as that, but I like the idea of being able to stop and query
>>>> >> >> variables
>>>> >> >> on the fly. Is this possible, your screen-shot seems to indicate
>>>> >> >> so?
>>>> >> >> This will be so useful in teaching!
>>>> >> >>
>>>> >> >>
>>>> >> >> On 10 April 2014 21:58, Andres Cabrera <mantaraya36@gmail.com>
>>>> >> >> wrote:
>>>> >> >> > Also, since the breakpoint callback gets the CSOUND structure, it
>>>> >> >> > can
>>>> >> >> > get
>>>> >> >> > all of its information from there.
>>>> >> >> >
>>>> >> >> > Cheers,
>>>> >> >> > Andrés
>>>> >> >> >
>>>> >> >> >
>>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>>>> >> >> > <mantaraya36@gmail.com>
>>>> >> >> > wrote:
>>>> >> >> >>
>>>> >> >> >> Hi Rory,
>>>> >> >> >>
>>>> >> >> >> Essentially, your application could do something like:
>>>> >> >> >>
>>>> >> >> >>     int break_count = 0;
>>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1,
>>>> >> >> >> p4\nendin\n");
>>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>>>> >> >> >>     csoundStart(csound);
>>>> >> >> >>     csoundDebuggerInit(csound);
>>>> >> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>>>> >> >> >> &break_count);
>>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>>>> >> >> >>
>>>> >> >> >>     for (i = 0; i < 1000; i++) {
>>>> >> >> >>         csoundPerformKsmps(csound);
>>>> >> >> >>     }
>>>> >> >> >>     CU_ASSERT(break_count == 1);
>>>> >> >> >>
>>>> >> >> >>     csoundDebuggerClean(csound);
>>>> >> >> >>     csoundDestroy(csound);
>>>> >> >> >>
>>>> >> >> >> Whenever the breakpoint is reached, the breakpoint callback is
>>>> >> >> >> called.
>>>> >> >> >>
>>>> >> >> >> Currently only instrument breakpoints are implemented (i.e. the
>>>> >> >> >> debugger
>>>> >> >> >> breaks when an instrument is active), but I also want to add
>>>> >> >> >> line
>>>> >> >> >> breakpoints.
>>>> >> >> >>
>>>> >> >> >> Cheers,
>>>> >> >> >> Andrés
>>>> >> >> >>
>>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh <rorywalsh@ear.ie>
>>>> >> >> >> wrote:
>>>> >> >> >> >
>>>> >> >> >> > Wow, this looks super cool Andres. I'm just looking through
>>>> >> >> >> > the
>>>> >> >> >> > code
>>>> >> >> >> > now. Do you have a basic example of setting this up? The CUnit
>>>> >> >> >> > stuff
>>>> >> >> >> > in that debugger test code you posted is confusing me.
>>>> >> >> >> >
>>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera <mantaraya36@gmail.com>
>>>> >> >> >> > wrote:
>>>> >> >> >> > > Hi,
>>>> >> >> >> > >
>>>> >> >> >> > > The Csound debugger I'm working on is finally getting to a
>>>> >> >> >> > > useful
>>>> >> >> >> > > testing
>>>> >> >> >> > > stage.
>>>> >> >> >> > >
>>>> >> >> >> > > I've been doing the work in the csdebugger branch, if you
>>>> >> >> >> > > have
>>>> >> >> >> > > time,
>>>> >> >> >> > > please
>>>> >> >> >> > > have a look.
>>>> >> >> >> > >
>>>> >> >> >> > > To build the debugger, you will need to add to cmake:
>>>> >> >> >> > > -DBUILD_DEBUGGER=1
>>>> >> >> >> > >
>>>> >> >> >> > > You will find some simple tests of the API here:
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>>> >> >> >> > >
>>>> >> >> >> > > I have written a debugger front-end within CsoundQt, which
>>>> >> >> >> > > you
>>>> >> >> >> > > are
>>>> >> >> >> > > welcome
>>>> >> >> >> > > to try out too:
>>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>>>> >> >> >> > >
>>>> >> >> >> > > Some internal details:
>>>> >> >> >> > > The debugger interface is found at:
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>>> >> >> >> > >
>>>> >> >> >> > > Although the debugger functions are part of the API, I think
>>>> >> >> >> > > it's
>>>> >> >> >> > > cleaner to
>>>> >> >> >> > > have them in their own header, as they are also a compile
>>>> >> >> >> > > time
>>>> >> >> >> > > option.
>>>> >> >> >> > >
>>>> >> >> >> > > Because the changes are somewhat invasive, I chose to make
>>>> >> >> >> > > the
>>>> >> >> >> > > kperf
>>>> >> >> >> > > function a pointer within the CSOUND struct that defaults to
>>>> >> >> >> > > nodebug.
>>>> >> >> >> > > When
>>>> >> >> >> > > the debugger is initialized the kperf function pointer is
>>>> >> >> >> > > switched
>>>> >> >> >> > > to
>>>> >> >> >> > > the
>>>> >> >> >> > > debug version, and switched back when the debugger is
>>>> >> >> >> > > disabled
>>>> >> >> >> > > csoundDebuggerInit() and csoundDebuggerClean() functions.
>>>> >> >> >> > >
>>>> >> >> >> > > When a breakpoint is reached, a callback function that has
>>>> >> >> >> > > been
>>>> >> >> >> > > registered
>>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound,
>>>> >> >> >> > > breakpoint_cb_t
>>>> >> >> >> > > bkpt_cb,
>>>> >> >> >> > > void *userdata) is called.
>>>> >> >> >> > >
>>>> >> >> >> > > When a breakpoint is reached, after the callback is called,
>>>> >> >> >> > > the
>>>> >> >> >> > > kperf
>>>> >> >> >> > > function continues running as usual, providing empty buffers
>>>> >> >> >> > > to
>>>> >> >> >> > > the
>>>> >> >> >> > > audio
>>>> >> >> >> > > hardware, and not incrementing the time counters in musmon.
>>>> >> >> >> > > When
>>>> >> >> >> > > a
>>>> >> >> >> > > continue
>>>> >> >> >> > > is reached, the graph traversing continues where it left
>>>> >> >> >> > > off.
>>>> >> >> >> > >
>>>> >> >> >> > > There are probably still a few bugs, but it's now working on
>>>> >> >> >> > > my
>>>> >> >> >> > > simple
>>>> >> >> >> > > tests.
>>>> >> >> >> > >
>>>> >> >> >> > > Any ideas, thoughts and suggestions are very welcome.
>>>> >> >> >> > >
>>>> >> >> >> > > Cheers,
>>>> >> >> >> > > Andrés
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > >
>>>> >> >> >> > > ------------------------------------------------------------------------------
>>>> >> >> >> > > Put Bad Developers to Shame
>>>> >> >> >> > > Dominate Development with Jenkins Continuous Integration
>>>> >> >> >> > > Continuously Automate Build, Test & Deployment
>>>> >> >> >> > > Start a new project now. Try Jenkins in the cloud.
>>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >> > > _______________________________________________
>>>> >> >> >> > > Csound-devel mailing list
>>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >> > >
>>>> >> >> >> >
>>>> >> >> >> >
>>>> >> >> >> >
>>>> >> >> >> >
>>>> >> >> >> >
>>>> >> >> >> > ------------------------------------------------------------------------------
>>>> >> >> >> > Put Bad Developers to Shame
>>>> >> >> >> > Dominate Development with Jenkins Continuous Integration
>>>> >> >> >> > Continuously Automate Build, Test & Deployment
>>>> >> >> >> > Start a new project now. Try Jenkins in the cloud.
>>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >> > _______________________________________________
>>>> >> >> >> > Csound-devel mailing list
>>>> >> >> >> > Csound-devel@lists.sourceforge.net
>>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >>
>>>> >> >> >
>>>> >> >> >
>>>> >> >> >
>>>> >> >> >
>>>> >> >> >
>>>> >> >> > ------------------------------------------------------------------------------
>>>> >> >> > Put Bad Developers to Shame
>>>> >> >> > Dominate Development with Jenkins Continuous Integration
>>>> >> >> > Continuously Automate Build, Test & Deployment
>>>> >> >> > Start a new project now. Try Jenkins in the cloud.
>>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> > _______________________________________________
>>>> >> >> > Csound-devel mailing list
>>>> >> >> > Csound-devel@lists.sourceforge.net
>>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >
>>>> >> >>
>>>> >> >>
>>>> >> >>
>>>> >> >>
>>>> >> >> ------------------------------------------------------------------------------
>>>> >> >> Put Bad Developers to Shame
>>>> >> >> Dominate Development with Jenkins Continuous Integration
>>>> >> >> Continuously Automate Build, Test & Deployment
>>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> _______________________________________________
>>>> >> >> Csound-devel mailing list
>>>> >> >> Csound-devel@lists.sourceforge.net
>>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> > ------------------------------------------------------------------------------
>>>> >> > Put Bad Developers to Shame
>>>> >> > Dominate Development with Jenkins Continuous Integration
>>>> >> > Continuously Automate Build, Test & Deployment
>>>> >> > Start a new project now. Try Jenkins in the cloud.
>>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> > _______________________________________________
>>>> >> > Csound-devel mailing list
>>>> >> > Csound-devel@lists.sourceforge.net
>>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >
>>>> >>
>>>> >>
>>>> >>
>>>> >> ------------------------------------------------------------------------------
>>>> >> Put Bad Developers to Shame
>>>> >> Dominate Development with Jenkins Continuous Integration
>>>> >> Continuously Automate Build, Test & Deployment
>>>> >> Start a new project now. Try Jenkins in the cloud.
>>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>>> >> _______________________________________________
>>>> >> Csound-devel mailing list
>>>> >> Csound-devel@lists.sourceforge.net
>>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > ------------------------------------------------------------------------------
>>>> > Put Bad Developers to Shame
>>>> > Dominate Development with Jenkins Continuous Integration
>>>> > Continuously Automate Build, Test & Deployment
>>>> > Start a new project now. Try Jenkins in the cloud.
>>>> > http://p.sf.net/sfu/13600_Cloudbees
>>>> > _______________________________________________
>>>> > Csound-devel mailing list
>>>> > Csound-devel@lists.sourceforge.net
>>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Put Bad Developers to Shame
>>>> Dominate Development with Jenkins Continuous Integration
>>>> Continuously Automate Build, Test & Deployment
>>>> Start a new project now. Try Jenkins in the cloud.
>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> _______________________________________________
>>>> Csound-devel mailing list
>>>> Csound-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-11 00:10
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
I'm probably adding the wrong lines to cmakelists.txt?

set (BUILD_DEBUGGER 1)

Is that right?

On 11 April 2014 00:06, Andres Cabrera  wrote:
> Yes it would :)
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh  wrote:
>>
>> It would help if I built with the debugger enabled :)
>>
>> On 11 April 2014 00:01, Rory Walsh  wrote:
>> > I'm using a csd file instead of compiling orcs and scores, is this
>> > allowed? My breakpoint callback is never being hit. What am I missing?
>> >
>> > void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata);
>> >
>> > int main(int argc, char *argv[])
>> > {
>> >     int break_count = 0;
>> >     CSOUND* csound = csoundCreate(NULL);
>> >     csoundCompile(csound,argc,argv);
>> >     csoundStart(csound);
>> >     csoundDebuggerInit(csound);
>> >     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> > &break_count);
>> >     csoundSetInstrumentBreakpoint(csound, 1, 0);
>> >
>> >     while (csoundPerformKsmps(csound)==0);
>> >
>> >     csoundDebuggerClean(csound);
>> >     csoundDestroy(csound);
>> > }
>> >
>> > //this never gets called.
>> > void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata)
>> > {
>> >     int *count = (int *) userdata;
>> >     printf("bkpt line %i instr %f\n", line, instr);
>> >     *count = *count + 1;
>> > };
>> >
>> > On 10 April 2014 22:56, Rory Walsh  wrote:
>> >> That's great. Thanks.
>> >>
>> >> On 10 Apr 2014 22:44, "Andres Cabrera"  wrote:
>> >>>
>> >>> Currently only instrument breakpoints are implemented...
>> >>>
>> >>> Cheers,
>> >>> Andrés
>> >>>
>> >>>
>> >>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh  wrote:
>> >>>>
>> >>>> Ok, that sounds good. To help get my head around this I might try to
>> >>>> write a simple command line app that passes a breakpoint line number
>> >>>> as a parameter, and then when it hits, it will print out the values
>> >>>> of
>> >>>> each variable in that instrument. That would be a start.
>> >>>>
>> >>>> On 10 April 2014 22:29, Andres Cabrera  wrote:
>> >>>> > Not exactly.
>> >>>> >
>> >>>> > the function:
>> >>>> > csoundDebugGetInstrument(csound);
>> >>>> >
>> >>>> > Gives you a pointer to the currently active instrument (where the
>> >>>> > debugger
>> >>>> > interrupted execution). You can then get the information about the
>> >>>> > instrument instance (variables and time counters, p-fields, etc.)
>> >>>> > from
>> >>>> > it.
>> >>>> >
>> >>>> > The callback function is only called if a breakpoint is reached,
>> >>>> > which
>> >>>> > is
>> >>>> > checked inside csound's kperf function. There is a linked list of
>> >>>> > breakpoints (that is managed in a thread-safe way), which is
>> >>>> > traversed
>> >>>> > to
>> >>>> > check if the current instrument matches a breakpoint. For line
>> >>>> > breakpoints,
>> >>>> > what will need to happen is that for every opcode that is executed,
>> >>>> > it
>> >>>> > is
>> >>>> > checked whether it matches to a breakpoint line.
>> >>>> >
>> >>>> > Cheers,
>> >>>> > Andrés
>> >>>> >
>> >>>> >
>> >>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh 
>> >>>> > wrote:
>> >>>> >>
>> >>>> >> So you grab the values for all the variables in a particular line
>> >>>> >> each
>> >>>> >> time this callback function is hit? Am I reading that right?
>> >>>> >>
>> >>>> >> On 10 April 2014 22:10, Andres Cabrera 
>> >>>> >> wrote:
>> >>>> >> > Hi,
>> >>>> >> >
>> >>>> >> > My breakpoint callback looks like this:
>> >>>> >> >
>> >>>> >> > void CsoundEngine::breakpointCallback(CSOUND *csound, int line,
>> >>>> >> > double
>> >>>> >> > instr, void *udata)
>> >>>> >> > {
>> >>>> >> >     qDebug() <<"breakpointCallback " << line << instr;
>> >>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>> >>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>> >>>> >> >     // Copy variable list
>> >>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>> >>>> >> >     cs->variableMutex.lock();
>> >>>> >> >     cs->m_varList.clear();
>> >>>> >> >     while (vp) {
>> >>>> >> >         if (vp->varName[0] != '#') {
>> >>>> >> >             QVariantList varDetails;
>> >>>> >> >             varDetails << vp->varName;
>> >>>> >> >             if (strcmp(vp->varType->varTypeName, "i") == 0
>> >>>> >> >                     || strcmp(vp->varType->varTypeName, "k") ==
>> >>>> >> > 0) {
>> >>>> >> >                 if (vp->memBlock) {
>> >>>> >> >                     varDetails << *((MYFLT *)vp->memBlock);
>> >>>> >> >                 } else {
>> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >>>> >> > vp->memBlockIndex;
>> >>>> >> >                     varDetails << QVariant(*varmem);
>> >>>> >> >                 }
>> >>>> >> >             } else if(strcmp(vp->varType->varTypeName, "S") ==
>> >>>> >> > 0) {
>> >>>> >> >                 if (vp->memBlock) {
>> >>>> >> >                     varDetails << *((char *)vp->memBlock);
>> >>>> >> >                 } else {
>> >>>> >> >                     char *varmem = (char *) (insds->lclbas +
>> >>>> >> > vp->memBlockIndex);
>> >>>> >> >                     varDetails << QVariant(varmem);
>> >>>> >> >                 }
>> >>>> >> >             } else if (strcmp(vp->varType->varTypeName, "a") ==
>> >>>> >> > 0) {
>> >>>> >> >                 if (vp->memBlock) {
>> >>>> >> >                     varDetails << *((MYFLT *)vp->memBlock) <<
>> >>>> >> > *((MYFLT
>> >>>> >> > *)vp->memBlock + 1)
>> >>>> >> >                                << *((MYFLT *)vp->memBlock + 2)<<
>> >>>> >> > *((MYFLT
>> >>>> >> > *)vp->memBlock + 3);
>> >>>> >> >                 } else {
>> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >>>> >> > vp->memBlockIndex;
>> >>>> >> >                     varDetails << QVariant(*varmem);
>> >>>> >> >                 }
>> >>>> >> >             } else {
>> >>>> >> >                 varDetails << QVariant();
>> >>>> >> >             }
>> >>>> >> >             varDetails << vp->varType->varTypeName;
>> >>>> >> >             cs->m_varList << varDetails;
>> >>>> >> >         }
>> >>>> >> >         vp = vp->next;
>> >>>> >> >     }
>> >>>> >> >     cs->variableMutex.unlock();
>> >>>> >> >
>> >>>> >> >     //Copy active instrument list
>> >>>> >> >     cs->instrumentMutex.lock();
>> >>>> >> >     cs->m_instrumentList.clear();
>> >>>> >> >     INSDS *in = insds;
>> >>>> >> >     while (in->prvact) {
>> >>>> >> >         in = in->prvact;
>> >>>> >> >     }
>> >>>> >> >
>> >>>> >> >     while (in) {
>> >>>> >> >         QVariantList instance;
>> >>>> >> >         instance << in->p1;
>> >>>> >> >         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>> >>>> >> >         instance << in->kcounter;
>> >>>> >> >         cs->m_instrumentList << instance;
>> >>>> >> >         in = in->nxtact;
>> >>>> >> >     }
>> >>>> >> >
>> >>>> >> >     cs->instrumentMutex.unlock();
>> >>>> >> >     emit cs->breakpointReached();
>> >>>> >> > }
>> >>>> >> >
>> >>>> >> >
>> >>>> >> > And yes you can actually click the pause button and the debugger
>> >>>> >> > will
>> >>>> >> > stop
>> >>>> >> > and show you where it is, even if there is no breakpoint there.
>> >>>> >> >
>> >>>> >> > Cheers,
>> >>>> >> > Andrés
>> >>>> >> >
>> >>>> >> >
>> >>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh 
>> >>>> >> > wrote:
>> >>>> >> >>
>> >>>> >> >> Thanks. And how would one query the value of a variable once
>> >>>> >> >> the
>> >>>> >> >> breakpoint is hit? How does one access that information from
>> >>>> >> >> the
>> >>>> >> >> Csound structure? Btw, your debugger interface in CsounsQT
>> >>>> >> >> looks
>> >>>> >> >> really top-class. I could hope to implement anything as
>> >>>> >> >> professional
>> >>>> >> >> as that, but I like the idea of being able to stop and query
>> >>>> >> >> variables
>> >>>> >> >> on the fly. Is this possible, your screen-shot seems to
>> >>>> >> >> indicate
>> >>>> >> >> so?
>> >>>> >> >> This will be so useful in teaching!
>> >>>> >> >>
>> >>>> >> >>
>> >>>> >> >> On 10 April 2014 21:58, Andres Cabrera 
>> >>>> >> >> wrote:
>> >>>> >> >> > Also, since the breakpoint callback gets the CSOUND
>> >>>> >> >> > structure, it
>> >>>> >> >> > can
>> >>>> >> >> > get
>> >>>> >> >> > all of its information from there.
>> >>>> >> >> >
>> >>>> >> >> > Cheers,
>> >>>> >> >> > Andrés
>> >>>> >> >> >
>> >>>> >> >> >
>> >>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>> >>>> >> >> > 
>> >>>> >> >> > wrote:
>> >>>> >> >> >>
>> >>>> >> >> >> Hi Rory,
>> >>>> >> >> >>
>> >>>> >> >> >> Essentially, your application could do something like:
>> >>>> >> >> >>
>> >>>> >> >> >>     int break_count = 0;
>> >>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>> >>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1,
>> >>>> >> >> >> p4\nendin\n");
>> >>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>> >>>> >> >> >>     csoundStart(csound);
>> >>>> >> >> >>     csoundDebuggerInit(csound);
>> >>>> >> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >>>> >> >> >> &break_count);
>> >>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>> >>>> >> >> >>
>> >>>> >> >> >>     for (i = 0; i < 1000; i++) {
>> >>>> >> >> >>         csoundPerformKsmps(csound);
>> >>>> >> >> >>     }
>> >>>> >> >> >>     CU_ASSERT(break_count == 1);
>> >>>> >> >> >>
>> >>>> >> >> >>     csoundDebuggerClean(csound);
>> >>>> >> >> >>     csoundDestroy(csound);
>> >>>> >> >> >>
>> >>>> >> >> >> Whenever the breakpoint is reached, the breakpoint callback
>> >>>> >> >> >> is
>> >>>> >> >> >> called.
>> >>>> >> >> >>
>> >>>> >> >> >> Currently only instrument breakpoints are implemented (i.e.
>> >>>> >> >> >> the
>> >>>> >> >> >> debugger
>> >>>> >> >> >> breaks when an instrument is active), but I also want to add
>> >>>> >> >> >> line
>> >>>> >> >> >> breakpoints.
>> >>>> >> >> >>
>> >>>> >> >> >> Cheers,
>> >>>> >> >> >> Andrés
>> >>>> >> >> >>
>> >>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>> >>>> >> >> >> 
>> >>>> >> >> >> wrote:
>> >>>> >> >> >> >
>> >>>> >> >> >> > Wow, this looks super cool Andres. I'm just looking
>> >>>> >> >> >> > through
>> >>>> >> >> >> > the
>> >>>> >> >> >> > code
>> >>>> >> >> >> > now. Do you have a basic example of setting this up? The
>> >>>> >> >> >> > CUnit
>> >>>> >> >> >> > stuff
>> >>>> >> >> >> > in that debugger test code you posted is confusing me.
>> >>>> >> >> >> >
>> >>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera
>> >>>> >> >> >> > 
>> >>>> >> >> >> > wrote:
>> >>>> >> >> >> > > Hi,
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > The Csound debugger I'm working on is finally getting to
>> >>>> >> >> >> > > a
>> >>>> >> >> >> > > useful
>> >>>> >> >> >> > > testing
>> >>>> >> >> >> > > stage.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > I've been doing the work in the csdebugger branch, if
>> >>>> >> >> >> > > you
>> >>>> >> >> >> > > have
>> >>>> >> >> >> > > time,
>> >>>> >> >> >> > > please
>> >>>> >> >> >> > > have a look.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > To build the debugger, you will need to add to cmake:
>> >>>> >> >> >> > > -DBUILD_DEBUGGER=1
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > You will find some simple tests of the API here:
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > I have written a debugger front-end within CsoundQt,
>> >>>> >> >> >> > > which
>> >>>> >> >> >> > > you
>> >>>> >> >> >> > > are
>> >>>> >> >> >> > > welcome
>> >>>> >> >> >> > > to try out too:
>> >>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > Some internal details:
>> >>>> >> >> >> > > The debugger interface is found at:
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > Although the debugger functions are part of the API, I
>> >>>> >> >> >> > > think
>> >>>> >> >> >> > > it's
>> >>>> >> >> >> > > cleaner to
>> >>>> >> >> >> > > have them in their own header, as they are also a
>> >>>> >> >> >> > > compile
>> >>>> >> >> >> > > time
>> >>>> >> >> >> > > option.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > Because the changes are somewhat invasive, I chose to
>> >>>> >> >> >> > > make
>> >>>> >> >> >> > > the
>> >>>> >> >> >> > > kperf
>> >>>> >> >> >> > > function a pointer within the CSOUND struct that
>> >>>> >> >> >> > > defaults to
>> >>>> >> >> >> > > nodebug.
>> >>>> >> >> >> > > When
>> >>>> >> >> >> > > the debugger is initialized the kperf function pointer
>> >>>> >> >> >> > > is
>> >>>> >> >> >> > > switched
>> >>>> >> >> >> > > to
>> >>>> >> >> >> > > the
>> >>>> >> >> >> > > debug version, and switched back when the debugger is
>> >>>> >> >> >> > > disabled
>> >>>> >> >> >> > > csoundDebuggerInit() and csoundDebuggerClean()
>> >>>> >> >> >> > > functions.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > When a breakpoint is reached, a callback function that
>> >>>> >> >> >> > > has
>> >>>> >> >> >> > > been
>> >>>> >> >> >> > > registered
>> >>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound,
>> >>>> >> >> >> > > breakpoint_cb_t
>> >>>> >> >> >> > > bkpt_cb,
>> >>>> >> >> >> > > void *userdata) is called.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > When a breakpoint is reached, after the callback is
>> >>>> >> >> >> > > called,
>> >>>> >> >> >> > > the
>> >>>> >> >> >> > > kperf
>> >>>> >> >> >> > > function continues running as usual, providing empty
>> >>>> >> >> >> > > buffers
>> >>>> >> >> >> > > to
>> >>>> >> >> >> > > the
>> >>>> >> >> >> > > audio
>> >>>> >> >> >> > > hardware, and not incrementing the time counters in
>> >>>> >> >> >> > > musmon.
>> >>>> >> >> >> > > When
>> >>>> >> >> >> > > a
>> >>>> >> >> >> > > continue
>> >>>> >> >> >> > > is reached, the graph traversing continues where it left
>> >>>> >> >> >> > > off.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > There are probably still a few bugs, but it's now
>> >>>> >> >> >> > > working on
>> >>>> >> >> >> > > my
>> >>>> >> >> >> > > simple
>> >>>> >> >> >> > > tests.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > Any ideas, thoughts and suggestions are very welcome.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > Cheers,
>> >>>> >> >> >> > > Andrés
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > ------------------------------------------------------------------------------
>> >>>> >> >> >> > > Put Bad Developers to Shame
>> >>>> >> >> >> > > Dominate Development with Jenkins Continuous Integration
>> >>>> >> >> >> > > Continuously Automate Build, Test & Deployment
>> >>>> >> >> >> > > Start a new project now. Try Jenkins in the cloud.
>> >>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>> >>>> >> >> >> > > _______________________________________________
>> >>>> >> >> >> > > Csound-devel mailing list
>> >>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >> >> >> > >
>> >>>> >> >> >> >
>> >>>> >> >> >> >
>> >>>> >> >> >> >
>> >>>> >> >> >> >
>> >>>> >> >> >> >
>> >>>> >> >> >> >
>> >>>> >> >> >> > ------------------------------------------------------------------------------
>> >>>> >> >> >> > Put Bad Developers to Shame
>> >>>> >> >> >> > Dominate Development with Jenkins Continuous Integration
>> >>>> >> >> >> > Continuously Automate Build, Test & Deployment
>> >>>> >> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>> >> >> >> > _______________________________________________
>> >>>> >> >> >> > Csound-devel mailing list
>> >>>> >> >> >> > Csound-devel@lists.sourceforge.net
>> >>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >> >> >>
>> >>>> >> >> >
>> >>>> >> >> >
>> >>>> >> >> >
>> >>>> >> >> >
>> >>>> >> >> >
>> >>>> >> >> >
>> >>>> >> >> > ------------------------------------------------------------------------------
>> >>>> >> >> > Put Bad Developers to Shame
>> >>>> >> >> > Dominate Development with Jenkins Continuous Integration
>> >>>> >> >> > Continuously Automate Build, Test & Deployment
>> >>>> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>> >> >> > _______________________________________________
>> >>>> >> >> > Csound-devel mailing list
>> >>>> >> >> > Csound-devel@lists.sourceforge.net
>> >>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >> >> >
>> >>>> >> >>
>> >>>> >> >>
>> >>>> >> >>
>> >>>> >> >>
>> >>>> >> >>
>> >>>> >> >> ------------------------------------------------------------------------------
>> >>>> >> >> Put Bad Developers to Shame
>> >>>> >> >> Dominate Development with Jenkins Continuous Integration
>> >>>> >> >> Continuously Automate Build, Test & Deployment
>> >>>> >> >> Start a new project now. Try Jenkins in the cloud.
>> >>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>> >>>> >> >> _______________________________________________
>> >>>> >> >> Csound-devel mailing list
>> >>>> >> >> Csound-devel@lists.sourceforge.net
>> >>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> > ------------------------------------------------------------------------------
>> >>>> >> > Put Bad Developers to Shame
>> >>>> >> > Dominate Development with Jenkins Continuous Integration
>> >>>> >> > Continuously Automate Build, Test & Deployment
>> >>>> >> > Start a new project now. Try Jenkins in the cloud.
>> >>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>> >> > _______________________________________________
>> >>>> >> > Csound-devel mailing list
>> >>>> >> > Csound-devel@lists.sourceforge.net
>> >>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >> >
>> >>>> >>
>> >>>> >>
>> >>>> >>
>> >>>> >>
>> >>>> >> ------------------------------------------------------------------------------
>> >>>> >> Put Bad Developers to Shame
>> >>>> >> Dominate Development with Jenkins Continuous Integration
>> >>>> >> Continuously Automate Build, Test & Deployment
>> >>>> >> Start a new project now. Try Jenkins in the cloud.
>> >>>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >>>> >> _______________________________________________
>> >>>> >> Csound-devel mailing list
>> >>>> >> Csound-devel@lists.sourceforge.net
>> >>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >
>> >>>> >
>> >>>> >
>> >>>> >
>> >>>> >
>> >>>> > ------------------------------------------------------------------------------
>> >>>> > Put Bad Developers to Shame
>> >>>> > Dominate Development with Jenkins Continuous Integration
>> >>>> > Continuously Automate Build, Test & Deployment
>> >>>> > Start a new project now. Try Jenkins in the cloud.
>> >>>> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>> > _______________________________________________
>> >>>> > Csound-devel mailing list
>> >>>> > Csound-devel@lists.sourceforge.net
>> >>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >
>> >>>>
>> >>>>
>> >>>>
>> >>>> ------------------------------------------------------------------------------
>> >>>> Put Bad Developers to Shame
>> >>>> Dominate Development with Jenkins Continuous Integration
>> >>>> Continuously Automate Build, Test & Deployment
>> >>>> Start a new project now. Try Jenkins in the cloud.
>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>> _______________________________________________
>> >>>> Csound-devel mailing list
>> >>>> Csound-devel@lists.sourceforge.net
>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>
>> >>>
>> >>>
>> >>>
>> >>>
>> >>> ------------------------------------------------------------------------------
>> >>> Put Bad Developers to Shame
>> >>> Dominate Development with Jenkins Continuous Integration
>> >>> Continuously Automate Build, Test & Deployment
>> >>> Start a new project now. Try Jenkins in the cloud.
>> >>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> _______________________________________________
>> >>> Csound-devel mailing list
>> >>> Csound-devel@lists.sourceforge.net
>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>
>> >>
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-11 00:26
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
easier to do:

cmake -DBUILD_DEBUGGER=1

Cheers,
Andrés


On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
I'm probably adding the wrong lines to cmakelists.txt?

set (BUILD_DEBUGGER 1)

Is that right?

On 11 April 2014 00:06, Andres Cabrera <mantaraya36@gmail.com> wrote:
> Yes it would :)
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>
>> It would help if I built with the debugger enabled :)
>>
>> On 11 April 2014 00:01, Rory Walsh <rorywalsh@ear.ie> wrote:
>> > I'm using a csd file instead of compiling orcs and scores, is this
>> > allowed? My breakpoint callback is never being hit. What am I missing?
>> >
>> > void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata);
>> >
>> > int main(int argc, char *argv[])
>> > {
>> >     int break_count = 0;
>> >     CSOUND* csound = csoundCreate(NULL);
>> >     csoundCompile(csound,argc,argv);
>> >     csoundStart(csound);
>> >     csoundDebuggerInit(csound);
>> >     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> > &break_count);
>> >     csoundSetInstrumentBreakpoint(csound, 1, 0);
>> >
>> >     while (csoundPerformKsmps(csound)==0);
>> >
>> >     csoundDebuggerClean(csound);
>> >     csoundDestroy(csound);
>> > }
>> >
>> > //this never gets called.
>> > void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata)
>> > {
>> >     int *count = (int *) userdata;
>> >     printf("bkpt line %i instr %f\n", line, instr);
>> >     *count = *count + 1;
>> > };
>> >
>> > On 10 April 2014 22:56, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >> That's great. Thanks.
>> >>
>> >> On 10 Apr 2014 22:44, "Andres Cabrera" <mantaraya36@gmail.com> wrote:
>> >>>
>> >>> Currently only instrument breakpoints are implemented...
>> >>>
>> >>> Cheers,
>> >>> Andrés
>> >>>
>> >>>
>> >>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >>>>
>> >>>> Ok, that sounds good. To help get my head around this I might try to
>> >>>> write a simple command line app that passes a breakpoint line number
>> >>>> as a parameter, and then when it hits, it will print out the values
>> >>>> of
>> >>>> each variable in that instrument. That would be a start.
>> >>>>
>> >>>> On 10 April 2014 22:29, Andres Cabrera <mantaraya36@gmail.com> wrote:
>> >>>> > Not exactly.
>> >>>> >
>> >>>> > the function:
>> >>>> > csoundDebugGetInstrument(csound);
>> >>>> >
>> >>>> > Gives you a pointer to the currently active instrument (where the
>> >>>> > debugger
>> >>>> > interrupted execution). You can then get the information about the
>> >>>> > instrument instance (variables and time counters, p-fields, etc.)
>> >>>> > from
>> >>>> > it.
>> >>>> >
>> >>>> > The callback function is only called if a breakpoint is reached,
>> >>>> > which
>> >>>> > is
>> >>>> > checked inside csound's kperf function. There is a linked list of
>> >>>> > breakpoints (that is managed in a thread-safe way), which is
>> >>>> > traversed
>> >>>> > to
>> >>>> > check if the current instrument matches a breakpoint. For line
>> >>>> > breakpoints,
>> >>>> > what will need to happen is that for every opcode that is executed,
>> >>>> > it
>> >>>> > is
>> >>>> > checked whether it matches to a breakpoint line.
>> >>>> >
>> >>>> > Cheers,
>> >>>> > Andrés
>> >>>> >
>> >>>> >
>> >>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh <rorywalsh@ear.ie>
>> >>>> > wrote:
>> >>>> >>
>> >>>> >> So you grab the values for all the variables in a particular line
>> >>>> >> each
>> >>>> >> time this callback function is hit? Am I reading that right?
>> >>>> >>
>> >>>> >> On 10 April 2014 22:10, Andres Cabrera <mantaraya36@gmail.com>
>> >>>> >> wrote:
>> >>>> >> > Hi,
>> >>>> >> >
>> >>>> >> > My breakpoint callback looks like this:
>> >>>> >> >
>> >>>> >> > void CsoundEngine::breakpointCallback(CSOUND *csound, int line,
>> >>>> >> > double
>> >>>> >> > instr, void *udata)
>> >>>> >> > {
>> >>>> >> >     qDebug() <<"breakpointCallback " << line << instr;
>> >>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>> >>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>> >>>> >> >     // Copy variable list
>> >>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>> >>>> >> >     cs->variableMutex.lock();
>> >>>> >> >     cs->m_varList.clear();
>> >>>> >> >     while (vp) {
>> >>>> >> >         if (vp->varName[0] != '#') {
>> >>>> >> >             QVariantList varDetails;
>> >>>> >> >             varDetails << vp->varName;
>> >>>> >> >             if (strcmp(vp->varType->varTypeName, "i") == 0
>> >>>> >> >                     || strcmp(vp->varType->varTypeName, "k") ==
>> >>>> >> > 0) {
>> >>>> >> >                 if (vp->memBlock) {
>> >>>> >> >                     varDetails << *((MYFLT *)vp->memBlock);
>> >>>> >> >                 } else {
>> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >>>> >> > vp->memBlockIndex;
>> >>>> >> >                     varDetails << QVariant(*varmem);
>> >>>> >> >                 }
>> >>>> >> >             } else if(strcmp(vp->varType->varTypeName, "S") ==
>> >>>> >> > 0) {
>> >>>> >> >                 if (vp->memBlock) {
>> >>>> >> >                     varDetails << *((char *)vp->memBlock);
>> >>>> >> >                 } else {
>> >>>> >> >                     char *varmem = (char *) (insds->lclbas +
>> >>>> >> > vp->memBlockIndex);
>> >>>> >> >                     varDetails << QVariant(varmem);
>> >>>> >> >                 }
>> >>>> >> >             } else if (strcmp(vp->varType->varTypeName, "a") ==
>> >>>> >> > 0) {
>> >>>> >> >                 if (vp->memBlock) {
>> >>>> >> >                     varDetails << *((MYFLT *)vp->memBlock) <<
>> >>>> >> > *((MYFLT
>> >>>> >> > *)vp->memBlock + 1)
>> >>>> >> >                                << *((MYFLT *)vp->memBlock + 2)<<
>> >>>> >> > *((MYFLT
>> >>>> >> > *)vp->memBlock + 3);
>> >>>> >> >                 } else {
>> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >>>> >> > vp->memBlockIndex;
>> >>>> >> >                     varDetails << QVariant(*varmem);
>> >>>> >> >                 }
>> >>>> >> >             } else {
>> >>>> >> >                 varDetails << QVariant();
>> >>>> >> >             }
>> >>>> >> >             varDetails << vp->varType->varTypeName;
>> >>>> >> >             cs->m_varList << varDetails;
>> >>>> >> >         }
>> >>>> >> >         vp = vp->next;
>> >>>> >> >     }
>> >>>> >> >     cs->variableMutex.unlock();
>> >>>> >> >
>> >>>> >> >     //Copy active instrument list
>> >>>> >> >     cs->instrumentMutex.lock();
>> >>>> >> >     cs->m_instrumentList.clear();
>> >>>> >> >     INSDS *in = insds;
>> >>>> >> >     while (in->prvact) {
>> >>>> >> >         in = in->prvact;
>> >>>> >> >     }
>> >>>> >> >
>> >>>> >> >     while (in) {
>> >>>> >> >         QVariantList instance;
>> >>>> >> >         instance << in->p1;
>> >>>> >> >         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>> >>>> >> >         instance << in->kcounter;
>> >>>> >> >         cs->m_instrumentList << instance;
>> >>>> >> >         in = in->nxtact;
>> >>>> >> >     }
>> >>>> >> >
>> >>>> >> >     cs->instrumentMutex.unlock();
>> >>>> >> >     emit cs->breakpointReached();
>> >>>> >> > }
>> >>>> >> >
>> >>>> >> >
>> >>>> >> > And yes you can actually click the pause button and the debugger
>> >>>> >> > will
>> >>>> >> > stop
>> >>>> >> > and show you where it is, even if there is no breakpoint there.
>> >>>> >> >
>> >>>> >> > Cheers,
>> >>>> >> > Andrés
>> >>>> >> >
>> >>>> >> >
>> >>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh <rorywalsh@ear.ie>
>> >>>> >> > wrote:
>> >>>> >> >>
>> >>>> >> >> Thanks. And how would one query the value of a variable once
>> >>>> >> >> the
>> >>>> >> >> breakpoint is hit? How does one access that information from
>> >>>> >> >> the
>> >>>> >> >> Csound structure? Btw, your debugger interface in CsounsQT
>> >>>> >> >> looks
>> >>>> >> >> really top-class. I could hope to implement anything as
>> >>>> >> >> professional
>> >>>> >> >> as that, but I like the idea of being able to stop and query
>> >>>> >> >> variables
>> >>>> >> >> on the fly. Is this possible, your screen-shot seems to
>> >>>> >> >> indicate
>> >>>> >> >> so?
>> >>>> >> >> This will be so useful in teaching!
>> >>>> >> >>
>> >>>> >> >>
>> >>>> >> >> On 10 April 2014 21:58, Andres Cabrera <mantaraya36@gmail.com>
>> >>>> >> >> wrote:
>> >>>> >> >> > Also, since the breakpoint callback gets the CSOUND
>> >>>> >> >> > structure, it
>> >>>> >> >> > can
>> >>>> >> >> > get
>> >>>> >> >> > all of its information from there.
>> >>>> >> >> >
>> >>>> >> >> > Cheers,
>> >>>> >> >> > Andrés
>> >>>> >> >> >
>> >>>> >> >> >
>> >>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>> >>>> >> >> > <mantaraya36@gmail.com>
>> >>>> >> >> > wrote:
>> >>>> >> >> >>
>> >>>> >> >> >> Hi Rory,
>> >>>> >> >> >>
>> >>>> >> >> >> Essentially, your application could do something like:
>> >>>> >> >> >>
>> >>>> >> >> >>     int break_count = 0;
>> >>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>> >>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1,
>> >>>> >> >> >> p4\nendin\n");
>> >>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>> >>>> >> >> >>     csoundStart(csound);
>> >>>> >> >> >>     csoundDebuggerInit(csound);
>> >>>> >> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >>>> >> >> >> &break_count);
>> >>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>> >>>> >> >> >>
>> >>>> >> >> >>     for (i = 0; i < 1000; i++) {
>> >>>> >> >> >>         csoundPerformKsmps(csound);
>> >>>> >> >> >>     }
>> >>>> >> >> >>     CU_ASSERT(break_count == 1);
>> >>>> >> >> >>
>> >>>> >> >> >>     csoundDebuggerClean(csound);
>> >>>> >> >> >>     csoundDestroy(csound);
>> >>>> >> >> >>
>> >>>> >> >> >> Whenever the breakpoint is reached, the breakpoint callback
>> >>>> >> >> >> is
>> >>>> >> >> >> called.
>> >>>> >> >> >>
>> >>>> >> >> >> Currently only instrument breakpoints are implemented (i.e.
>> >>>> >> >> >> the
>> >>>> >> >> >> debugger
>> >>>> >> >> >> breaks when an instrument is active), but I also want to add
>> >>>> >> >> >> line
>> >>>> >> >> >> breakpoints.
>> >>>> >> >> >>
>> >>>> >> >> >> Cheers,
>> >>>> >> >> >> Andrés
>> >>>> >> >> >>
>> >>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>> >>>> >> >> >> <rorywalsh@ear.ie>
>> >>>> >> >> >> wrote:
>> >>>> >> >> >> >
>> >>>> >> >> >> > Wow, this looks super cool Andres. I'm just looking
>> >>>> >> >> >> > through
>> >>>> >> >> >> > the
>> >>>> >> >> >> > code
>> >>>> >> >> >> > now. Do you have a basic example of setting this up? The
>> >>>> >> >> >> > CUnit
>> >>>> >> >> >> > stuff
>> >>>> >> >> >> > in that debugger test code you posted is confusing me.
>> >>>> >> >> >> >
>> >>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera
>> >>>> >> >> >> > <mantaraya36@gmail.com>
>> >>>> >> >> >> > wrote:
>> >>>> >> >> >> > > Hi,
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > The Csound debugger I'm working on is finally getting to
>> >>>> >> >> >> > > a
>> >>>> >> >> >> > > useful
>> >>>> >> >> >> > > testing
>> >>>> >> >> >> > > stage.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > I've been doing the work in the csdebugger branch, if
>> >>>> >> >> >> > > you
>> >>>> >> >> >> > > have
>> >>>> >> >> >> > > time,
>> >>>> >> >> >> > > please
>> >>>> >> >> >> > > have a look.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > To build the debugger, you will need to add to cmake:
>> >>>> >> >> >> > > -DBUILD_DEBUGGER=1
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > You will find some simple tests of the API here:
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > I have written a debugger front-end within CsoundQt,
>> >>>> >> >> >> > > which
>> >>>> >> >> >> > > you
>> >>>> >> >> >> > > are
>> >>>> >> >> >> > > welcome
>> >>>> >> >> >> > > to try out too:
>> >>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > Some internal details:
>> >>>> >> >> >> > > The debugger interface is found at:
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > Although the debugger functions are part of the API, I
>> >>>> >> >> >> > > think
>> >>>> >> >> >> > > it's
>> >>>> >> >> >> > > cleaner to
>> >>>> >> >> >> > > have them in their own header, as they are also a
>> >>>> >> >> >> > > compile
>> >>>> >> >> >> > > time
>> >>>> >> >> >> > > option.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > Because the changes are somewhat invasive, I chose to
>> >>>> >> >> >> > > make
>> >>>> >> >> >> > > the
>> >>>> >> >> >> > > kperf
>> >>>> >> >> >> > > function a pointer within the CSOUND struct that
>> >>>> >> >> >> > > defaults to
>> >>>> >> >> >> > > nodebug.
>> >>>> >> >> >> > > When
>> >>>> >> >> >> > > the debugger is initialized the kperf function pointer
>> >>>> >> >> >> > > is
>> >>>> >> >> >> > > switched
>> >>>> >> >> >> > > to
>> >>>> >> >> >> > > the
>> >>>> >> >> >> > > debug version, and switched back when the debugger is
>> >>>> >> >> >> > > disabled
>> >>>> >> >> >> > > csoundDebuggerInit() and csoundDebuggerClean()
>> >>>> >> >> >> > > functions.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > When a breakpoint is reached, a callback function that
>> >>>> >> >> >> > > has
>> >>>> >> >> >> > > been
>> >>>> >> >> >> > > registered
>> >>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound,
>> >>>> >> >> >> > > breakpoint_cb_t
>> >>>> >> >> >> > > bkpt_cb,
>> >>>> >> >> >> > > void *userdata) is called.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > When a breakpoint is reached, after the callback is
>> >>>> >> >> >> > > called,
>> >>>> >> >> >> > > the
>> >>>> >> >> >> > > kperf
>> >>>> >> >> >> > > function continues running as usual, providing empty
>> >>>> >> >> >> > > buffers
>> >>>> >> >> >> > > to
>> >>>> >> >> >> > > the
>> >>>> >> >> >> > > audio
>> >>>> >> >> >> > > hardware, and not incrementing the time counters in
>> >>>> >> >> >> > > musmon.
>> >>>> >> >> >> > > When
>> >>>> >> >> >> > > a
>> >>>> >> >> >> > > continue
>> >>>> >> >> >> > > is reached, the graph traversing continues where it left
>> >>>> >> >> >> > > off.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > There are probably still a few bugs, but it's now
>> >>>> >> >> >> > > working on
>> >>>> >> >> >> > > my
>> >>>> >> >> >> > > simple
>> >>>> >> >> >> > > tests.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > Any ideas, thoughts and suggestions are very welcome.
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > Cheers,
>> >>>> >> >> >> > > Andrés
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > ------------------------------------------------------------------------------
>> >>>> >> >> >> > > Put Bad Developers to Shame
>> >>>> >> >> >> > > Dominate Development with Jenkins Continuous Integration
>> >>>> >> >> >> > > Continuously Automate Build, Test & Deployment
>> >>>> >> >> >> > > Start a new project now. Try Jenkins in the cloud.
>> >>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>> >>>> >> >> >> > > _______________________________________________
>> >>>> >> >> >> > > Csound-devel mailing list
>> >>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>> >>>> >> >> >> > >
>> >>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >> >> >> > >
>> >>>> >> >> >> >
>> >>>> >> >> >> >
>> >>>> >> >> >> >
>> >>>> >> >> >> >
>> >>>> >> >> >> >
>> >>>> >> >> >> >
>> >>>> >> >> >> > ------------------------------------------------------------------------------
>> >>>> >> >> >> > Put Bad Developers to Shame
>> >>>> >> >> >> > Dominate Development with Jenkins Continuous Integration
>> >>>> >> >> >> > Continuously Automate Build, Test & Deployment
>> >>>> >> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>> >> >> >> > _______________________________________________
>> >>>> >> >> >> > Csound-devel mailing list
>> >>>> >> >> >> > Csound-devel@lists.sourceforge.net
>> >>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >> >> >>
>> >>>> >> >> >
>> >>>> >> >> >
>> >>>> >> >> >
>> >>>> >> >> >
>> >>>> >> >> >
>> >>>> >> >> >
>> >>>> >> >> > ------------------------------------------------------------------------------
>> >>>> >> >> > Put Bad Developers to Shame
>> >>>> >> >> > Dominate Development with Jenkins Continuous Integration
>> >>>> >> >> > Continuously Automate Build, Test & Deployment
>> >>>> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>> >> >> > _______________________________________________
>> >>>> >> >> > Csound-devel mailing list
>> >>>> >> >> > Csound-devel@lists.sourceforge.net
>> >>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >> >> >
>> >>>> >> >>
>> >>>> >> >>
>> >>>> >> >>
>> >>>> >> >>
>> >>>> >> >>
>> >>>> >> >> ------------------------------------------------------------------------------
>> >>>> >> >> Put Bad Developers to Shame
>> >>>> >> >> Dominate Development with Jenkins Continuous Integration
>> >>>> >> >> Continuously Automate Build, Test & Deployment
>> >>>> >> >> Start a new project now. Try Jenkins in the cloud.
>> >>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>> >>>> >> >> _______________________________________________
>> >>>> >> >> Csound-devel mailing list
>> >>>> >> >> Csound-devel@lists.sourceforge.net
>> >>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> > ------------------------------------------------------------------------------
>> >>>> >> > Put Bad Developers to Shame
>> >>>> >> > Dominate Development with Jenkins Continuous Integration
>> >>>> >> > Continuously Automate Build, Test & Deployment
>> >>>> >> > Start a new project now. Try Jenkins in the cloud.
>> >>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>> >> > _______________________________________________
>> >>>> >> > Csound-devel mailing list
>> >>>> >> > Csound-devel@lists.sourceforge.net
>> >>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >> >
>> >>>> >>
>> >>>> >>
>> >>>> >>
>> >>>> >>
>> >>>> >> ------------------------------------------------------------------------------
>> >>>> >> Put Bad Developers to Shame
>> >>>> >> Dominate Development with Jenkins Continuous Integration
>> >>>> >> Continuously Automate Build, Test & Deployment
>> >>>> >> Start a new project now. Try Jenkins in the cloud.
>> >>>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >>>> >> _______________________________________________
>> >>>> >> Csound-devel mailing list
>> >>>> >> Csound-devel@lists.sourceforge.net
>> >>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >
>> >>>> >
>> >>>> >
>> >>>> >
>> >>>> >
>> >>>> > ------------------------------------------------------------------------------
>> >>>> > Put Bad Developers to Shame
>> >>>> > Dominate Development with Jenkins Continuous Integration
>> >>>> > Continuously Automate Build, Test & Deployment
>> >>>> > Start a new project now. Try Jenkins in the cloud.
>> >>>> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>> > _______________________________________________
>> >>>> > Csound-devel mailing list
>> >>>> > Csound-devel@lists.sourceforge.net
>> >>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>> >
>> >>>>
>> >>>>
>> >>>>
>> >>>> ------------------------------------------------------------------------------
>> >>>> Put Bad Developers to Shame
>> >>>> Dominate Development with Jenkins Continuous Integration
>> >>>> Continuously Automate Build, Test & Deployment
>> >>>> Start a new project now. Try Jenkins in the cloud.
>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>> _______________________________________________
>> >>>> Csound-devel mailing list
>> >>>> Csound-devel@lists.sourceforge.net
>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>
>> >>>
>> >>>
>> >>>
>> >>>
>> >>> ------------------------------------------------------------------------------
>> >>> Put Bad Developers to Shame
>> >>> Dominate Development with Jenkins Continuous Integration
>> >>> Continuously Automate Build, Test & Deployment
>> >>> Start a new project now. Try Jenkins in the cloud.
>> >>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> _______________________________________________
>> >>> Csound-devel mailing list
>> >>> Csound-devel@lists.sourceforge.net
>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>
>> >>
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-11 00:32
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Still no luck I'm afraid. Are you sure my code is ok?

On 11 April 2014 00:26, Andres Cabrera  wrote:
> easier to do:
>
> cmake -DBUILD_DEBUGGER=1
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh  wrote:
>>
>> I'm probably adding the wrong lines to cmakelists.txt?
>>
>> set (BUILD_DEBUGGER 1)
>>
>> Is that right?
>>
>> On 11 April 2014 00:06, Andres Cabrera  wrote:
>> > Yes it would :)
>> >
>> > Cheers,
>> > Andrés
>> >
>> >
>> > On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh  wrote:
>> >>
>> >> It would help if I built with the debugger enabled :)
>> >>
>> >> On 11 April 2014 00:01, Rory Walsh  wrote:
>> >> > I'm using a csd file instead of compiling orcs and scores, is this
>> >> > allowed? My breakpoint callback is never being hit. What am I
>> >> > missing?
>> >> >
>> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>> >> > *userdata);
>> >> >
>> >> > int main(int argc, char *argv[])
>> >> > {
>> >> >     int break_count = 0;
>> >> >     CSOUND* csound = csoundCreate(NULL);
>> >> >     csoundCompile(csound,argc,argv);
>> >> >     csoundStart(csound);
>> >> >     csoundDebuggerInit(csound);
>> >> >     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >> > &break_count);
>> >> >     csoundSetInstrumentBreakpoint(csound, 1, 0);
>> >> >
>> >> >     while (csoundPerformKsmps(csound)==0);
>> >> >
>> >> >     csoundDebuggerClean(csound);
>> >> >     csoundDestroy(csound);
>> >> > }
>> >> >
>> >> > //this never gets called.
>> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata)
>> >> > {
>> >> >     int *count = (int *) userdata;
>> >> >     printf("bkpt line %i instr %f\n", line, instr);
>> >> >     *count = *count + 1;
>> >> > };
>> >> >
>> >> > On 10 April 2014 22:56, Rory Walsh  wrote:
>> >> >> That's great. Thanks.
>> >> >>
>> >> >> On 10 Apr 2014 22:44, "Andres Cabrera" 
>> >> >> wrote:
>> >> >>>
>> >> >>> Currently only instrument breakpoints are implemented...
>> >> >>>
>> >> >>> Cheers,
>> >> >>> Andrés
>> >> >>>
>> >> >>>
>> >> >>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh 
>> >> >>> wrote:
>> >> >>>>
>> >> >>>> Ok, that sounds good. To help get my head around this I might try
>> >> >>>> to
>> >> >>>> write a simple command line app that passes a breakpoint line
>> >> >>>> number
>> >> >>>> as a parameter, and then when it hits, it will print out the
>> >> >>>> values
>> >> >>>> of
>> >> >>>> each variable in that instrument. That would be a start.
>> >> >>>>
>> >> >>>> On 10 April 2014 22:29, Andres Cabrera 
>> >> >>>> wrote:
>> >> >>>> > Not exactly.
>> >> >>>> >
>> >> >>>> > the function:
>> >> >>>> > csoundDebugGetInstrument(csound);
>> >> >>>> >
>> >> >>>> > Gives you a pointer to the currently active instrument (where
>> >> >>>> > the
>> >> >>>> > debugger
>> >> >>>> > interrupted execution). You can then get the information about
>> >> >>>> > the
>> >> >>>> > instrument instance (variables and time counters, p-fields,
>> >> >>>> > etc.)
>> >> >>>> > from
>> >> >>>> > it.
>> >> >>>> >
>> >> >>>> > The callback function is only called if a breakpoint is reached,
>> >> >>>> > which
>> >> >>>> > is
>> >> >>>> > checked inside csound's kperf function. There is a linked list
>> >> >>>> > of
>> >> >>>> > breakpoints (that is managed in a thread-safe way), which is
>> >> >>>> > traversed
>> >> >>>> > to
>> >> >>>> > check if the current instrument matches a breakpoint. For line
>> >> >>>> > breakpoints,
>> >> >>>> > what will need to happen is that for every opcode that is
>> >> >>>> > executed,
>> >> >>>> > it
>> >> >>>> > is
>> >> >>>> > checked whether it matches to a breakpoint line.
>> >> >>>> >
>> >> >>>> > Cheers,
>> >> >>>> > Andrés
>> >> >>>> >
>> >> >>>> >
>> >> >>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh 
>> >> >>>> > wrote:
>> >> >>>> >>
>> >> >>>> >> So you grab the values for all the variables in a particular
>> >> >>>> >> line
>> >> >>>> >> each
>> >> >>>> >> time this callback function is hit? Am I reading that right?
>> >> >>>> >>
>> >> >>>> >> On 10 April 2014 22:10, Andres Cabrera 
>> >> >>>> >> wrote:
>> >> >>>> >> > Hi,
>> >> >>>> >> >
>> >> >>>> >> > My breakpoint callback looks like this:
>> >> >>>> >> >
>> >> >>>> >> > void CsoundEngine::breakpointCallback(CSOUND *csound, int
>> >> >>>> >> > line,
>> >> >>>> >> > double
>> >> >>>> >> > instr, void *udata)
>> >> >>>> >> > {
>> >> >>>> >> >     qDebug() <<"breakpointCallback " << line << instr;
>> >> >>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>> >> >>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>> >> >>>> >> >     // Copy variable list
>> >> >>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>> >> >>>> >> >     cs->variableMutex.lock();
>> >> >>>> >> >     cs->m_varList.clear();
>> >> >>>> >> >     while (vp) {
>> >> >>>> >> >         if (vp->varName[0] != '#') {
>> >> >>>> >> >             QVariantList varDetails;
>> >> >>>> >> >             varDetails << vp->varName;
>> >> >>>> >> >             if (strcmp(vp->varType->varTypeName, "i") == 0
>> >> >>>> >> >                     || strcmp(vp->varType->varTypeName, "k")
>> >> >>>> >> > ==
>> >> >>>> >> > 0) {
>> >> >>>> >> >                 if (vp->memBlock) {
>> >> >>>> >> >                     varDetails << *((MYFLT *)vp->memBlock);
>> >> >>>> >> >                 } else {
>> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >> >>>> >> > vp->memBlockIndex;
>> >> >>>> >> >                     varDetails << QVariant(*varmem);
>> >> >>>> >> >                 }
>> >> >>>> >> >             } else if(strcmp(vp->varType->varTypeName, "S")
>> >> >>>> >> > ==
>> >> >>>> >> > 0) {
>> >> >>>> >> >                 if (vp->memBlock) {
>> >> >>>> >> >                     varDetails << *((char *)vp->memBlock);
>> >> >>>> >> >                 } else {
>> >> >>>> >> >                     char *varmem = (char *) (insds->lclbas +
>> >> >>>> >> > vp->memBlockIndex);
>> >> >>>> >> >                     varDetails << QVariant(varmem);
>> >> >>>> >> >                 }
>> >> >>>> >> >             } else if (strcmp(vp->varType->varTypeName, "a")
>> >> >>>> >> > ==
>> >> >>>> >> > 0) {
>> >> >>>> >> >                 if (vp->memBlock) {
>> >> >>>> >> >                     varDetails << *((MYFLT *)vp->memBlock) <<
>> >> >>>> >> > *((MYFLT
>> >> >>>> >> > *)vp->memBlock + 1)
>> >> >>>> >> >                                << *((MYFLT *)vp->memBlock +
>> >> >>>> >> > 2)<<
>> >> >>>> >> > *((MYFLT
>> >> >>>> >> > *)vp->memBlock + 3);
>> >> >>>> >> >                 } else {
>> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >> >>>> >> > vp->memBlockIndex;
>> >> >>>> >> >                     varDetails << QVariant(*varmem);
>> >> >>>> >> >                 }
>> >> >>>> >> >             } else {
>> >> >>>> >> >                 varDetails << QVariant();
>> >> >>>> >> >             }
>> >> >>>> >> >             varDetails << vp->varType->varTypeName;
>> >> >>>> >> >             cs->m_varList << varDetails;
>> >> >>>> >> >         }
>> >> >>>> >> >         vp = vp->next;
>> >> >>>> >> >     }
>> >> >>>> >> >     cs->variableMutex.unlock();
>> >> >>>> >> >
>> >> >>>> >> >     //Copy active instrument list
>> >> >>>> >> >     cs->instrumentMutex.lock();
>> >> >>>> >> >     cs->m_instrumentList.clear();
>> >> >>>> >> >     INSDS *in = insds;
>> >> >>>> >> >     while (in->prvact) {
>> >> >>>> >> >         in = in->prvact;
>> >> >>>> >> >     }
>> >> >>>> >> >
>> >> >>>> >> >     while (in) {
>> >> >>>> >> >         QVariantList instance;
>> >> >>>> >> >         instance << in->p1;
>> >> >>>> >> >         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>> >> >>>> >> >         instance << in->kcounter;
>> >> >>>> >> >         cs->m_instrumentList << instance;
>> >> >>>> >> >         in = in->nxtact;
>> >> >>>> >> >     }
>> >> >>>> >> >
>> >> >>>> >> >     cs->instrumentMutex.unlock();
>> >> >>>> >> >     emit cs->breakpointReached();
>> >> >>>> >> > }
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > And yes you can actually click the pause button and the
>> >> >>>> >> > debugger
>> >> >>>> >> > will
>> >> >>>> >> > stop
>> >> >>>> >> > and show you where it is, even if there is no breakpoint
>> >> >>>> >> > there.
>> >> >>>> >> >
>> >> >>>> >> > Cheers,
>> >> >>>> >> > Andrés
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>> >> >>>> >> > 
>> >> >>>> >> > wrote:
>> >> >>>> >> >>
>> >> >>>> >> >> Thanks. And how would one query the value of a variable once
>> >> >>>> >> >> the
>> >> >>>> >> >> breakpoint is hit? How does one access that information from
>> >> >>>> >> >> the
>> >> >>>> >> >> Csound structure? Btw, your debugger interface in CsounsQT
>> >> >>>> >> >> looks
>> >> >>>> >> >> really top-class. I could hope to implement anything as
>> >> >>>> >> >> professional
>> >> >>>> >> >> as that, but I like the idea of being able to stop and query
>> >> >>>> >> >> variables
>> >> >>>> >> >> on the fly. Is this possible, your screen-shot seems to
>> >> >>>> >> >> indicate
>> >> >>>> >> >> so?
>> >> >>>> >> >> This will be so useful in teaching!
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >> On 10 April 2014 21:58, Andres Cabrera
>> >> >>>> >> >> 
>> >> >>>> >> >> wrote:
>> >> >>>> >> >> > Also, since the breakpoint callback gets the CSOUND
>> >> >>>> >> >> > structure, it
>> >> >>>> >> >> > can
>> >> >>>> >> >> > get
>> >> >>>> >> >> > all of its information from there.
>> >> >>>> >> >> >
>> >> >>>> >> >> > Cheers,
>> >> >>>> >> >> > Andrés
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>> >> >>>> >> >> > 
>> >> >>>> >> >> > wrote:
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Hi Rory,
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Essentially, your application could do something like:
>> >> >>>> >> >> >>
>> >> >>>> >> >> >>     int break_count = 0;
>> >> >>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>> >> >>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1,
>> >> >>>> >> >> >> p4\nendin\n");
>> >> >>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>> >> >>>> >> >> >>     csoundStart(csound);
>> >> >>>> >> >> >>     csoundDebuggerInit(csound);
>> >> >>>> >> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void
>> >> >>>> >> >> >> *)
>> >> >>>> >> >> >> &break_count);
>> >> >>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>> >> >>>> >> >> >>
>> >> >>>> >> >> >>     for (i = 0; i < 1000; i++) {
>> >> >>>> >> >> >>         csoundPerformKsmps(csound);
>> >> >>>> >> >> >>     }
>> >> >>>> >> >> >>     CU_ASSERT(break_count == 1);
>> >> >>>> >> >> >>
>> >> >>>> >> >> >>     csoundDebuggerClean(csound);
>> >> >>>> >> >> >>     csoundDestroy(csound);
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Whenever the breakpoint is reached, the breakpoint
>> >> >>>> >> >> >> callback
>> >> >>>> >> >> >> is
>> >> >>>> >> >> >> called.
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Currently only instrument breakpoints are implemented
>> >> >>>> >> >> >> (i.e.
>> >> >>>> >> >> >> the
>> >> >>>> >> >> >> debugger
>> >> >>>> >> >> >> breaks when an instrument is active), but I also want to
>> >> >>>> >> >> >> add
>> >> >>>> >> >> >> line
>> >> >>>> >> >> >> breakpoints.
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Cheers,
>> >> >>>> >> >> >> Andrés
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>> >> >>>> >> >> >> 
>> >> >>>> >> >> >> wrote:
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > Wow, this looks super cool Andres. I'm just looking
>> >> >>>> >> >> >> > through
>> >> >>>> >> >> >> > the
>> >> >>>> >> >> >> > code
>> >> >>>> >> >> >> > now. Do you have a basic example of setting this up?
>> >> >>>> >> >> >> > The
>> >> >>>> >> >> >> > CUnit
>> >> >>>> >> >> >> > stuff
>> >> >>>> >> >> >> > in that debugger test code you posted is confusing me.
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera
>> >> >>>> >> >> >> > 
>> >> >>>> >> >> >> > wrote:
>> >> >>>> >> >> >> > > Hi,
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > The Csound debugger I'm working on is finally getting
>> >> >>>> >> >> >> > > to
>> >> >>>> >> >> >> > > a
>> >> >>>> >> >> >> > > useful
>> >> >>>> >> >> >> > > testing
>> >> >>>> >> >> >> > > stage.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > I've been doing the work in the csdebugger branch, if
>> >> >>>> >> >> >> > > you
>> >> >>>> >> >> >> > > have
>> >> >>>> >> >> >> > > time,
>> >> >>>> >> >> >> > > please
>> >> >>>> >> >> >> > > have a look.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > To build the debugger, you will need to add to cmake:
>> >> >>>> >> >> >> > > -DBUILD_DEBUGGER=1
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > You will find some simple tests of the API here:
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > I have written a debugger front-end within CsoundQt,
>> >> >>>> >> >> >> > > which
>> >> >>>> >> >> >> > > you
>> >> >>>> >> >> >> > > are
>> >> >>>> >> >> >> > > welcome
>> >> >>>> >> >> >> > > to try out too:
>> >> >>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Some internal details:
>> >> >>>> >> >> >> > > The debugger interface is found at:
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Although the debugger functions are part of the API,
>> >> >>>> >> >> >> > > I
>> >> >>>> >> >> >> > > think
>> >> >>>> >> >> >> > > it's
>> >> >>>> >> >> >> > > cleaner to
>> >> >>>> >> >> >> > > have them in their own header, as they are also a
>> >> >>>> >> >> >> > > compile
>> >> >>>> >> >> >> > > time
>> >> >>>> >> >> >> > > option.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Because the changes are somewhat invasive, I chose to
>> >> >>>> >> >> >> > > make
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > kperf
>> >> >>>> >> >> >> > > function a pointer within the CSOUND struct that
>> >> >>>> >> >> >> > > defaults to
>> >> >>>> >> >> >> > > nodebug.
>> >> >>>> >> >> >> > > When
>> >> >>>> >> >> >> > > the debugger is initialized the kperf function
>> >> >>>> >> >> >> > > pointer
>> >> >>>> >> >> >> > > is
>> >> >>>> >> >> >> > > switched
>> >> >>>> >> >> >> > > to
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > debug version, and switched back when the debugger is
>> >> >>>> >> >> >> > > disabled
>> >> >>>> >> >> >> > > csoundDebuggerInit() and csoundDebuggerClean()
>> >> >>>> >> >> >> > > functions.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > When a breakpoint is reached, a callback function
>> >> >>>> >> >> >> > > that
>> >> >>>> >> >> >> > > has
>> >> >>>> >> >> >> > > been
>> >> >>>> >> >> >> > > registered
>> >> >>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound,
>> >> >>>> >> >> >> > > breakpoint_cb_t
>> >> >>>> >> >> >> > > bkpt_cb,
>> >> >>>> >> >> >> > > void *userdata) is called.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > When a breakpoint is reached, after the callback is
>> >> >>>> >> >> >> > > called,
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > kperf
>> >> >>>> >> >> >> > > function continues running as usual, providing empty
>> >> >>>> >> >> >> > > buffers
>> >> >>>> >> >> >> > > to
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > audio
>> >> >>>> >> >> >> > > hardware, and not incrementing the time counters in
>> >> >>>> >> >> >> > > musmon.
>> >> >>>> >> >> >> > > When
>> >> >>>> >> >> >> > > a
>> >> >>>> >> >> >> > > continue
>> >> >>>> >> >> >> > > is reached, the graph traversing continues where it
>> >> >>>> >> >> >> > > left
>> >> >>>> >> >> >> > > off.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > There are probably still a few bugs, but it's now
>> >> >>>> >> >> >> > > working on
>> >> >>>> >> >> >> > > my
>> >> >>>> >> >> >> > > simple
>> >> >>>> >> >> >> > > tests.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Any ideas, thoughts and suggestions are very welcome.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Cheers,
>> >> >>>> >> >> >> > > Andrés
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > ------------------------------------------------------------------------------
>> >> >>>> >> >> >> > > Put Bad Developers to Shame
>> >> >>>> >> >> >> > > Dominate Development with Jenkins Continuous
>> >> >>>> >> >> >> > > Integration
>> >> >>>> >> >> >> > > Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> >> > > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> >> > > _______________________________________________
>> >> >>>> >> >> >> > > Csound-devel mailing list
>> >> >>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > ------------------------------------------------------------------------------
>> >> >>>> >> >> >> > Put Bad Developers to Shame
>> >> >>>> >> >> >> > Dominate Development with Jenkins Continuous
>> >> >>>> >> >> >> > Integration
>> >> >>>> >> >> >> > Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> >> > _______________________________________________
>> >> >>>> >> >> >> > Csound-devel mailing list
>> >> >>>> >> >> >> > Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >> >>
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> > ------------------------------------------------------------------------------
>> >> >>>> >> >> > Put Bad Developers to Shame
>> >> >>>> >> >> > Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> >> > Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> > _______________________________________________
>> >> >>>> >> >> > Csound-devel mailing list
>> >> >>>> >> >> > Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >> >
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >> ------------------------------------------------------------------------------
>> >> >>>> >> >> Put Bad Developers to Shame
>> >> >>>> >> >> Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> >> Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> _______________________________________________
>> >> >>>> >> >> Csound-devel mailing list
>> >> >>>> >> >> Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > ------------------------------------------------------------------------------
>> >> >>>> >> > Put Bad Developers to Shame
>> >> >>>> >> > Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> > Continuously Automate Build, Test & Deployment
>> >> >>>> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> > _______________________________________________
>> >> >>>> >> > Csound-devel mailing list
>> >> >>>> >> > Csound-devel@lists.sourceforge.net
>> >> >>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >> ------------------------------------------------------------------------------
>> >> >>>> >> Put Bad Developers to Shame
>> >> >>>> >> Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> Continuously Automate Build, Test & Deployment
>> >> >>>> >> Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> _______________________________________________
>> >> >>>> >> Csound-devel mailing list
>> >> >>>> >> Csound-devel@lists.sourceforge.net
>> >> >>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> > ------------------------------------------------------------------------------
>> >> >>>> > Put Bad Developers to Shame
>> >> >>>> > Dominate Development with Jenkins Continuous Integration
>> >> >>>> > Continuously Automate Build, Test & Deployment
>> >> >>>> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> > _______________________________________________
>> >> >>>> > Csound-devel mailing list
>> >> >>>> > Csound-devel@lists.sourceforge.net
>> >> >>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>> ------------------------------------------------------------------------------
>> >> >>>> Put Bad Developers to Shame
>> >> >>>> Dominate Development with Jenkins Continuous Integration
>> >> >>>> Continuously Automate Build, Test & Deployment
>> >> >>>> Start a new project now. Try Jenkins in the cloud.
>> >> >>>> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> _______________________________________________
>> >> >>>> Csound-devel mailing list
>> >> >>>> Csound-devel@lists.sourceforge.net
>> >> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> ------------------------------------------------------------------------------
>> >> >>> Put Bad Developers to Shame
>> >> >>> Dominate Development with Jenkins Continuous Integration
>> >> >>> Continuously Automate Build, Test & Deployment
>> >> >>> Start a new project now. Try Jenkins in the cloud.
>> >> >>> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>> _______________________________________________
>> >> >>> Csound-devel mailing list
>> >> >>> Csound-devel@lists.sourceforge.net
>> >> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>
>> >> >>
>> >>
>> >>
>> >>
>> >> ------------------------------------------------------------------------------
>> >> Put Bad Developers to Shame
>> >> Dominate Development with Jenkins Continuous Integration
>> >> Continuously Automate Build, Test & Deployment
>> >> Start a new project now. Try Jenkins in the cloud.
>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> _______________________________________________
>> >> Csound-devel mailing list
>> >> Csound-devel@lists.sourceforge.net
>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>> >
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Put Bad Developers to Shame
>> > Dominate Development with Jenkins Continuous Integration
>> > Continuously Automate Build, Test & Deployment
>> > Start a new project now. Try Jenkins in the cloud.
>> > http://p.sf.net/sfu/13600_Cloudbees
>> > _______________________________________________
>> > Csound-devel mailing list
>> > Csound-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-11 00:35
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
Did you checkout the csdebugger branch for csound and run cmake with -DBUILD_DEBUGGER=1?

Cheers,
Andrés


On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
Still no luck I'm afraid. Are you sure my code is ok?

On 11 April 2014 00:26, Andres Cabrera <mantaraya36@gmail.com> wrote:
> easier to do:
>
> cmake -DBUILD_DEBUGGER=1
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>
>> I'm probably adding the wrong lines to cmakelists.txt?
>>
>> set (BUILD_DEBUGGER 1)
>>
>> Is that right?
>>
>> On 11 April 2014 00:06, Andres Cabrera <mantaraya36@gmail.com> wrote:
>> > Yes it would :)
>> >
>> > Cheers,
>> > Andrés
>> >
>> >
>> > On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >>
>> >> It would help if I built with the debugger enabled :)
>> >>
>> >> On 11 April 2014 00:01, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >> > I'm using a csd file instead of compiling orcs and scores, is this
>> >> > allowed? My breakpoint callback is never being hit. What am I
>> >> > missing?
>> >> >
>> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>> >> > *userdata);
>> >> >
>> >> > int main(int argc, char *argv[])
>> >> > {
>> >> >     int break_count = 0;
>> >> >     CSOUND* csound = csoundCreate(NULL);
>> >> >     csoundCompile(csound,argc,argv);
>> >> >     csoundStart(csound);
>> >> >     csoundDebuggerInit(csound);
>> >> >     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >> > &break_count);
>> >> >     csoundSetInstrumentBreakpoint(csound, 1, 0);
>> >> >
>> >> >     while (csoundPerformKsmps(csound)==0);
>> >> >
>> >> >     csoundDebuggerClean(csound);
>> >> >     csoundDestroy(csound);
>> >> > }
>> >> >
>> >> > //this never gets called.
>> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata)
>> >> > {
>> >> >     int *count = (int *) userdata;
>> >> >     printf("bkpt line %i instr %f\n", line, instr);
>> >> >     *count = *count + 1;
>> >> > };
>> >> >
>> >> > On 10 April 2014 22:56, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >> >> That's great. Thanks.
>> >> >>
>> >> >> On 10 Apr 2014 22:44, "Andres Cabrera" <mantaraya36@gmail.com>
>> >> >> wrote:
>> >> >>>
>> >> >>> Currently only instrument breakpoints are implemented...
>> >> >>>
>> >> >>> Cheers,
>> >> >>> Andrés
>> >> >>>
>> >> >>>
>> >> >>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh <rorywalsh@ear.ie>
>> >> >>> wrote:
>> >> >>>>
>> >> >>>> Ok, that sounds good. To help get my head around this I might try
>> >> >>>> to
>> >> >>>> write a simple command line app that passes a breakpoint line
>> >> >>>> number
>> >> >>>> as a parameter, and then when it hits, it will print out the
>> >> >>>> values
>> >> >>>> of
>> >> >>>> each variable in that instrument. That would be a start.
>> >> >>>>
>> >> >>>> On 10 April 2014 22:29, Andres Cabrera <mantaraya36@gmail.com>
>> >> >>>> wrote:
>> >> >>>> > Not exactly.
>> >> >>>> >
>> >> >>>> > the function:
>> >> >>>> > csoundDebugGetInstrument(csound);
>> >> >>>> >
>> >> >>>> > Gives you a pointer to the currently active instrument (where
>> >> >>>> > the
>> >> >>>> > debugger
>> >> >>>> > interrupted execution). You can then get the information about
>> >> >>>> > the
>> >> >>>> > instrument instance (variables and time counters, p-fields,
>> >> >>>> > etc.)
>> >> >>>> > from
>> >> >>>> > it.
>> >> >>>> >
>> >> >>>> > The callback function is only called if a breakpoint is reached,
>> >> >>>> > which
>> >> >>>> > is
>> >> >>>> > checked inside csound's kperf function. There is a linked list
>> >> >>>> > of
>> >> >>>> > breakpoints (that is managed in a thread-safe way), which is
>> >> >>>> > traversed
>> >> >>>> > to
>> >> >>>> > check if the current instrument matches a breakpoint. For line
>> >> >>>> > breakpoints,
>> >> >>>> > what will need to happen is that for every opcode that is
>> >> >>>> > executed,
>> >> >>>> > it
>> >> >>>> > is
>> >> >>>> > checked whether it matches to a breakpoint line.
>> >> >>>> >
>> >> >>>> > Cheers,
>> >> >>>> > Andrés
>> >> >>>> >
>> >> >>>> >
>> >> >>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh <rorywalsh@ear.ie>
>> >> >>>> > wrote:
>> >> >>>> >>
>> >> >>>> >> So you grab the values for all the variables in a particular
>> >> >>>> >> line
>> >> >>>> >> each
>> >> >>>> >> time this callback function is hit? Am I reading that right?
>> >> >>>> >>
>> >> >>>> >> On 10 April 2014 22:10, Andres Cabrera <mantaraya36@gmail.com>
>> >> >>>> >> wrote:
>> >> >>>> >> > Hi,
>> >> >>>> >> >
>> >> >>>> >> > My breakpoint callback looks like this:
>> >> >>>> >> >
>> >> >>>> >> > void CsoundEngine::breakpointCallback(CSOUND *csound, int
>> >> >>>> >> > line,
>> >> >>>> >> > double
>> >> >>>> >> > instr, void *udata)
>> >> >>>> >> > {
>> >> >>>> >> >     qDebug() <<"breakpointCallback " << line << instr;
>> >> >>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>> >> >>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>> >> >>>> >> >     // Copy variable list
>> >> >>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>> >> >>>> >> >     cs->variableMutex.lock();
>> >> >>>> >> >     cs->m_varList.clear();
>> >> >>>> >> >     while (vp) {
>> >> >>>> >> >         if (vp->varName[0] != '#') {
>> >> >>>> >> >             QVariantList varDetails;
>> >> >>>> >> >             varDetails << vp->varName;
>> >> >>>> >> >             if (strcmp(vp->varType->varTypeName, "i") == 0
>> >> >>>> >> >                     || strcmp(vp->varType->varTypeName, "k")
>> >> >>>> >> > ==
>> >> >>>> >> > 0) {
>> >> >>>> >> >                 if (vp->memBlock) {
>> >> >>>> >> >                     varDetails << *((MYFLT *)vp->memBlock);
>> >> >>>> >> >                 } else {
>> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >> >>>> >> > vp->memBlockIndex;
>> >> >>>> >> >                     varDetails << QVariant(*varmem);
>> >> >>>> >> >                 }
>> >> >>>> >> >             } else if(strcmp(vp->varType->varTypeName, "S")
>> >> >>>> >> > ==
>> >> >>>> >> > 0) {
>> >> >>>> >> >                 if (vp->memBlock) {
>> >> >>>> >> >                     varDetails << *((char *)vp->memBlock);
>> >> >>>> >> >                 } else {
>> >> >>>> >> >                     char *varmem = (char *) (insds->lclbas +
>> >> >>>> >> > vp->memBlockIndex);
>> >> >>>> >> >                     varDetails << QVariant(varmem);
>> >> >>>> >> >                 }
>> >> >>>> >> >             } else if (strcmp(vp->varType->varTypeName, "a")
>> >> >>>> >> > ==
>> >> >>>> >> > 0) {
>> >> >>>> >> >                 if (vp->memBlock) {
>> >> >>>> >> >                     varDetails << *((MYFLT *)vp->memBlock) <<
>> >> >>>> >> > *((MYFLT
>> >> >>>> >> > *)vp->memBlock + 1)
>> >> >>>> >> >                                << *((MYFLT *)vp->memBlock +
>> >> >>>> >> > 2)<<
>> >> >>>> >> > *((MYFLT
>> >> >>>> >> > *)vp->memBlock + 3);
>> >> >>>> >> >                 } else {
>> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >> >>>> >> > vp->memBlockIndex;
>> >> >>>> >> >                     varDetails << QVariant(*varmem);
>> >> >>>> >> >                 }
>> >> >>>> >> >             } else {
>> >> >>>> >> >                 varDetails << QVariant();
>> >> >>>> >> >             }
>> >> >>>> >> >             varDetails << vp->varType->varTypeName;
>> >> >>>> >> >             cs->m_varList << varDetails;
>> >> >>>> >> >         }
>> >> >>>> >> >         vp = vp->next;
>> >> >>>> >> >     }
>> >> >>>> >> >     cs->variableMutex.unlock();
>> >> >>>> >> >
>> >> >>>> >> >     //Copy active instrument list
>> >> >>>> >> >     cs->instrumentMutex.lock();
>> >> >>>> >> >     cs->m_instrumentList.clear();
>> >> >>>> >> >     INSDS *in = insds;
>> >> >>>> >> >     while (in->prvact) {
>> >> >>>> >> >         in = in->prvact;
>> >> >>>> >> >     }
>> >> >>>> >> >
>> >> >>>> >> >     while (in) {
>> >> >>>> >> >         QVariantList instance;
>> >> >>>> >> >         instance << in->p1;
>> >> >>>> >> >         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>> >> >>>> >> >         instance << in->kcounter;
>> >> >>>> >> >         cs->m_instrumentList << instance;
>> >> >>>> >> >         in = in->nxtact;
>> >> >>>> >> >     }
>> >> >>>> >> >
>> >> >>>> >> >     cs->instrumentMutex.unlock();
>> >> >>>> >> >     emit cs->breakpointReached();
>> >> >>>> >> > }
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > And yes you can actually click the pause button and the
>> >> >>>> >> > debugger
>> >> >>>> >> > will
>> >> >>>> >> > stop
>> >> >>>> >> > and show you where it is, even if there is no breakpoint
>> >> >>>> >> > there.
>> >> >>>> >> >
>> >> >>>> >> > Cheers,
>> >> >>>> >> > Andrés
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>> >> >>>> >> > <rorywalsh@ear.ie>
>> >> >>>> >> > wrote:
>> >> >>>> >> >>
>> >> >>>> >> >> Thanks. And how would one query the value of a variable once
>> >> >>>> >> >> the
>> >> >>>> >> >> breakpoint is hit? How does one access that information from
>> >> >>>> >> >> the
>> >> >>>> >> >> Csound structure? Btw, your debugger interface in CsounsQT
>> >> >>>> >> >> looks
>> >> >>>> >> >> really top-class. I could hope to implement anything as
>> >> >>>> >> >> professional
>> >> >>>> >> >> as that, but I like the idea of being able to stop and query
>> >> >>>> >> >> variables
>> >> >>>> >> >> on the fly. Is this possible, your screen-shot seems to
>> >> >>>> >> >> indicate
>> >> >>>> >> >> so?
>> >> >>>> >> >> This will be so useful in teaching!
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >> On 10 April 2014 21:58, Andres Cabrera
>> >> >>>> >> >> <mantaraya36@gmail.com>
>> >> >>>> >> >> wrote:
>> >> >>>> >> >> > Also, since the breakpoint callback gets the CSOUND
>> >> >>>> >> >> > structure, it
>> >> >>>> >> >> > can
>> >> >>>> >> >> > get
>> >> >>>> >> >> > all of its information from there.
>> >> >>>> >> >> >
>> >> >>>> >> >> > Cheers,
>> >> >>>> >> >> > Andrés
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>> >> >>>> >> >> > <mantaraya36@gmail.com>
>> >> >>>> >> >> > wrote:
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Hi Rory,
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Essentially, your application could do something like:
>> >> >>>> >> >> >>
>> >> >>>> >> >> >>     int break_count = 0;
>> >> >>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>> >> >>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1,
>> >> >>>> >> >> >> p4\nendin\n");
>> >> >>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>> >> >>>> >> >> >>     csoundStart(csound);
>> >> >>>> >> >> >>     csoundDebuggerInit(csound);
>> >> >>>> >> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void
>> >> >>>> >> >> >> *)
>> >> >>>> >> >> >> &break_count);
>> >> >>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>> >> >>>> >> >> >>
>> >> >>>> >> >> >>     for (i = 0; i < 1000; i++) {
>> >> >>>> >> >> >>         csoundPerformKsmps(csound);
>> >> >>>> >> >> >>     }
>> >> >>>> >> >> >>     CU_ASSERT(break_count == 1);
>> >> >>>> >> >> >>
>> >> >>>> >> >> >>     csoundDebuggerClean(csound);
>> >> >>>> >> >> >>     csoundDestroy(csound);
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Whenever the breakpoint is reached, the breakpoint
>> >> >>>> >> >> >> callback
>> >> >>>> >> >> >> is
>> >> >>>> >> >> >> called.
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Currently only instrument breakpoints are implemented
>> >> >>>> >> >> >> (i.e.
>> >> >>>> >> >> >> the
>> >> >>>> >> >> >> debugger
>> >> >>>> >> >> >> breaks when an instrument is active), but I also want to
>> >> >>>> >> >> >> add
>> >> >>>> >> >> >> line
>> >> >>>> >> >> >> breakpoints.
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Cheers,
>> >> >>>> >> >> >> Andrés
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>> >> >>>> >> >> >> <rorywalsh@ear.ie>
>> >> >>>> >> >> >> wrote:
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > Wow, this looks super cool Andres. I'm just looking
>> >> >>>> >> >> >> > through
>> >> >>>> >> >> >> > the
>> >> >>>> >> >> >> > code
>> >> >>>> >> >> >> > now. Do you have a basic example of setting this up?
>> >> >>>> >> >> >> > The
>> >> >>>> >> >> >> > CUnit
>> >> >>>> >> >> >> > stuff
>> >> >>>> >> >> >> > in that debugger test code you posted is confusing me.
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera
>> >> >>>> >> >> >> > <mantaraya36@gmail.com>
>> >> >>>> >> >> >> > wrote:
>> >> >>>> >> >> >> > > Hi,
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > The Csound debugger I'm working on is finally getting
>> >> >>>> >> >> >> > > to
>> >> >>>> >> >> >> > > a
>> >> >>>> >> >> >> > > useful
>> >> >>>> >> >> >> > > testing
>> >> >>>> >> >> >> > > stage.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > I've been doing the work in the csdebugger branch, if
>> >> >>>> >> >> >> > > you
>> >> >>>> >> >> >> > > have
>> >> >>>> >> >> >> > > time,
>> >> >>>> >> >> >> > > please
>> >> >>>> >> >> >> > > have a look.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > To build the debugger, you will need to add to cmake:
>> >> >>>> >> >> >> > > -DBUILD_DEBUGGER=1
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > You will find some simple tests of the API here:
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > I have written a debugger front-end within CsoundQt,
>> >> >>>> >> >> >> > > which
>> >> >>>> >> >> >> > > you
>> >> >>>> >> >> >> > > are
>> >> >>>> >> >> >> > > welcome
>> >> >>>> >> >> >> > > to try out too:
>> >> >>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Some internal details:
>> >> >>>> >> >> >> > > The debugger interface is found at:
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Although the debugger functions are part of the API,
>> >> >>>> >> >> >> > > I
>> >> >>>> >> >> >> > > think
>> >> >>>> >> >> >> > > it's
>> >> >>>> >> >> >> > > cleaner to
>> >> >>>> >> >> >> > > have them in their own header, as they are also a
>> >> >>>> >> >> >> > > compile
>> >> >>>> >> >> >> > > time
>> >> >>>> >> >> >> > > option.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Because the changes are somewhat invasive, I chose to
>> >> >>>> >> >> >> > > make
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > kperf
>> >> >>>> >> >> >> > > function a pointer within the CSOUND struct that
>> >> >>>> >> >> >> > > defaults to
>> >> >>>> >> >> >> > > nodebug.
>> >> >>>> >> >> >> > > When
>> >> >>>> >> >> >> > > the debugger is initialized the kperf function
>> >> >>>> >> >> >> > > pointer
>> >> >>>> >> >> >> > > is
>> >> >>>> >> >> >> > > switched
>> >> >>>> >> >> >> > > to
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > debug version, and switched back when the debugger is
>> >> >>>> >> >> >> > > disabled
>> >> >>>> >> >> >> > > csoundDebuggerInit() and csoundDebuggerClean()
>> >> >>>> >> >> >> > > functions.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > When a breakpoint is reached, a callback function
>> >> >>>> >> >> >> > > that
>> >> >>>> >> >> >> > > has
>> >> >>>> >> >> >> > > been
>> >> >>>> >> >> >> > > registered
>> >> >>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound,
>> >> >>>> >> >> >> > > breakpoint_cb_t
>> >> >>>> >> >> >> > > bkpt_cb,
>> >> >>>> >> >> >> > > void *userdata) is called.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > When a breakpoint is reached, after the callback is
>> >> >>>> >> >> >> > > called,
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > kperf
>> >> >>>> >> >> >> > > function continues running as usual, providing empty
>> >> >>>> >> >> >> > > buffers
>> >> >>>> >> >> >> > > to
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > audio
>> >> >>>> >> >> >> > > hardware, and not incrementing the time counters in
>> >> >>>> >> >> >> > > musmon.
>> >> >>>> >> >> >> > > When
>> >> >>>> >> >> >> > > a
>> >> >>>> >> >> >> > > continue
>> >> >>>> >> >> >> > > is reached, the graph traversing continues where it
>> >> >>>> >> >> >> > > left
>> >> >>>> >> >> >> > > off.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > There are probably still a few bugs, but it's now
>> >> >>>> >> >> >> > > working on
>> >> >>>> >> >> >> > > my
>> >> >>>> >> >> >> > > simple
>> >> >>>> >> >> >> > > tests.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Any ideas, thoughts and suggestions are very welcome.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Cheers,
>> >> >>>> >> >> >> > > Andrés
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > ------------------------------------------------------------------------------
>> >> >>>> >> >> >> > > Put Bad Developers to Shame
>> >> >>>> >> >> >> > > Dominate Development with Jenkins Continuous
>> >> >>>> >> >> >> > > Integration
>> >> >>>> >> >> >> > > Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> >> > > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> >> > > _______________________________________________
>> >> >>>> >> >> >> > > Csound-devel mailing list
>> >> >>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > ------------------------------------------------------------------------------
>> >> >>>> >> >> >> > Put Bad Developers to Shame
>> >> >>>> >> >> >> > Dominate Development with Jenkins Continuous
>> >> >>>> >> >> >> > Integration
>> >> >>>> >> >> >> > Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> >> > _______________________________________________
>> >> >>>> >> >> >> > Csound-devel mailing list
>> >> >>>> >> >> >> > Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >> >>
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> > ------------------------------------------------------------------------------
>> >> >>>> >> >> > Put Bad Developers to Shame
>> >> >>>> >> >> > Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> >> > Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> > _______________________________________________
>> >> >>>> >> >> > Csound-devel mailing list
>> >> >>>> >> >> > Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >> >
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >> ------------------------------------------------------------------------------
>> >> >>>> >> >> Put Bad Developers to Shame
>> >> >>>> >> >> Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> >> Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> _______________________________________________
>> >> >>>> >> >> Csound-devel mailing list
>> >> >>>> >> >> Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > ------------------------------------------------------------------------------
>> >> >>>> >> > Put Bad Developers to Shame
>> >> >>>> >> > Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> > Continuously Automate Build, Test & Deployment
>> >> >>>> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> > _______________________________________________
>> >> >>>> >> > Csound-devel mailing list
>> >> >>>> >> > Csound-devel@lists.sourceforge.net
>> >> >>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >> ------------------------------------------------------------------------------
>> >> >>>> >> Put Bad Developers to Shame
>> >> >>>> >> Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> Continuously Automate Build, Test & Deployment
>> >> >>>> >> Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> _______________________________________________
>> >> >>>> >> Csound-devel mailing list
>> >> >>>> >> Csound-devel@lists.sourceforge.net
>> >> >>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> > ------------------------------------------------------------------------------
>> >> >>>> > Put Bad Developers to Shame
>> >> >>>> > Dominate Development with Jenkins Continuous Integration
>> >> >>>> > Continuously Automate Build, Test & Deployment
>> >> >>>> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> > _______________________________________________
>> >> >>>> > Csound-devel mailing list
>> >> >>>> > Csound-devel@lists.sourceforge.net
>> >> >>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>> ------------------------------------------------------------------------------
>> >> >>>> Put Bad Developers to Shame
>> >> >>>> Dominate Development with Jenkins Continuous Integration
>> >> >>>> Continuously Automate Build, Test & Deployment
>> >> >>>> Start a new project now. Try Jenkins in the cloud.
>> >> >>>> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> _______________________________________________
>> >> >>>> Csound-devel mailing list
>> >> >>>> Csound-devel@lists.sourceforge.net
>> >> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> ------------------------------------------------------------------------------
>> >> >>> Put Bad Developers to Shame
>> >> >>> Dominate Development with Jenkins Continuous Integration
>> >> >>> Continuously Automate Build, Test & Deployment
>> >> >>> Start a new project now. Try Jenkins in the cloud.
>> >> >>> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>> _______________________________________________
>> >> >>> Csound-devel mailing list
>> >> >>> Csound-devel@lists.sourceforge.net
>> >> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>
>> >> >>
>> >>
>> >>
>> >>
>> >> ------------------------------------------------------------------------------
>> >> Put Bad Developers to Shame
>> >> Dominate Development with Jenkins Continuous Integration
>> >> Continuously Automate Build, Test & Deployment
>> >> Start a new project now. Try Jenkins in the cloud.
>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> _______________________________________________
>> >> Csound-devel mailing list
>> >> Csound-devel@lists.sourceforge.net
>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>> >
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Put Bad Developers to Shame
>> > Dominate Development with Jenkins Continuous Integration
>> > Continuously Automate Build, Test & Deployment
>> > Start a new project now. Try Jenkins in the cloud.
>> > http://p.sf.net/sfu/13600_Cloudbees
>> > _______________________________________________
>> > Csound-devel mailing list
>> > Csound-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-11 00:36
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
Are you getting build errors?

Cheers,
Andrés


On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera <mantaraya36@gmail.com> wrote:
Did you checkout the csdebugger branch for csound and run cmake with -DBUILD_DEBUGGER=1?

Cheers,
Andrés


On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
Still no luck I'm afraid. Are you sure my code is ok?

On 11 April 2014 00:26, Andres Cabrera <mantaraya36@gmail.com> wrote:
> easier to do:
>
> cmake -DBUILD_DEBUGGER=1
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>
>> I'm probably adding the wrong lines to cmakelists.txt?
>>
>> set (BUILD_DEBUGGER 1)
>>
>> Is that right?
>>
>> On 11 April 2014 00:06, Andres Cabrera <mantaraya36@gmail.com> wrote:
>> > Yes it would :)
>> >
>> > Cheers,
>> > Andrés
>> >
>> >
>> > On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >>
>> >> It would help if I built with the debugger enabled :)
>> >>
>> >> On 11 April 2014 00:01, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >> > I'm using a csd file instead of compiling orcs and scores, is this
>> >> > allowed? My breakpoint callback is never being hit. What am I
>> >> > missing?
>> >> >
>> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>> >> > *userdata);
>> >> >
>> >> > int main(int argc, char *argv[])
>> >> > {
>> >> >     int break_count = 0;
>> >> >     CSOUND* csound = csoundCreate(NULL);
>> >> >     csoundCompile(csound,argc,argv);
>> >> >     csoundStart(csound);
>> >> >     csoundDebuggerInit(csound);
>> >> >     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >> > &break_count);
>> >> >     csoundSetInstrumentBreakpoint(csound, 1, 0);
>> >> >
>> >> >     while (csoundPerformKsmps(csound)==0);
>> >> >
>> >> >     csoundDebuggerClean(csound);
>> >> >     csoundDestroy(csound);
>> >> > }
>> >> >
>> >> > //this never gets called.
>> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata)
>> >> > {
>> >> >     int *count = (int *) userdata;
>> >> >     printf("bkpt line %i instr %f\n", line, instr);
>> >> >     *count = *count + 1;
>> >> > };
>> >> >
>> >> > On 10 April 2014 22:56, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >> >> That's great. Thanks.
>> >> >>
>> >> >> On 10 Apr 2014 22:44, "Andres Cabrera" <mantaraya36@gmail.com>
>> >> >> wrote:
>> >> >>>
>> >> >>> Currently only instrument breakpoints are implemented...
>> >> >>>
>> >> >>> Cheers,
>> >> >>> Andrés
>> >> >>>
>> >> >>>
>> >> >>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh <rorywalsh@ear.ie>
>> >> >>> wrote:
>> >> >>>>
>> >> >>>> Ok, that sounds good. To help get my head around this I might try
>> >> >>>> to
>> >> >>>> write a simple command line app that passes a breakpoint line
>> >> >>>> number
>> >> >>>> as a parameter, and then when it hits, it will print out the
>> >> >>>> values
>> >> >>>> of
>> >> >>>> each variable in that instrument. That would be a start.
>> >> >>>>
>> >> >>>> On 10 April 2014 22:29, Andres Cabrera <mantaraya36@gmail.com>
>> >> >>>> wrote:
>> >> >>>> > Not exactly.
>> >> >>>> >
>> >> >>>> > the function:
>> >> >>>> > csoundDebugGetInstrument(csound);
>> >> >>>> >
>> >> >>>> > Gives you a pointer to the currently active instrument (where
>> >> >>>> > the
>> >> >>>> > debugger
>> >> >>>> > interrupted execution). You can then get the information about
>> >> >>>> > the
>> >> >>>> > instrument instance (variables and time counters, p-fields,
>> >> >>>> > etc.)
>> >> >>>> > from
>> >> >>>> > it.
>> >> >>>> >
>> >> >>>> > The callback function is only called if a breakpoint is reached,
>> >> >>>> > which
>> >> >>>> > is
>> >> >>>> > checked inside csound's kperf function. There is a linked list
>> >> >>>> > of
>> >> >>>> > breakpoints (that is managed in a thread-safe way), which is
>> >> >>>> > traversed
>> >> >>>> > to
>> >> >>>> > check if the current instrument matches a breakpoint. For line
>> >> >>>> > breakpoints,
>> >> >>>> > what will need to happen is that for every opcode that is
>> >> >>>> > executed,
>> >> >>>> > it
>> >> >>>> > is
>> >> >>>> > checked whether it matches to a breakpoint line.
>> >> >>>> >
>> >> >>>> > Cheers,
>> >> >>>> > Andrés
>> >> >>>> >
>> >> >>>> >
>> >> >>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh <rorywalsh@ear.ie>
>> >> >>>> > wrote:
>> >> >>>> >>
>> >> >>>> >> So you grab the values for all the variables in a particular
>> >> >>>> >> line
>> >> >>>> >> each
>> >> >>>> >> time this callback function is hit? Am I reading that right?
>> >> >>>> >>
>> >> >>>> >> On 10 April 2014 22:10, Andres Cabrera <mantaraya36@gmail.com>
>> >> >>>> >> wrote:
>> >> >>>> >> > Hi,
>> >> >>>> >> >
>> >> >>>> >> > My breakpoint callback looks like this:
>> >> >>>> >> >
>> >> >>>> >> > void CsoundEngine::breakpointCallback(CSOUND *csound, int
>> >> >>>> >> > line,
>> >> >>>> >> > double
>> >> >>>> >> > instr, void *udata)
>> >> >>>> >> > {
>> >> >>>> >> >     qDebug() <<"breakpointCallback " << line << instr;
>> >> >>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>> >> >>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>> >> >>>> >> >     // Copy variable list
>> >> >>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>> >> >>>> >> >     cs->variableMutex.lock();
>> >> >>>> >> >     cs->m_varList.clear();
>> >> >>>> >> >     while (vp) {
>> >> >>>> >> >         if (vp->varName[0] != '#') {
>> >> >>>> >> >             QVariantList varDetails;
>> >> >>>> >> >             varDetails << vp->varName;
>> >> >>>> >> >             if (strcmp(vp->varType->varTypeName, "i") == 0
>> >> >>>> >> >                     || strcmp(vp->varType->varTypeName, "k")
>> >> >>>> >> > ==
>> >> >>>> >> > 0) {
>> >> >>>> >> >                 if (vp->memBlock) {
>> >> >>>> >> >                     varDetails << *((MYFLT *)vp->memBlock);
>> >> >>>> >> >                 } else {
>> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >> >>>> >> > vp->memBlockIndex;
>> >> >>>> >> >                     varDetails << QVariant(*varmem);
>> >> >>>> >> >                 }
>> >> >>>> >> >             } else if(strcmp(vp->varType->varTypeName, "S")
>> >> >>>> >> > ==
>> >> >>>> >> > 0) {
>> >> >>>> >> >                 if (vp->memBlock) {
>> >> >>>> >> >                     varDetails << *((char *)vp->memBlock);
>> >> >>>> >> >                 } else {
>> >> >>>> >> >                     char *varmem = (char *) (insds->lclbas +
>> >> >>>> >> > vp->memBlockIndex);
>> >> >>>> >> >                     varDetails << QVariant(varmem);
>> >> >>>> >> >                 }
>> >> >>>> >> >             } else if (strcmp(vp->varType->varTypeName, "a")
>> >> >>>> >> > ==
>> >> >>>> >> > 0) {
>> >> >>>> >> >                 if (vp->memBlock) {
>> >> >>>> >> >                     varDetails << *((MYFLT *)vp->memBlock) <<
>> >> >>>> >> > *((MYFLT
>> >> >>>> >> > *)vp->memBlock + 1)
>> >> >>>> >> >                                << *((MYFLT *)vp->memBlock +
>> >> >>>> >> > 2)<<
>> >> >>>> >> > *((MYFLT
>> >> >>>> >> > *)vp->memBlock + 3);
>> >> >>>> >> >                 } else {
>> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >> >>>> >> > vp->memBlockIndex;
>> >> >>>> >> >                     varDetails << QVariant(*varmem);
>> >> >>>> >> >                 }
>> >> >>>> >> >             } else {
>> >> >>>> >> >                 varDetails << QVariant();
>> >> >>>> >> >             }
>> >> >>>> >> >             varDetails << vp->varType->varTypeName;
>> >> >>>> >> >             cs->m_varList << varDetails;
>> >> >>>> >> >         }
>> >> >>>> >> >         vp = vp->next;
>> >> >>>> >> >     }
>> >> >>>> >> >     cs->variableMutex.unlock();
>> >> >>>> >> >
>> >> >>>> >> >     //Copy active instrument list
>> >> >>>> >> >     cs->instrumentMutex.lock();
>> >> >>>> >> >     cs->m_instrumentList.clear();
>> >> >>>> >> >     INSDS *in = insds;
>> >> >>>> >> >     while (in->prvact) {
>> >> >>>> >> >         in = in->prvact;
>> >> >>>> >> >     }
>> >> >>>> >> >
>> >> >>>> >> >     while (in) {
>> >> >>>> >> >         QVariantList instance;
>> >> >>>> >> >         instance << in->p1;
>> >> >>>> >> >         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>> >> >>>> >> >         instance << in->kcounter;
>> >> >>>> >> >         cs->m_instrumentList << instance;
>> >> >>>> >> >         in = in->nxtact;
>> >> >>>> >> >     }
>> >> >>>> >> >
>> >> >>>> >> >     cs->instrumentMutex.unlock();
>> >> >>>> >> >     emit cs->breakpointReached();
>> >> >>>> >> > }
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > And yes you can actually click the pause button and the
>> >> >>>> >> > debugger
>> >> >>>> >> > will
>> >> >>>> >> > stop
>> >> >>>> >> > and show you where it is, even if there is no breakpoint
>> >> >>>> >> > there.
>> >> >>>> >> >
>> >> >>>> >> > Cheers,
>> >> >>>> >> > Andrés
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>> >> >>>> >> > <rorywalsh@ear.ie>
>> >> >>>> >> > wrote:
>> >> >>>> >> >>
>> >> >>>> >> >> Thanks. And how would one query the value of a variable once
>> >> >>>> >> >> the
>> >> >>>> >> >> breakpoint is hit? How does one access that information from
>> >> >>>> >> >> the
>> >> >>>> >> >> Csound structure? Btw, your debugger interface in CsounsQT
>> >> >>>> >> >> looks
>> >> >>>> >> >> really top-class. I could hope to implement anything as
>> >> >>>> >> >> professional
>> >> >>>> >> >> as that, but I like the idea of being able to stop and query
>> >> >>>> >> >> variables
>> >> >>>> >> >> on the fly. Is this possible, your screen-shot seems to
>> >> >>>> >> >> indicate
>> >> >>>> >> >> so?
>> >> >>>> >> >> This will be so useful in teaching!
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >> On 10 April 2014 21:58, Andres Cabrera
>> >> >>>> >> >> <mantaraya36@gmail.com>
>> >> >>>> >> >> wrote:
>> >> >>>> >> >> > Also, since the breakpoint callback gets the CSOUND
>> >> >>>> >> >> > structure, it
>> >> >>>> >> >> > can
>> >> >>>> >> >> > get
>> >> >>>> >> >> > all of its information from there.
>> >> >>>> >> >> >
>> >> >>>> >> >> > Cheers,
>> >> >>>> >> >> > Andrés
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>> >> >>>> >> >> > <mantaraya36@gmail.com>
>> >> >>>> >> >> > wrote:
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Hi Rory,
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Essentially, your application could do something like:
>> >> >>>> >> >> >>
>> >> >>>> >> >> >>     int break_count = 0;
>> >> >>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>> >> >>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1,
>> >> >>>> >> >> >> p4\nendin\n");
>> >> >>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>> >> >>>> >> >> >>     csoundStart(csound);
>> >> >>>> >> >> >>     csoundDebuggerInit(csound);
>> >> >>>> >> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void
>> >> >>>> >> >> >> *)
>> >> >>>> >> >> >> &break_count);
>> >> >>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>> >> >>>> >> >> >>
>> >> >>>> >> >> >>     for (i = 0; i < 1000; i++) {
>> >> >>>> >> >> >>         csoundPerformKsmps(csound);
>> >> >>>> >> >> >>     }
>> >> >>>> >> >> >>     CU_ASSERT(break_count == 1);
>> >> >>>> >> >> >>
>> >> >>>> >> >> >>     csoundDebuggerClean(csound);
>> >> >>>> >> >> >>     csoundDestroy(csound);
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Whenever the breakpoint is reached, the breakpoint
>> >> >>>> >> >> >> callback
>> >> >>>> >> >> >> is
>> >> >>>> >> >> >> called.
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Currently only instrument breakpoints are implemented
>> >> >>>> >> >> >> (i.e.
>> >> >>>> >> >> >> the
>> >> >>>> >> >> >> debugger
>> >> >>>> >> >> >> breaks when an instrument is active), but I also want to
>> >> >>>> >> >> >> add
>> >> >>>> >> >> >> line
>> >> >>>> >> >> >> breakpoints.
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Cheers,
>> >> >>>> >> >> >> Andrés
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>> >> >>>> >> >> >> <rorywalsh@ear.ie>
>> >> >>>> >> >> >> wrote:
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > Wow, this looks super cool Andres. I'm just looking
>> >> >>>> >> >> >> > through
>> >> >>>> >> >> >> > the
>> >> >>>> >> >> >> > code
>> >> >>>> >> >> >> > now. Do you have a basic example of setting this up?
>> >> >>>> >> >> >> > The
>> >> >>>> >> >> >> > CUnit
>> >> >>>> >> >> >> > stuff
>> >> >>>> >> >> >> > in that debugger test code you posted is confusing me.
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera
>> >> >>>> >> >> >> > <mantaraya36@gmail.com>
>> >> >>>> >> >> >> > wrote:
>> >> >>>> >> >> >> > > Hi,
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > The Csound debugger I'm working on is finally getting
>> >> >>>> >> >> >> > > to
>> >> >>>> >> >> >> > > a
>> >> >>>> >> >> >> > > useful
>> >> >>>> >> >> >> > > testing
>> >> >>>> >> >> >> > > stage.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > I've been doing the work in the csdebugger branch, if
>> >> >>>> >> >> >> > > you
>> >> >>>> >> >> >> > > have
>> >> >>>> >> >> >> > > time,
>> >> >>>> >> >> >> > > please
>> >> >>>> >> >> >> > > have a look.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > To build the debugger, you will need to add to cmake:
>> >> >>>> >> >> >> > > -DBUILD_DEBUGGER=1
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > You will find some simple tests of the API here:
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > I have written a debugger front-end within CsoundQt,
>> >> >>>> >> >> >> > > which
>> >> >>>> >> >> >> > > you
>> >> >>>> >> >> >> > > are
>> >> >>>> >> >> >> > > welcome
>> >> >>>> >> >> >> > > to try out too:
>> >> >>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Some internal details:
>> >> >>>> >> >> >> > > The debugger interface is found at:
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Although the debugger functions are part of the API,
>> >> >>>> >> >> >> > > I
>> >> >>>> >> >> >> > > think
>> >> >>>> >> >> >> > > it's
>> >> >>>> >> >> >> > > cleaner to
>> >> >>>> >> >> >> > > have them in their own header, as they are also a
>> >> >>>> >> >> >> > > compile
>> >> >>>> >> >> >> > > time
>> >> >>>> >> >> >> > > option.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Because the changes are somewhat invasive, I chose to
>> >> >>>> >> >> >> > > make
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > kperf
>> >> >>>> >> >> >> > > function a pointer within the CSOUND struct that
>> >> >>>> >> >> >> > > defaults to
>> >> >>>> >> >> >> > > nodebug.
>> >> >>>> >> >> >> > > When
>> >> >>>> >> >> >> > > the debugger is initialized the kperf function
>> >> >>>> >> >> >> > > pointer
>> >> >>>> >> >> >> > > is
>> >> >>>> >> >> >> > > switched
>> >> >>>> >> >> >> > > to
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > debug version, and switched back when the debugger is
>> >> >>>> >> >> >> > > disabled
>> >> >>>> >> >> >> > > csoundDebuggerInit() and csoundDebuggerClean()
>> >> >>>> >> >> >> > > functions.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > When a breakpoint is reached, a callback function
>> >> >>>> >> >> >> > > that
>> >> >>>> >> >> >> > > has
>> >> >>>> >> >> >> > > been
>> >> >>>> >> >> >> > > registered
>> >> >>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound,
>> >> >>>> >> >> >> > > breakpoint_cb_t
>> >> >>>> >> >> >> > > bkpt_cb,
>> >> >>>> >> >> >> > > void *userdata) is called.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > When a breakpoint is reached, after the callback is
>> >> >>>> >> >> >> > > called,
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > kperf
>> >> >>>> >> >> >> > > function continues running as usual, providing empty
>> >> >>>> >> >> >> > > buffers
>> >> >>>> >> >> >> > > to
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > audio
>> >> >>>> >> >> >> > > hardware, and not incrementing the time counters in
>> >> >>>> >> >> >> > > musmon.
>> >> >>>> >> >> >> > > When
>> >> >>>> >> >> >> > > a
>> >> >>>> >> >> >> > > continue
>> >> >>>> >> >> >> > > is reached, the graph traversing continues where it
>> >> >>>> >> >> >> > > left
>> >> >>>> >> >> >> > > off.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > There are probably still a few bugs, but it's now
>> >> >>>> >> >> >> > > working on
>> >> >>>> >> >> >> > > my
>> >> >>>> >> >> >> > > simple
>> >> >>>> >> >> >> > > tests.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Any ideas, thoughts and suggestions are very welcome.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Cheers,
>> >> >>>> >> >> >> > > Andrés
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > ------------------------------------------------------------------------------
>> >> >>>> >> >> >> > > Put Bad Developers to Shame
>> >> >>>> >> >> >> > > Dominate Development with Jenkins Continuous
>> >> >>>> >> >> >> > > Integration
>> >> >>>> >> >> >> > > Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> >> > > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> >> > > _______________________________________________
>> >> >>>> >> >> >> > > Csound-devel mailing list
>> >> >>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > ------------------------------------------------------------------------------
>> >> >>>> >> >> >> > Put Bad Developers to Shame
>> >> >>>> >> >> >> > Dominate Development with Jenkins Continuous
>> >> >>>> >> >> >> > Integration
>> >> >>>> >> >> >> > Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> >> > _______________________________________________
>> >> >>>> >> >> >> > Csound-devel mailing list
>> >> >>>> >> >> >> > Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >> >>
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> > ------------------------------------------------------------------------------
>> >> >>>> >> >> > Put Bad Developers to Shame
>> >> >>>> >> >> > Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> >> > Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> > _______________________________________________
>> >> >>>> >> >> > Csound-devel mailing list
>> >> >>>> >> >> > Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >> >
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >> ------------------------------------------------------------------------------
>> >> >>>> >> >> Put Bad Developers to Shame
>> >> >>>> >> >> Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> >> Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> _______________________________________________
>> >> >>>> >> >> Csound-devel mailing list
>> >> >>>> >> >> Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > ------------------------------------------------------------------------------
>> >> >>>> >> > Put Bad Developers to Shame
>> >> >>>> >> > Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> > Continuously Automate Build, Test & Deployment
>> >> >>>> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> > _______________________________________________
>> >> >>>> >> > Csound-devel mailing list
>> >> >>>> >> > Csound-devel@lists.sourceforge.net
>> >> >>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >> ------------------------------------------------------------------------------
>> >> >>>> >> Put Bad Developers to Shame
>> >> >>>> >> Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> Continuously Automate Build, Test & Deployment
>> >> >>>> >> Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> _______________________________________________
>> >> >>>> >> Csound-devel mailing list
>> >> >>>> >> Csound-devel@lists.sourceforge.net
>> >> >>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> > ------------------------------------------------------------------------------
>> >> >>>> > Put Bad Developers to Shame
>> >> >>>> > Dominate Development with Jenkins Continuous Integration
>> >> >>>> > Continuously Automate Build, Test & Deployment
>> >> >>>> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> > _______________________________________________
>> >> >>>> > Csound-devel mailing list
>> >> >>>> > Csound-devel@lists.sourceforge.net
>> >> >>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>> ------------------------------------------------------------------------------
>> >> >>>> Put Bad Developers to Shame
>> >> >>>> Dominate Development with Jenkins Continuous Integration
>> >> >>>> Continuously Automate Build, Test & Deployment
>> >> >>>> Start a new project now. Try Jenkins in the cloud.
>> >> >>>> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> _______________________________________________
>> >> >>>> Csound-devel mailing list
>> >> >>>> Csound-devel@lists.sourceforge.net
>> >> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> ------------------------------------------------------------------------------
>> >> >>> Put Bad Developers to Shame
>> >> >>> Dominate Development with Jenkins Continuous Integration
>> >> >>> Continuously Automate Build, Test & Deployment
>> >> >>> Start a new project now. Try Jenkins in the cloud.
>> >> >>> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>> _______________________________________________
>> >> >>> Csound-devel mailing list
>> >> >>> Csound-devel@lists.sourceforge.net
>> >> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>
>> >> >>
>> >>
>> >>
>> >>
>> >> ------------------------------------------------------------------------------
>> >> Put Bad Developers to Shame
>> >> Dominate Development with Jenkins Continuous Integration
>> >> Continuously Automate Build, Test & Deployment
>> >> Start a new project now. Try Jenkins in the cloud.
>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> _______________________________________________
>> >> Csound-devel mailing list
>> >> Csound-devel@lists.sourceforge.net
>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>> >
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Put Bad Developers to Shame
>> > Dominate Development with Jenkins Continuous Integration
>> > Continuously Automate Build, Test & Deployment
>> > Start a new project now. Try Jenkins in the cloud.
>> > http://p.sf.net/sfu/13600_Cloudbees
>> > _______________________________________________
>> > Csound-devel mailing list
>> > Csound-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel



Date2014-04-11 01:51
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  

No. None at all?

On 11 Apr 2014 00:36, "Andres Cabrera" <mantaraya36@gmail.com> wrote:
Are you getting build errors?

Cheers,
Andrés


On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera <mantaraya36@gmail.com> wrote:
Did you checkout the csdebugger branch for csound and run cmake with -DBUILD_DEBUGGER=1?

Cheers,
Andrés


On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
Still no luck I'm afraid. Are you sure my code is ok?

On 11 April 2014 00:26, Andres Cabrera <mantaraya36@gmail.com> wrote:
> easier to do:
>
> cmake -DBUILD_DEBUGGER=1
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>
>> I'm probably adding the wrong lines to cmakelists.txt?
>>
>> set (BUILD_DEBUGGER 1)
>>
>> Is that right?
>>
>> On 11 April 2014 00:06, Andres Cabrera <mantaraya36@gmail.com> wrote:
>> > Yes it would :)
>> >
>> > Cheers,
>> > Andrés
>> >
>> >
>> > On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >>
>> >> It would help if I built with the debugger enabled :)
>> >>
>> >> On 11 April 2014 00:01, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >> > I'm using a csd file instead of compiling orcs and scores, is this
>> >> > allowed? My breakpoint callback is never being hit. What am I
>> >> > missing?
>> >> >
>> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>> >> > *userdata);
>> >> >
>> >> > int main(int argc, char *argv[])
>> >> > {
>> >> >     int break_count = 0;
>> >> >     CSOUND* csound = csoundCreate(NULL);
>> >> >     csoundCompile(csound,argc,argv);
>> >> >     csoundStart(csound);
>> >> >     csoundDebuggerInit(csound);
>> >> >     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >> > &break_count);
>> >> >     csoundSetInstrumentBreakpoint(csound, 1, 0);
>> >> >
>> >> >     while (csoundPerformKsmps(csound)==0);
>> >> >
>> >> >     csoundDebuggerClean(csound);
>> >> >     csoundDestroy(csound);
>> >> > }
>> >> >
>> >> > //this never gets called.
>> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void *userdata)
>> >> > {
>> >> >     int *count = (int *) userdata;
>> >> >     printf("bkpt line %i instr %f\n", line, instr);
>> >> >     *count = *count + 1;
>> >> > };
>> >> >
>> >> > On 10 April 2014 22:56, Rory Walsh <rorywalsh@ear.ie> wrote:
>> >> >> That's great. Thanks.
>> >> >>
>> >> >> On 10 Apr 2014 22:44, "Andres Cabrera" <mantaraya36@gmail.com>
>> >> >> wrote:
>> >> >>>
>> >> >>> Currently only instrument breakpoints are implemented...
>> >> >>>
>> >> >>> Cheers,
>> >> >>> Andrés
>> >> >>>
>> >> >>>
>> >> >>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh <rorywalsh@ear.ie>
>> >> >>> wrote:
>> >> >>>>
>> >> >>>> Ok, that sounds good. To help get my head around this I might try
>> >> >>>> to
>> >> >>>> write a simple command line app that passes a breakpoint line
>> >> >>>> number
>> >> >>>> as a parameter, and then when it hits, it will print out the
>> >> >>>> values
>> >> >>>> of
>> >> >>>> each variable in that instrument. That would be a start.
>> >> >>>>
>> >> >>>> On 10 April 2014 22:29, Andres Cabrera <mantaraya36@gmail.com>
>> >> >>>> wrote:
>> >> >>>> > Not exactly.
>> >> >>>> >
>> >> >>>> > the function:
>> >> >>>> > csoundDebugGetInstrument(csound);
>> >> >>>> >
>> >> >>>> > Gives you a pointer to the currently active instrument (where
>> >> >>>> > the
>> >> >>>> > debugger
>> >> >>>> > interrupted execution). You can then get the information about
>> >> >>>> > the
>> >> >>>> > instrument instance (variables and time counters, p-fields,
>> >> >>>> > etc.)
>> >> >>>> > from
>> >> >>>> > it.
>> >> >>>> >
>> >> >>>> > The callback function is only called if a breakpoint is reached,
>> >> >>>> > which
>> >> >>>> > is
>> >> >>>> > checked inside csound's kperf function. There is a linked list
>> >> >>>> > of
>> >> >>>> > breakpoints (that is managed in a thread-safe way), which is
>> >> >>>> > traversed
>> >> >>>> > to
>> >> >>>> > check if the current instrument matches a breakpoint. For line
>> >> >>>> > breakpoints,
>> >> >>>> > what will need to happen is that for every opcode that is
>> >> >>>> > executed,
>> >> >>>> > it
>> >> >>>> > is
>> >> >>>> > checked whether it matches to a breakpoint line.
>> >> >>>> >
>> >> >>>> > Cheers,
>> >> >>>> > Andrés
>> >> >>>> >
>> >> >>>> >
>> >> >>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh <rorywalsh@ear.ie>
>> >> >>>> > wrote:
>> >> >>>> >>
>> >> >>>> >> So you grab the values for all the variables in a particular
>> >> >>>> >> line
>> >> >>>> >> each
>> >> >>>> >> time this callback function is hit? Am I reading that right?
>> >> >>>> >>
>> >> >>>> >> On 10 April 2014 22:10, Andres Cabrera <mantaraya36@gmail.com>
>> >> >>>> >> wrote:
>> >> >>>> >> > Hi,
>> >> >>>> >> >
>> >> >>>> >> > My breakpoint callback looks like this:
>> >> >>>> >> >
>> >> >>>> >> > void CsoundEngine::breakpointCallback(CSOUND *csound, int
>> >> >>>> >> > line,
>> >> >>>> >> > double
>> >> >>>> >> > instr, void *udata)
>> >> >>>> >> > {
>> >> >>>> >> >     qDebug() <<"breakpointCallback " << line << instr;
>> >> >>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>> >> >>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>> >> >>>> >> >     // Copy variable list
>> >> >>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>> >> >>>> >> >     cs->variableMutex.lock();
>> >> >>>> >> >     cs->m_varList.clear();
>> >> >>>> >> >     while (vp) {
>> >> >>>> >> >         if (vp->varName[0] != '#') {
>> >> >>>> >> >             QVariantList varDetails;
>> >> >>>> >> >             varDetails << vp->varName;
>> >> >>>> >> >             if (strcmp(vp->varType->varTypeName, "i") == 0
>> >> >>>> >> >                     || strcmp(vp->varType->varTypeName, "k")
>> >> >>>> >> > ==
>> >> >>>> >> > 0) {
>> >> >>>> >> >                 if (vp->memBlock) {
>> >> >>>> >> >                     varDetails << *((MYFLT *)vp->memBlock);
>> >> >>>> >> >                 } else {
>> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >> >>>> >> > vp->memBlockIndex;
>> >> >>>> >> >                     varDetails << QVariant(*varmem);
>> >> >>>> >> >                 }
>> >> >>>> >> >             } else if(strcmp(vp->varType->varTypeName, "S")
>> >> >>>> >> > ==
>> >> >>>> >> > 0) {
>> >> >>>> >> >                 if (vp->memBlock) {
>> >> >>>> >> >                     varDetails << *((char *)vp->memBlock);
>> >> >>>> >> >                 } else {
>> >> >>>> >> >                     char *varmem = (char *) (insds->lclbas +
>> >> >>>> >> > vp->memBlockIndex);
>> >> >>>> >> >                     varDetails << QVariant(varmem);
>> >> >>>> >> >                 }
>> >> >>>> >> >             } else if (strcmp(vp->varType->varTypeName, "a")
>> >> >>>> >> > ==
>> >> >>>> >> > 0) {
>> >> >>>> >> >                 if (vp->memBlock) {
>> >> >>>> >> >                     varDetails << *((MYFLT *)vp->memBlock) <<
>> >> >>>> >> > *((MYFLT
>> >> >>>> >> > *)vp->memBlock + 1)
>> >> >>>> >> >                                << *((MYFLT *)vp->memBlock +
>> >> >>>> >> > 2)<<
>> >> >>>> >> > *((MYFLT
>> >> >>>> >> > *)vp->memBlock + 3);
>> >> >>>> >> >                 } else {
>> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >> >>>> >> > vp->memBlockIndex;
>> >> >>>> >> >                     varDetails << QVariant(*varmem);
>> >> >>>> >> >                 }
>> >> >>>> >> >             } else {
>> >> >>>> >> >                 varDetails << QVariant();
>> >> >>>> >> >             }
>> >> >>>> >> >             varDetails << vp->varType->varTypeName;
>> >> >>>> >> >             cs->m_varList << varDetails;
>> >> >>>> >> >         }
>> >> >>>> >> >         vp = vp->next;
>> >> >>>> >> >     }
>> >> >>>> >> >     cs->variableMutex.unlock();
>> >> >>>> >> >
>> >> >>>> >> >     //Copy active instrument list
>> >> >>>> >> >     cs->instrumentMutex.lock();
>> >> >>>> >> >     cs->m_instrumentList.clear();
>> >> >>>> >> >     INSDS *in = insds;
>> >> >>>> >> >     while (in->prvact) {
>> >> >>>> >> >         in = in->prvact;
>> >> >>>> >> >     }
>> >> >>>> >> >
>> >> >>>> >> >     while (in) {
>> >> >>>> >> >         QVariantList instance;
>> >> >>>> >> >         instance << in->p1;
>> >> >>>> >> >         instance << QString("%1 %2").arg(in->p2).arg(in->p3);
>> >> >>>> >> >         instance << in->kcounter;
>> >> >>>> >> >         cs->m_instrumentList << instance;
>> >> >>>> >> >         in = in->nxtact;
>> >> >>>> >> >     }
>> >> >>>> >> >
>> >> >>>> >> >     cs->instrumentMutex.unlock();
>> >> >>>> >> >     emit cs->breakpointReached();
>> >> >>>> >> > }
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > And yes you can actually click the pause button and the
>> >> >>>> >> > debugger
>> >> >>>> >> > will
>> >> >>>> >> > stop
>> >> >>>> >> > and show you where it is, even if there is no breakpoint
>> >> >>>> >> > there.
>> >> >>>> >> >
>> >> >>>> >> > Cheers,
>> >> >>>> >> > Andrés
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>> >> >>>> >> > <rorywalsh@ear.ie>
>> >> >>>> >> > wrote:
>> >> >>>> >> >>
>> >> >>>> >> >> Thanks. And how would one query the value of a variable once
>> >> >>>> >> >> the
>> >> >>>> >> >> breakpoint is hit? How does one access that information from
>> >> >>>> >> >> the
>> >> >>>> >> >> Csound structure? Btw, your debugger interface in CsounsQT
>> >> >>>> >> >> looks
>> >> >>>> >> >> really top-class. I could hope to implement anything as
>> >> >>>> >> >> professional
>> >> >>>> >> >> as that, but I like the idea of being able to stop and query
>> >> >>>> >> >> variables
>> >> >>>> >> >> on the fly. Is this possible, your screen-shot seems to
>> >> >>>> >> >> indicate
>> >> >>>> >> >> so?
>> >> >>>> >> >> This will be so useful in teaching!
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >> On 10 April 2014 21:58, Andres Cabrera
>> >> >>>> >> >> <mantaraya36@gmail.com>
>> >> >>>> >> >> wrote:
>> >> >>>> >> >> > Also, since the breakpoint callback gets the CSOUND
>> >> >>>> >> >> > structure, it
>> >> >>>> >> >> > can
>> >> >>>> >> >> > get
>> >> >>>> >> >> > all of its information from there.
>> >> >>>> >> >> >
>> >> >>>> >> >> > Cheers,
>> >> >>>> >> >> > Andrés
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>> >> >>>> >> >> > <mantaraya36@gmail.com>
>> >> >>>> >> >> > wrote:
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Hi Rory,
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Essentially, your application could do something like:
>> >> >>>> >> >> >>
>> >> >>>> >> >> >>     int break_count = 0;
>> >> >>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>> >> >>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1,
>> >> >>>> >> >> >> p4\nendin\n");
>> >> >>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>> >> >>>> >> >> >>     csoundStart(csound);
>> >> >>>> >> >> >>     csoundDebuggerInit(csound);
>> >> >>>> >> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb, (void
>> >> >>>> >> >> >> *)
>> >> >>>> >> >> >> &break_count);
>> >> >>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>> >> >>>> >> >> >>
>> >> >>>> >> >> >>     for (i = 0; i < 1000; i++) {
>> >> >>>> >> >> >>         csoundPerformKsmps(csound);
>> >> >>>> >> >> >>     }
>> >> >>>> >> >> >>     CU_ASSERT(break_count == 1);
>> >> >>>> >> >> >>
>> >> >>>> >> >> >>     csoundDebuggerClean(csound);
>> >> >>>> >> >> >>     csoundDestroy(csound);
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Whenever the breakpoint is reached, the breakpoint
>> >> >>>> >> >> >> callback
>> >> >>>> >> >> >> is
>> >> >>>> >> >> >> called.
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Currently only instrument breakpoints are implemented
>> >> >>>> >> >> >> (i.e.
>> >> >>>> >> >> >> the
>> >> >>>> >> >> >> debugger
>> >> >>>> >> >> >> breaks when an instrument is active), but I also want to
>> >> >>>> >> >> >> add
>> >> >>>> >> >> >> line
>> >> >>>> >> >> >> breakpoints.
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> Cheers,
>> >> >>>> >> >> >> Andrés
>> >> >>>> >> >> >>
>> >> >>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>> >> >>>> >> >> >> <rorywalsh@ear.ie>
>> >> >>>> >> >> >> wrote:
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > Wow, this looks super cool Andres. I'm just looking
>> >> >>>> >> >> >> > through
>> >> >>>> >> >> >> > the
>> >> >>>> >> >> >> > code
>> >> >>>> >> >> >> > now. Do you have a basic example of setting this up?
>> >> >>>> >> >> >> > The
>> >> >>>> >> >> >> > CUnit
>> >> >>>> >> >> >> > stuff
>> >> >>>> >> >> >> > in that debugger test code you posted is confusing me.
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera
>> >> >>>> >> >> >> > <mantaraya36@gmail.com>
>> >> >>>> >> >> >> > wrote:
>> >> >>>> >> >> >> > > Hi,
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > The Csound debugger I'm working on is finally getting
>> >> >>>> >> >> >> > > to
>> >> >>>> >> >> >> > > a
>> >> >>>> >> >> >> > > useful
>> >> >>>> >> >> >> > > testing
>> >> >>>> >> >> >> > > stage.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > I've been doing the work in the csdebugger branch, if
>> >> >>>> >> >> >> > > you
>> >> >>>> >> >> >> > > have
>> >> >>>> >> >> >> > > time,
>> >> >>>> >> >> >> > > please
>> >> >>>> >> >> >> > > have a look.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > To build the debugger, you will need to add to cmake:
>> >> >>>> >> >> >> > > -DBUILD_DEBUGGER=1
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > You will find some simple tests of the API here:
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > I have written a debugger front-end within CsoundQt,
>> >> >>>> >> >> >> > > which
>> >> >>>> >> >> >> > > you
>> >> >>>> >> >> >> > > are
>> >> >>>> >> >> >> > > welcome
>> >> >>>> >> >> >> > > to try out too:
>> >> >>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Some internal details:
>> >> >>>> >> >> >> > > The debugger interface is found at:
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Although the debugger functions are part of the API,
>> >> >>>> >> >> >> > > I
>> >> >>>> >> >> >> > > think
>> >> >>>> >> >> >> > > it's
>> >> >>>> >> >> >> > > cleaner to
>> >> >>>> >> >> >> > > have them in their own header, as they are also a
>> >> >>>> >> >> >> > > compile
>> >> >>>> >> >> >> > > time
>> >> >>>> >> >> >> > > option.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Because the changes are somewhat invasive, I chose to
>> >> >>>> >> >> >> > > make
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > kperf
>> >> >>>> >> >> >> > > function a pointer within the CSOUND struct that
>> >> >>>> >> >> >> > > defaults to
>> >> >>>> >> >> >> > > nodebug.
>> >> >>>> >> >> >> > > When
>> >> >>>> >> >> >> > > the debugger is initialized the kperf function
>> >> >>>> >> >> >> > > pointer
>> >> >>>> >> >> >> > > is
>> >> >>>> >> >> >> > > switched
>> >> >>>> >> >> >> > > to
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > debug version, and switched back when the debugger is
>> >> >>>> >> >> >> > > disabled
>> >> >>>> >> >> >> > > csoundDebuggerInit() and csoundDebuggerClean()
>> >> >>>> >> >> >> > > functions.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > When a breakpoint is reached, a callback function
>> >> >>>> >> >> >> > > that
>> >> >>>> >> >> >> > > has
>> >> >>>> >> >> >> > > been
>> >> >>>> >> >> >> > > registered
>> >> >>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound,
>> >> >>>> >> >> >> > > breakpoint_cb_t
>> >> >>>> >> >> >> > > bkpt_cb,
>> >> >>>> >> >> >> > > void *userdata) is called.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > When a breakpoint is reached, after the callback is
>> >> >>>> >> >> >> > > called,
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > kperf
>> >> >>>> >> >> >> > > function continues running as usual, providing empty
>> >> >>>> >> >> >> > > buffers
>> >> >>>> >> >> >> > > to
>> >> >>>> >> >> >> > > the
>> >> >>>> >> >> >> > > audio
>> >> >>>> >> >> >> > > hardware, and not incrementing the time counters in
>> >> >>>> >> >> >> > > musmon.
>> >> >>>> >> >> >> > > When
>> >> >>>> >> >> >> > > a
>> >> >>>> >> >> >> > > continue
>> >> >>>> >> >> >> > > is reached, the graph traversing continues where it
>> >> >>>> >> >> >> > > left
>> >> >>>> >> >> >> > > off.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > There are probably still a few bugs, but it's now
>> >> >>>> >> >> >> > > working on
>> >> >>>> >> >> >> > > my
>> >> >>>> >> >> >> > > simple
>> >> >>>> >> >> >> > > tests.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Any ideas, thoughts and suggestions are very welcome.
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > Cheers,
>> >> >>>> >> >> >> > > Andrés
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > ------------------------------------------------------------------------------
>> >> >>>> >> >> >> > > Put Bad Developers to Shame
>> >> >>>> >> >> >> > > Dominate Development with Jenkins Continuous
>> >> >>>> >> >> >> > > Integration
>> >> >>>> >> >> >> > > Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> >> > > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> >> > > _______________________________________________
>> >> >>>> >> >> >> > > Csound-devel mailing list
>> >> >>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >> >> > >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > ------------------------------------------------------------------------------
>> >> >>>> >> >> >> > Put Bad Developers to Shame
>> >> >>>> >> >> >> > Dominate Development with Jenkins Continuous
>> >> >>>> >> >> >> > Integration
>> >> >>>> >> >> >> > Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> >> > _______________________________________________
>> >> >>>> >> >> >> > Csound-devel mailing list
>> >> >>>> >> >> >> > Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> >> >
>> >> >>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >> >>
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> >
>> >> >>>> >> >> > ------------------------------------------------------------------------------
>> >> >>>> >> >> > Put Bad Developers to Shame
>> >> >>>> >> >> > Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> >> > Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> > _______________________________________________
>> >> >>>> >> >> > Csound-devel mailing list
>> >> >>>> >> >> > Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >> >
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >>
>> >> >>>> >> >> ------------------------------------------------------------------------------
>> >> >>>> >> >> Put Bad Developers to Shame
>> >> >>>> >> >> Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> >> Continuously Automate Build, Test & Deployment
>> >> >>>> >> >> Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> >> _______________________________________________
>> >> >>>> >> >> Csound-devel mailing list
>> >> >>>> >> >> Csound-devel@lists.sourceforge.net
>> >> >>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> >
>> >> >>>> >> > ------------------------------------------------------------------------------
>> >> >>>> >> > Put Bad Developers to Shame
>> >> >>>> >> > Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> > Continuously Automate Build, Test & Deployment
>> >> >>>> >> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> > _______________________________________________
>> >> >>>> >> > Csound-devel mailing list
>> >> >>>> >> > Csound-devel@lists.sourceforge.net
>> >> >>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >> >
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >>
>> >> >>>> >> ------------------------------------------------------------------------------
>> >> >>>> >> Put Bad Developers to Shame
>> >> >>>> >> Dominate Development with Jenkins Continuous Integration
>> >> >>>> >> Continuously Automate Build, Test & Deployment
>> >> >>>> >> Start a new project now. Try Jenkins in the cloud.
>> >> >>>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> >> _______________________________________________
>> >> >>>> >> Csound-devel mailing list
>> >> >>>> >> Csound-devel@lists.sourceforge.net
>> >> >>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> >
>> >> >>>> > ------------------------------------------------------------------------------
>> >> >>>> > Put Bad Developers to Shame
>> >> >>>> > Dominate Development with Jenkins Continuous Integration
>> >> >>>> > Continuously Automate Build, Test & Deployment
>> >> >>>> > Start a new project now. Try Jenkins in the cloud.
>> >> >>>> > http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> > _______________________________________________
>> >> >>>> > Csound-devel mailing list
>> >> >>>> > Csound-devel@lists.sourceforge.net
>> >> >>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>> >
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>> ------------------------------------------------------------------------------
>> >> >>>> Put Bad Developers to Shame
>> >> >>>> Dominate Development with Jenkins Continuous Integration
>> >> >>>> Continuously Automate Build, Test & Deployment
>> >> >>>> Start a new project now. Try Jenkins in the cloud.
>> >> >>>> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>>> _______________________________________________
>> >> >>>> Csound-devel mailing list
>> >> >>>> Csound-devel@lists.sourceforge.net
>> >> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> ------------------------------------------------------------------------------
>> >> >>> Put Bad Developers to Shame
>> >> >>> Dominate Development with Jenkins Continuous Integration
>> >> >>> Continuously Automate Build, Test & Deployment
>> >> >>> Start a new project now. Try Jenkins in the cloud.
>> >> >>> http://p.sf.net/sfu/13600_Cloudbees
>> >> >>> _______________________________________________
>> >> >>> Csound-devel mailing list
>> >> >>> Csound-devel@lists.sourceforge.net
>> >> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >> >>>
>> >> >>
>> >>
>> >>
>> >>
>> >> ------------------------------------------------------------------------------
>> >> Put Bad Developers to Shame
>> >> Dominate Development with Jenkins Continuous Integration
>> >> Continuously Automate Build, Test & Deployment
>> >> Start a new project now. Try Jenkins in the cloud.
>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >> _______________________________________________
>> >> Csound-devel mailing list
>> >> Csound-devel@lists.sourceforge.net
>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>> >
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Put Bad Developers to Shame
>> > Dominate Development with Jenkins Continuous Integration
>> > Continuously Automate Build, Test & Deployment
>> > Start a new project now. Try Jenkins in the cloud.
>> > http://p.sf.net/sfu/13600_Cloudbees
>> > _______________________________________________
>> > Csound-devel mailing list
>> > Csound-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel



------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-11 09:05
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
I assume that since I am getting no build or linker errors that there
is something amiss in my code?

On 11 April 2014 01:51, Rory Walsh  wrote:
> No. None at all?
>
> On 11 Apr 2014 00:36, "Andres Cabrera"  wrote:
>>
>> Are you getting build errors?
>>
>> Cheers,
>> Andrés
>>
>>
>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera 
>> wrote:
>>>
>>> Did you checkout the csdebugger branch for csound and run cmake with
>>> -DBUILD_DEBUGGER=1?
>>>
>>> Cheers,
>>> Andrés
>>>
>>>
>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh  wrote:
>>>>
>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>>>
>>>> On 11 April 2014 00:26, Andres Cabrera  wrote:
>>>> > easier to do:
>>>> >
>>>> > cmake -DBUILD_DEBUGGER=1
>>>> >
>>>> > Cheers,
>>>> > Andrés
>>>> >
>>>> >
>>>> > On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh  wrote:
>>>> >>
>>>> >> I'm probably adding the wrong lines to cmakelists.txt?
>>>> >>
>>>> >> set (BUILD_DEBUGGER 1)
>>>> >>
>>>> >> Is that right?
>>>> >>
>>>> >> On 11 April 2014 00:06, Andres Cabrera  wrote:
>>>> >> > Yes it would :)
>>>> >> >
>>>> >> > Cheers,
>>>> >> > Andrés
>>>> >> >
>>>> >> >
>>>> >> > On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh 
>>>> >> > wrote:
>>>> >> >>
>>>> >> >> It would help if I built with the debugger enabled :)
>>>> >> >>
>>>> >> >> On 11 April 2014 00:01, Rory Walsh  wrote:
>>>> >> >> > I'm using a csd file instead of compiling orcs and scores, is
>>>> >> >> > this
>>>> >> >> > allowed? My breakpoint callback is never being hit. What am I
>>>> >> >> > missing?
>>>> >> >> >
>>>> >> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>>>> >> >> > *userdata);
>>>> >> >> >
>>>> >> >> > int main(int argc, char *argv[])
>>>> >> >> > {
>>>> >> >> >     int break_count = 0;
>>>> >> >> >     CSOUND* csound = csoundCreate(NULL);
>>>> >> >> >     csoundCompile(csound,argc,argv);
>>>> >> >> >     csoundStart(csound);
>>>> >> >> >     csoundDebuggerInit(csound);
>>>> >> >> >     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>>>> >> >> > &break_count);
>>>> >> >> >     csoundSetInstrumentBreakpoint(csound, 1, 0);
>>>> >> >> >
>>>> >> >> >     while (csoundPerformKsmps(csound)==0);
>>>> >> >> >
>>>> >> >> >     csoundDebuggerClean(csound);
>>>> >> >> >     csoundDestroy(csound);
>>>> >> >> > }
>>>> >> >> >
>>>> >> >> > //this never gets called.
>>>> >> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>>>> >> >> > *userdata)
>>>> >> >> > {
>>>> >> >> >     int *count = (int *) userdata;
>>>> >> >> >     printf("bkpt line %i instr %f\n", line, instr);
>>>> >> >> >     *count = *count + 1;
>>>> >> >> > };
>>>> >> >> >
>>>> >> >> > On 10 April 2014 22:56, Rory Walsh  wrote:
>>>> >> >> >> That's great. Thanks.
>>>> >> >> >>
>>>> >> >> >> On 10 Apr 2014 22:44, "Andres Cabrera" 
>>>> >> >> >> wrote:
>>>> >> >> >>>
>>>> >> >> >>> Currently only instrument breakpoints are implemented...
>>>> >> >> >>>
>>>> >> >> >>> Cheers,
>>>> >> >> >>> Andrés
>>>> >> >> >>>
>>>> >> >> >>>
>>>> >> >> >>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh 
>>>> >> >> >>> wrote:
>>>> >> >> >>>>
>>>> >> >> >>>> Ok, that sounds good. To help get my head around this I might
>>>> >> >> >>>> try
>>>> >> >> >>>> to
>>>> >> >> >>>> write a simple command line app that passes a breakpoint line
>>>> >> >> >>>> number
>>>> >> >> >>>> as a parameter, and then when it hits, it will print out the
>>>> >> >> >>>> values
>>>> >> >> >>>> of
>>>> >> >> >>>> each variable in that instrument. That would be a start.
>>>> >> >> >>>>
>>>> >> >> >>>> On 10 April 2014 22:29, Andres Cabrera
>>>> >> >> >>>> 
>>>> >> >> >>>> wrote:
>>>> >> >> >>>> > Not exactly.
>>>> >> >> >>>> >
>>>> >> >> >>>> > the function:
>>>> >> >> >>>> > csoundDebugGetInstrument(csound);
>>>> >> >> >>>> >
>>>> >> >> >>>> > Gives you a pointer to the currently active instrument
>>>> >> >> >>>> > (where
>>>> >> >> >>>> > the
>>>> >> >> >>>> > debugger
>>>> >> >> >>>> > interrupted execution). You can then get the information
>>>> >> >> >>>> > about
>>>> >> >> >>>> > the
>>>> >> >> >>>> > instrument instance (variables and time counters, p-fields,
>>>> >> >> >>>> > etc.)
>>>> >> >> >>>> > from
>>>> >> >> >>>> > it.
>>>> >> >> >>>> >
>>>> >> >> >>>> > The callback function is only called if a breakpoint is
>>>> >> >> >>>> > reached,
>>>> >> >> >>>> > which
>>>> >> >> >>>> > is
>>>> >> >> >>>> > checked inside csound's kperf function. There is a linked
>>>> >> >> >>>> > list
>>>> >> >> >>>> > of
>>>> >> >> >>>> > breakpoints (that is managed in a thread-safe way), which
>>>> >> >> >>>> > is
>>>> >> >> >>>> > traversed
>>>> >> >> >>>> > to
>>>> >> >> >>>> > check if the current instrument matches a breakpoint. For
>>>> >> >> >>>> > line
>>>> >> >> >>>> > breakpoints,
>>>> >> >> >>>> > what will need to happen is that for every opcode that is
>>>> >> >> >>>> > executed,
>>>> >> >> >>>> > it
>>>> >> >> >>>> > is
>>>> >> >> >>>> > checked whether it matches to a breakpoint line.
>>>> >> >> >>>> >
>>>> >> >> >>>> > Cheers,
>>>> >> >> >>>> > Andrés
>>>> >> >> >>>> >
>>>> >> >> >>>> >
>>>> >> >> >>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>>> >> >> >>>> > 
>>>> >> >> >>>> > wrote:
>>>> >> >> >>>> >>
>>>> >> >> >>>> >> So you grab the values for all the variables in a
>>>> >> >> >>>> >> particular
>>>> >> >> >>>> >> line
>>>> >> >> >>>> >> each
>>>> >> >> >>>> >> time this callback function is hit? Am I reading that
>>>> >> >> >>>> >> right?
>>>> >> >> >>>> >>
>>>> >> >> >>>> >> On 10 April 2014 22:10, Andres Cabrera
>>>> >> >> >>>> >> 
>>>> >> >> >>>> >> wrote:
>>>> >> >> >>>> >> > Hi,
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> > My breakpoint callback looks like this:
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> > void CsoundEngine::breakpointCallback(CSOUND *csound,
>>>> >> >> >>>> >> > int
>>>> >> >> >>>> >> > line,
>>>> >> >> >>>> >> > double
>>>> >> >> >>>> >> > instr, void *udata)
>>>> >> >> >>>> >> > {
>>>> >> >> >>>> >> >     qDebug() <<"breakpointCallback " << line << instr;
>>>> >> >> >>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>>>> >> >> >>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>>>> >> >> >>>> >> >     // Copy variable list
>>>> >> >> >>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>>>> >> >> >>>> >> >     cs->variableMutex.lock();
>>>> >> >> >>>> >> >     cs->m_varList.clear();
>>>> >> >> >>>> >> >     while (vp) {
>>>> >> >> >>>> >> >         if (vp->varName[0] != '#') {
>>>> >> >> >>>> >> >             QVariantList varDetails;
>>>> >> >> >>>> >> >             varDetails << vp->varName;
>>>> >> >> >>>> >> >             if (strcmp(vp->varType->varTypeName, "i") ==
>>>> >> >> >>>> >> > 0
>>>> >> >> >>>> >> >                     || strcmp(vp->varType->varTypeName,
>>>> >> >> >>>> >> > "k")
>>>> >> >> >>>> >> > ==
>>>> >> >> >>>> >> > 0) {
>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>>> >> >> >>>> >> >                     varDetails << *((MYFLT
>>>> >> >> >>>> >> > *)vp->memBlock);
>>>> >> >> >>>> >> >                 } else {
>>>> >> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>>>> >> >> >>>> >> > vp->memBlockIndex;
>>>> >> >> >>>> >> >                     varDetails << QVariant(*varmem);
>>>> >> >> >>>> >> >                 }
>>>> >> >> >>>> >> >             } else if(strcmp(vp->varType->varTypeName,
>>>> >> >> >>>> >> > "S")
>>>> >> >> >>>> >> > ==
>>>> >> >> >>>> >> > 0) {
>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>>> >> >> >>>> >> >                     varDetails << *((char
>>>> >> >> >>>> >> > *)vp->memBlock);
>>>> >> >> >>>> >> >                 } else {
>>>> >> >> >>>> >> >                     char *varmem = (char *)
>>>> >> >> >>>> >> > (insds->lclbas +
>>>> >> >> >>>> >> > vp->memBlockIndex);
>>>> >> >> >>>> >> >                     varDetails << QVariant(varmem);
>>>> >> >> >>>> >> >                 }
>>>> >> >> >>>> >> >             } else if (strcmp(vp->varType->varTypeName,
>>>> >> >> >>>> >> > "a")
>>>> >> >> >>>> >> > ==
>>>> >> >> >>>> >> > 0) {
>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>>> >> >> >>>> >> >                     varDetails << *((MYFLT
>>>> >> >> >>>> >> > *)vp->memBlock) <<
>>>> >> >> >>>> >> > *((MYFLT
>>>> >> >> >>>> >> > *)vp->memBlock + 1)
>>>> >> >> >>>> >> >                                << *((MYFLT
>>>> >> >> >>>> >> > *)vp->memBlock +
>>>> >> >> >>>> >> > 2)<<
>>>> >> >> >>>> >> > *((MYFLT
>>>> >> >> >>>> >> > *)vp->memBlock + 3);
>>>> >> >> >>>> >> >                 } else {
>>>> >> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>>>> >> >> >>>> >> > vp->memBlockIndex;
>>>> >> >> >>>> >> >                     varDetails << QVariant(*varmem);
>>>> >> >> >>>> >> >                 }
>>>> >> >> >>>> >> >             } else {
>>>> >> >> >>>> >> >                 varDetails << QVariant();
>>>> >> >> >>>> >> >             }
>>>> >> >> >>>> >> >             varDetails << vp->varType->varTypeName;
>>>> >> >> >>>> >> >             cs->m_varList << varDetails;
>>>> >> >> >>>> >> >         }
>>>> >> >> >>>> >> >         vp = vp->next;
>>>> >> >> >>>> >> >     }
>>>> >> >> >>>> >> >     cs->variableMutex.unlock();
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> >     //Copy active instrument list
>>>> >> >> >>>> >> >     cs->instrumentMutex.lock();
>>>> >> >> >>>> >> >     cs->m_instrumentList.clear();
>>>> >> >> >>>> >> >     INSDS *in = insds;
>>>> >> >> >>>> >> >     while (in->prvact) {
>>>> >> >> >>>> >> >         in = in->prvact;
>>>> >> >> >>>> >> >     }
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> >     while (in) {
>>>> >> >> >>>> >> >         QVariantList instance;
>>>> >> >> >>>> >> >         instance << in->p1;
>>>> >> >> >>>> >> >         instance << QString("%1
>>>> >> >> >>>> >> > %2").arg(in->p2).arg(in->p3);
>>>> >> >> >>>> >> >         instance << in->kcounter;
>>>> >> >> >>>> >> >         cs->m_instrumentList << instance;
>>>> >> >> >>>> >> >         in = in->nxtact;
>>>> >> >> >>>> >> >     }
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> >     cs->instrumentMutex.unlock();
>>>> >> >> >>>> >> >     emit cs->breakpointReached();
>>>> >> >> >>>> >> > }
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> > And yes you can actually click the pause button and the
>>>> >> >> >>>> >> > debugger
>>>> >> >> >>>> >> > will
>>>> >> >> >>>> >> > stop
>>>> >> >> >>>> >> > and show you where it is, even if there is no breakpoint
>>>> >> >> >>>> >> > there.
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> > Cheers,
>>>> >> >> >>>> >> > Andrés
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>>> >> >> >>>> >> > 
>>>> >> >> >>>> >> > wrote:
>>>> >> >> >>>> >> >>
>>>> >> >> >>>> >> >> Thanks. And how would one query the value of a variable
>>>> >> >> >>>> >> >> once
>>>> >> >> >>>> >> >> the
>>>> >> >> >>>> >> >> breakpoint is hit? How does one access that information
>>>> >> >> >>>> >> >> from
>>>> >> >> >>>> >> >> the
>>>> >> >> >>>> >> >> Csound structure? Btw, your debugger interface in
>>>> >> >> >>>> >> >> CsounsQT
>>>> >> >> >>>> >> >> looks
>>>> >> >> >>>> >> >> really top-class. I could hope to implement anything as
>>>> >> >> >>>> >> >> professional
>>>> >> >> >>>> >> >> as that, but I like the idea of being able to stop and
>>>> >> >> >>>> >> >> query
>>>> >> >> >>>> >> >> variables
>>>> >> >> >>>> >> >> on the fly. Is this possible, your screen-shot seems to
>>>> >> >> >>>> >> >> indicate
>>>> >> >> >>>> >> >> so?
>>>> >> >> >>>> >> >> This will be so useful in teaching!
>>>> >> >> >>>> >> >>
>>>> >> >> >>>> >> >>
>>>> >> >> >>>> >> >> On 10 April 2014 21:58, Andres Cabrera
>>>> >> >> >>>> >> >> 
>>>> >> >> >>>> >> >> wrote:
>>>> >> >> >>>> >> >> > Also, since the breakpoint callback gets the CSOUND
>>>> >> >> >>>> >> >> > structure, it
>>>> >> >> >>>> >> >> > can
>>>> >> >> >>>> >> >> > get
>>>> >> >> >>>> >> >> > all of its information from there.
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >> > Cheers,
>>>> >> >> >>>> >> >> > Andrés
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>>>> >> >> >>>> >> >> > 
>>>> >> >> >>>> >> >> > wrote:
>>>> >> >> >>>> >> >> >>
>>>> >> >> >>>> >> >> >> Hi Rory,
>>>> >> >> >>>> >> >> >>
>>>> >> >> >>>> >> >> >> Essentially, your application could do something
>>>> >> >> >>>> >> >> >> like:
>>>> >> >> >>>> >> >> >>
>>>> >> >> >>>> >> >> >>     int break_count = 0;
>>>> >> >> >>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>>>> >> >> >>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1,
>>>> >> >> >>>> >> >> >> p4\nendin\n");
>>>> >> >> >>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>>>> >> >> >>>> >> >> >>     csoundStart(csound);
>>>> >> >> >>>> >> >> >>     csoundDebuggerInit(csound);
>>>> >> >> >>>> >> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb,
>>>> >> >> >>>> >> >> >> (void
>>>> >> >> >>>> >> >> >> *)
>>>> >> >> >>>> >> >> >> &break_count);
>>>> >> >> >>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>>>> >> >> >>>> >> >> >>
>>>> >> >> >>>> >> >> >>     for (i = 0; i < 1000; i++) {
>>>> >> >> >>>> >> >> >>         csoundPerformKsmps(csound);
>>>> >> >> >>>> >> >> >>     }
>>>> >> >> >>>> >> >> >>     CU_ASSERT(break_count == 1);
>>>> >> >> >>>> >> >> >>
>>>> >> >> >>>> >> >> >>     csoundDebuggerClean(csound);
>>>> >> >> >>>> >> >> >>     csoundDestroy(csound);
>>>> >> >> >>>> >> >> >>
>>>> >> >> >>>> >> >> >> Whenever the breakpoint is reached, the breakpoint
>>>> >> >> >>>> >> >> >> callback
>>>> >> >> >>>> >> >> >> is
>>>> >> >> >>>> >> >> >> called.
>>>> >> >> >>>> >> >> >>
>>>> >> >> >>>> >> >> >> Currently only instrument breakpoints are
>>>> >> >> >>>> >> >> >> implemented
>>>> >> >> >>>> >> >> >> (i.e.
>>>> >> >> >>>> >> >> >> the
>>>> >> >> >>>> >> >> >> debugger
>>>> >> >> >>>> >> >> >> breaks when an instrument is active), but I also
>>>> >> >> >>>> >> >> >> want to
>>>> >> >> >>>> >> >> >> add
>>>> >> >> >>>> >> >> >> line
>>>> >> >> >>>> >> >> >> breakpoints.
>>>> >> >> >>>> >> >> >>
>>>> >> >> >>>> >> >> >> Cheers,
>>>> >> >> >>>> >> >> >> Andrés
>>>> >> >> >>>> >> >> >>
>>>> >> >> >>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>>> >> >> >>>> >> >> >> 
>>>> >> >> >>>> >> >> >> wrote:
>>>> >> >> >>>> >> >> >> >
>>>> >> >> >>>> >> >> >> > Wow, this looks super cool Andres. I'm just
>>>> >> >> >>>> >> >> >> > looking
>>>> >> >> >>>> >> >> >> > through
>>>> >> >> >>>> >> >> >> > the
>>>> >> >> >>>> >> >> >> > code
>>>> >> >> >>>> >> >> >> > now. Do you have a basic example of setting this
>>>> >> >> >>>> >> >> >> > up?
>>>> >> >> >>>> >> >> >> > The
>>>> >> >> >>>> >> >> >> > CUnit
>>>> >> >> >>>> >> >> >> > stuff
>>>> >> >> >>>> >> >> >> > in that debugger test code you posted is confusing
>>>> >> >> >>>> >> >> >> > me.
>>>> >> >> >>>> >> >> >> >
>>>> >> >> >>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera
>>>> >> >> >>>> >> >> >> > 
>>>> >> >> >>>> >> >> >> > wrote:
>>>> >> >> >>>> >> >> >> > > Hi,
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > The Csound debugger I'm working on is finally
>>>> >> >> >>>> >> >> >> > > getting
>>>> >> >> >>>> >> >> >> > > to
>>>> >> >> >>>> >> >> >> > > a
>>>> >> >> >>>> >> >> >> > > useful
>>>> >> >> >>>> >> >> >> > > testing
>>>> >> >> >>>> >> >> >> > > stage.
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > I've been doing the work in the csdebugger
>>>> >> >> >>>> >> >> >> > > branch, if
>>>> >> >> >>>> >> >> >> > > you
>>>> >> >> >>>> >> >> >> > > have
>>>> >> >> >>>> >> >> >> > > time,
>>>> >> >> >>>> >> >> >> > > please
>>>> >> >> >>>> >> >> >> > > have a look.
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > To build the debugger, you will need to add to
>>>> >> >> >>>> >> >> >> > > cmake:
>>>> >> >> >>>> >> >> >> > > -DBUILD_DEBUGGER=1
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > You will find some simple tests of the API here:
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > I have written a debugger front-end within
>>>> >> >> >>>> >> >> >> > > CsoundQt,
>>>> >> >> >>>> >> >> >> > > which
>>>> >> >> >>>> >> >> >> > > you
>>>> >> >> >>>> >> >> >> > > are
>>>> >> >> >>>> >> >> >> > > welcome
>>>> >> >> >>>> >> >> >> > > to try out too:
>>>> >> >> >>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > Some internal details:
>>>> >> >> >>>> >> >> >> > > The debugger interface is found at:
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > Although the debugger functions are part of the
>>>> >> >> >>>> >> >> >> > > API,
>>>> >> >> >>>> >> >> >> > > I
>>>> >> >> >>>> >> >> >> > > think
>>>> >> >> >>>> >> >> >> > > it's
>>>> >> >> >>>> >> >> >> > > cleaner to
>>>> >> >> >>>> >> >> >> > > have them in their own header, as they are also
>>>> >> >> >>>> >> >> >> > > a
>>>> >> >> >>>> >> >> >> > > compile
>>>> >> >> >>>> >> >> >> > > time
>>>> >> >> >>>> >> >> >> > > option.
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > Because the changes are somewhat invasive, I
>>>> >> >> >>>> >> >> >> > > chose to
>>>> >> >> >>>> >> >> >> > > make
>>>> >> >> >>>> >> >> >> > > the
>>>> >> >> >>>> >> >> >> > > kperf
>>>> >> >> >>>> >> >> >> > > function a pointer within the CSOUND struct that
>>>> >> >> >>>> >> >> >> > > defaults to
>>>> >> >> >>>> >> >> >> > > nodebug.
>>>> >> >> >>>> >> >> >> > > When
>>>> >> >> >>>> >> >> >> > > the debugger is initialized the kperf function
>>>> >> >> >>>> >> >> >> > > pointer
>>>> >> >> >>>> >> >> >> > > is
>>>> >> >> >>>> >> >> >> > > switched
>>>> >> >> >>>> >> >> >> > > to
>>>> >> >> >>>> >> >> >> > > the
>>>> >> >> >>>> >> >> >> > > debug version, and switched back when the
>>>> >> >> >>>> >> >> >> > > debugger is
>>>> >> >> >>>> >> >> >> > > disabled
>>>> >> >> >>>> >> >> >> > > csoundDebuggerInit() and csoundDebuggerClean()
>>>> >> >> >>>> >> >> >> > > functions.
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > When a breakpoint is reached, a callback
>>>> >> >> >>>> >> >> >> > > function
>>>> >> >> >>>> >> >> >> > > that
>>>> >> >> >>>> >> >> >> > > has
>>>> >> >> >>>> >> >> >> > > been
>>>> >> >> >>>> >> >> >> > > registered
>>>> >> >> >>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound,
>>>> >> >> >>>> >> >> >> > > breakpoint_cb_t
>>>> >> >> >>>> >> >> >> > > bkpt_cb,
>>>> >> >> >>>> >> >> >> > > void *userdata) is called.
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > When a breakpoint is reached, after the callback
>>>> >> >> >>>> >> >> >> > > is
>>>> >> >> >>>> >> >> >> > > called,
>>>> >> >> >>>> >> >> >> > > the
>>>> >> >> >>>> >> >> >> > > kperf
>>>> >> >> >>>> >> >> >> > > function continues running as usual, providing
>>>> >> >> >>>> >> >> >> > > empty
>>>> >> >> >>>> >> >> >> > > buffers
>>>> >> >> >>>> >> >> >> > > to
>>>> >> >> >>>> >> >> >> > > the
>>>> >> >> >>>> >> >> >> > > audio
>>>> >> >> >>>> >> >> >> > > hardware, and not incrementing the time counters
>>>> >> >> >>>> >> >> >> > > in
>>>> >> >> >>>> >> >> >> > > musmon.
>>>> >> >> >>>> >> >> >> > > When
>>>> >> >> >>>> >> >> >> > > a
>>>> >> >> >>>> >> >> >> > > continue
>>>> >> >> >>>> >> >> >> > > is reached, the graph traversing continues where
>>>> >> >> >>>> >> >> >> > > it
>>>> >> >> >>>> >> >> >> > > left
>>>> >> >> >>>> >> >> >> > > off.
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > There are probably still a few bugs, but it's
>>>> >> >> >>>> >> >> >> > > now
>>>> >> >> >>>> >> >> >> > > working on
>>>> >> >> >>>> >> >> >> > > my
>>>> >> >> >>>> >> >> >> > > simple
>>>> >> >> >>>> >> >> >> > > tests.
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > Any ideas, thoughts and suggestions are very
>>>> >> >> >>>> >> >> >> > > welcome.
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > Cheers,
>>>> >> >> >>>> >> >> >> > > Andrés
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > ------------------------------------------------------------------------------
>>>> >> >> >>>> >> >> >> > > Put Bad Developers to Shame
>>>> >> >> >>>> >> >> >> > > Dominate Development with Jenkins Continuous
>>>> >> >> >>>> >> >> >> > > Integration
>>>> >> >> >>>> >> >> >> > > Continuously Automate Build, Test & Deployment
>>>> >> >> >>>> >> >> >> > > Start a new project now. Try Jenkins in the
>>>> >> >> >>>> >> >> >> > > cloud.
>>>> >> >> >>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >>>> >> >> >> > > _______________________________________________
>>>> >> >> >>>> >> >> >> > > Csound-devel mailing list
>>>> >> >> >>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >>>> >> >> >> > >
>>>> >> >> >>>> >> >> >> >
>>>> >> >> >>>> >> >> >> >
>>>> >> >> >>>> >> >> >> >
>>>> >> >> >>>> >> >> >> >
>>>> >> >> >>>> >> >> >> >
>>>> >> >> >>>> >> >> >> >
>>>> >> >> >>>> >> >> >> >
>>>> >> >> >>>> >> >> >> >
>>>> >> >> >>>> >> >> >> > ------------------------------------------------------------------------------
>>>> >> >> >>>> >> >> >> > Put Bad Developers to Shame
>>>> >> >> >>>> >> >> >> > Dominate Development with Jenkins Continuous
>>>> >> >> >>>> >> >> >> > Integration
>>>> >> >> >>>> >> >> >> > Continuously Automate Build, Test & Deployment
>>>> >> >> >>>> >> >> >> > Start a new project now. Try Jenkins in the cloud.
>>>> >> >> >>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >>>> >> >> >> > _______________________________________________
>>>> >> >> >>>> >> >> >> > Csound-devel mailing list
>>>> >> >> >>>> >> >> >> > Csound-devel@lists.sourceforge.net
>>>> >> >> >>>> >> >> >> >
>>>> >> >> >>>> >> >> >> >
>>>> >> >> >>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >>>> >> >> >>
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >> > ------------------------------------------------------------------------------
>>>> >> >> >>>> >> >> > Put Bad Developers to Shame
>>>> >> >> >>>> >> >> > Dominate Development with Jenkins Continuous
>>>> >> >> >>>> >> >> > Integration
>>>> >> >> >>>> >> >> > Continuously Automate Build, Test & Deployment
>>>> >> >> >>>> >> >> > Start a new project now. Try Jenkins in the cloud.
>>>> >> >> >>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >>>> >> >> > _______________________________________________
>>>> >> >> >>>> >> >> > Csound-devel mailing list
>>>> >> >> >>>> >> >> > Csound-devel@lists.sourceforge.net
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >>>> >> >> >
>>>> >> >> >>>> >> >>
>>>> >> >> >>>> >> >>
>>>> >> >> >>>> >> >>
>>>> >> >> >>>> >> >>
>>>> >> >> >>>> >> >>
>>>> >> >> >>>> >> >>
>>>> >> >> >>>> >> >>
>>>> >> >> >>>> >> >> ------------------------------------------------------------------------------
>>>> >> >> >>>> >> >> Put Bad Developers to Shame
>>>> >> >> >>>> >> >> Dominate Development with Jenkins Continuous
>>>> >> >> >>>> >> >> Integration
>>>> >> >> >>>> >> >> Continuously Automate Build, Test & Deployment
>>>> >> >> >>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>>> >> >> >>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >>>> >> >> _______________________________________________
>>>> >> >> >>>> >> >> Csound-devel mailing list
>>>> >> >> >>>> >> >> Csound-devel@lists.sourceforge.net
>>>> >> >> >>>> >> >>
>>>> >> >> >>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> > ------------------------------------------------------------------------------
>>>> >> >> >>>> >> > Put Bad Developers to Shame
>>>> >> >> >>>> >> > Dominate Development with Jenkins Continuous Integration
>>>> >> >> >>>> >> > Continuously Automate Build, Test & Deployment
>>>> >> >> >>>> >> > Start a new project now. Try Jenkins in the cloud.
>>>> >> >> >>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >>>> >> > _______________________________________________
>>>> >> >> >>>> >> > Csound-devel mailing list
>>>> >> >> >>>> >> > Csound-devel@lists.sourceforge.net
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >>>> >> >
>>>> >> >> >>>> >>
>>>> >> >> >>>> >>
>>>> >> >> >>>> >>
>>>> >> >> >>>> >>
>>>> >> >> >>>> >>
>>>> >> >> >>>> >>
>>>> >> >> >>>> >> ------------------------------------------------------------------------------
>>>> >> >> >>>> >> Put Bad Developers to Shame
>>>> >> >> >>>> >> Dominate Development with Jenkins Continuous Integration
>>>> >> >> >>>> >> Continuously Automate Build, Test & Deployment
>>>> >> >> >>>> >> Start a new project now. Try Jenkins in the cloud.
>>>> >> >> >>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >>>> >> _______________________________________________
>>>> >> >> >>>> >> Csound-devel mailing list
>>>> >> >> >>>> >> Csound-devel@lists.sourceforge.net
>>>> >> >> >>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >>>> >
>>>> >> >> >>>> >
>>>> >> >> >>>> >
>>>> >> >> >>>> >
>>>> >> >> >>>> >
>>>> >> >> >>>> >
>>>> >> >> >>>> >
>>>> >> >> >>>> > ------------------------------------------------------------------------------
>>>> >> >> >>>> > Put Bad Developers to Shame
>>>> >> >> >>>> > Dominate Development with Jenkins Continuous Integration
>>>> >> >> >>>> > Continuously Automate Build, Test & Deployment
>>>> >> >> >>>> > Start a new project now. Try Jenkins in the cloud.
>>>> >> >> >>>> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >>>> > _______________________________________________
>>>> >> >> >>>> > Csound-devel mailing list
>>>> >> >> >>>> > Csound-devel@lists.sourceforge.net
>>>> >> >> >>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >>>> >
>>>> >> >> >>>>
>>>> >> >> >>>>
>>>> >> >> >>>>
>>>> >> >> >>>>
>>>> >> >> >>>>
>>>> >> >> >>>> ------------------------------------------------------------------------------
>>>> >> >> >>>> Put Bad Developers to Shame
>>>> >> >> >>>> Dominate Development with Jenkins Continuous Integration
>>>> >> >> >>>> Continuously Automate Build, Test & Deployment
>>>> >> >> >>>> Start a new project now. Try Jenkins in the cloud.
>>>> >> >> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >>>> _______________________________________________
>>>> >> >> >>>> Csound-devel mailing list
>>>> >> >> >>>> Csound-devel@lists.sourceforge.net
>>>> >> >> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >>>
>>>> >> >> >>>
>>>> >> >> >>>
>>>> >> >> >>>
>>>> >> >> >>>
>>>> >> >> >>>
>>>> >> >> >>>
>>>> >> >> >>> ------------------------------------------------------------------------------
>>>> >> >> >>> Put Bad Developers to Shame
>>>> >> >> >>> Dominate Development with Jenkins Continuous Integration
>>>> >> >> >>> Continuously Automate Build, Test & Deployment
>>>> >> >> >>> Start a new project now. Try Jenkins in the cloud.
>>>> >> >> >>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> >>> _______________________________________________
>>>> >> >> >>> Csound-devel mailing list
>>>> >> >> >>> Csound-devel@lists.sourceforge.net
>>>> >> >> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >> >>>
>>>> >> >> >>
>>>> >> >>
>>>> >> >>
>>>> >> >>
>>>> >> >>
>>>> >> >> ------------------------------------------------------------------------------
>>>> >> >> Put Bad Developers to Shame
>>>> >> >> Dominate Development with Jenkins Continuous Integration
>>>> >> >> Continuously Automate Build, Test & Deployment
>>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>>> >> >> _______________________________________________
>>>> >> >> Csound-devel mailing list
>>>> >> >> Csound-devel@lists.sourceforge.net
>>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> >
>>>> >> > ------------------------------------------------------------------------------
>>>> >> > Put Bad Developers to Shame
>>>> >> > Dominate Development with Jenkins Continuous Integration
>>>> >> > Continuously Automate Build, Test & Deployment
>>>> >> > Start a new project now. Try Jenkins in the cloud.
>>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >> > _______________________________________________
>>>> >> > Csound-devel mailing list
>>>> >> > Csound-devel@lists.sourceforge.net
>>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >> >
>>>> >>
>>>> >>
>>>> >>
>>>> >> ------------------------------------------------------------------------------
>>>> >> Put Bad Developers to Shame
>>>> >> Dominate Development with Jenkins Continuous Integration
>>>> >> Continuously Automate Build, Test & Deployment
>>>> >> Start a new project now. Try Jenkins in the cloud.
>>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>>> >> _______________________________________________
>>>> >> Csound-devel mailing list
>>>> >> Csound-devel@lists.sourceforge.net
>>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > ------------------------------------------------------------------------------
>>>> > Put Bad Developers to Shame
>>>> > Dominate Development with Jenkins Continuous Integration
>>>> > Continuously Automate Build, Test & Deployment
>>>> > Start a new project now. Try Jenkins in the cloud.
>>>> > http://p.sf.net/sfu/13600_Cloudbees
>>>> > _______________________________________________
>>>> > Csound-devel mailing list
>>>> > Csound-devel@lists.sourceforge.net
>>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Put Bad Developers to Shame
>>>> Dominate Development with Jenkins Continuous Integration
>>>> Continuously Automate Build, Test & Deployment
>>>> Start a new project now. Try Jenkins in the cloud.
>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> _______________________________________________
>>>> Csound-devel mailing list
>>>> Csound-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-11 21:21
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Sorry for the noise! I'm properly checked out now and enjoying the
ride! This is great. Are there any performance costs if no breakpoint
is set?

On 11 April 2014 09:05, Rory Walsh  wrote:
> I assume that since I am getting no build or linker errors that there
> is something amiss in my code?
>
> On 11 April 2014 01:51, Rory Walsh  wrote:
>> No. None at all?
>>
>> On 11 Apr 2014 00:36, "Andres Cabrera"  wrote:
>>>
>>> Are you getting build errors?
>>>
>>> Cheers,
>>> Andrés
>>>
>>>
>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera 
>>> wrote:
>>>>
>>>> Did you checkout the csdebugger branch for csound and run cmake with
>>>> -DBUILD_DEBUGGER=1?
>>>>
>>>> Cheers,
>>>> Andrés
>>>>
>>>>
>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh  wrote:
>>>>>
>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>>>>
>>>>> On 11 April 2014 00:26, Andres Cabrera  wrote:
>>>>> > easier to do:
>>>>> >
>>>>> > cmake -DBUILD_DEBUGGER=1
>>>>> >
>>>>> > Cheers,
>>>>> > Andrés
>>>>> >
>>>>> >
>>>>> > On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh  wrote:
>>>>> >>
>>>>> >> I'm probably adding the wrong lines to cmakelists.txt?
>>>>> >>
>>>>> >> set (BUILD_DEBUGGER 1)
>>>>> >>
>>>>> >> Is that right?
>>>>> >>
>>>>> >> On 11 April 2014 00:06, Andres Cabrera  wrote:
>>>>> >> > Yes it would :)
>>>>> >> >
>>>>> >> > Cheers,
>>>>> >> > Andrés
>>>>> >> >
>>>>> >> >
>>>>> >> > On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh 
>>>>> >> > wrote:
>>>>> >> >>
>>>>> >> >> It would help if I built with the debugger enabled :)
>>>>> >> >>
>>>>> >> >> On 11 April 2014 00:01, Rory Walsh  wrote:
>>>>> >> >> > I'm using a csd file instead of compiling orcs and scores, is
>>>>> >> >> > this
>>>>> >> >> > allowed? My breakpoint callback is never being hit. What am I
>>>>> >> >> > missing?
>>>>> >> >> >
>>>>> >> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>>>>> >> >> > *userdata);
>>>>> >> >> >
>>>>> >> >> > int main(int argc, char *argv[])
>>>>> >> >> > {
>>>>> >> >> >     int break_count = 0;
>>>>> >> >> >     CSOUND* csound = csoundCreate(NULL);
>>>>> >> >> >     csoundCompile(csound,argc,argv);
>>>>> >> >> >     csoundStart(csound);
>>>>> >> >> >     csoundDebuggerInit(csound);
>>>>> >> >> >     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>>>>> >> >> > &break_count);
>>>>> >> >> >     csoundSetInstrumentBreakpoint(csound, 1, 0);
>>>>> >> >> >
>>>>> >> >> >     while (csoundPerformKsmps(csound)==0);
>>>>> >> >> >
>>>>> >> >> >     csoundDebuggerClean(csound);
>>>>> >> >> >     csoundDestroy(csound);
>>>>> >> >> > }
>>>>> >> >> >
>>>>> >> >> > //this never gets called.
>>>>> >> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>>>>> >> >> > *userdata)
>>>>> >> >> > {
>>>>> >> >> >     int *count = (int *) userdata;
>>>>> >> >> >     printf("bkpt line %i instr %f\n", line, instr);
>>>>> >> >> >     *count = *count + 1;
>>>>> >> >> > };
>>>>> >> >> >
>>>>> >> >> > On 10 April 2014 22:56, Rory Walsh  wrote:
>>>>> >> >> >> That's great. Thanks.
>>>>> >> >> >>
>>>>> >> >> >> On 10 Apr 2014 22:44, "Andres Cabrera" 
>>>>> >> >> >> wrote:
>>>>> >> >> >>>
>>>>> >> >> >>> Currently only instrument breakpoints are implemented...
>>>>> >> >> >>>
>>>>> >> >> >>> Cheers,
>>>>> >> >> >>> Andrés
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh 
>>>>> >> >> >>> wrote:
>>>>> >> >> >>>>
>>>>> >> >> >>>> Ok, that sounds good. To help get my head around this I might
>>>>> >> >> >>>> try
>>>>> >> >> >>>> to
>>>>> >> >> >>>> write a simple command line app that passes a breakpoint line
>>>>> >> >> >>>> number
>>>>> >> >> >>>> as a parameter, and then when it hits, it will print out the
>>>>> >> >> >>>> values
>>>>> >> >> >>>> of
>>>>> >> >> >>>> each variable in that instrument. That would be a start.
>>>>> >> >> >>>>
>>>>> >> >> >>>> On 10 April 2014 22:29, Andres Cabrera
>>>>> >> >> >>>> 
>>>>> >> >> >>>> wrote:
>>>>> >> >> >>>> > Not exactly.
>>>>> >> >> >>>> >
>>>>> >> >> >>>> > the function:
>>>>> >> >> >>>> > csoundDebugGetInstrument(csound);
>>>>> >> >> >>>> >
>>>>> >> >> >>>> > Gives you a pointer to the currently active instrument
>>>>> >> >> >>>> > (where
>>>>> >> >> >>>> > the
>>>>> >> >> >>>> > debugger
>>>>> >> >> >>>> > interrupted execution). You can then get the information
>>>>> >> >> >>>> > about
>>>>> >> >> >>>> > the
>>>>> >> >> >>>> > instrument instance (variables and time counters, p-fields,
>>>>> >> >> >>>> > etc.)
>>>>> >> >> >>>> > from
>>>>> >> >> >>>> > it.
>>>>> >> >> >>>> >
>>>>> >> >> >>>> > The callback function is only called if a breakpoint is
>>>>> >> >> >>>> > reached,
>>>>> >> >> >>>> > which
>>>>> >> >> >>>> > is
>>>>> >> >> >>>> > checked inside csound's kperf function. There is a linked
>>>>> >> >> >>>> > list
>>>>> >> >> >>>> > of
>>>>> >> >> >>>> > breakpoints (that is managed in a thread-safe way), which
>>>>> >> >> >>>> > is
>>>>> >> >> >>>> > traversed
>>>>> >> >> >>>> > to
>>>>> >> >> >>>> > check if the current instrument matches a breakpoint. For
>>>>> >> >> >>>> > line
>>>>> >> >> >>>> > breakpoints,
>>>>> >> >> >>>> > what will need to happen is that for every opcode that is
>>>>> >> >> >>>> > executed,
>>>>> >> >> >>>> > it
>>>>> >> >> >>>> > is
>>>>> >> >> >>>> > checked whether it matches to a breakpoint line.
>>>>> >> >> >>>> >
>>>>> >> >> >>>> > Cheers,
>>>>> >> >> >>>> > Andrés
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>>>> >> >> >>>> > 
>>>>> >> >> >>>> > wrote:
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >> So you grab the values for all the variables in a
>>>>> >> >> >>>> >> particular
>>>>> >> >> >>>> >> line
>>>>> >> >> >>>> >> each
>>>>> >> >> >>>> >> time this callback function is hit? Am I reading that
>>>>> >> >> >>>> >> right?
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >> On 10 April 2014 22:10, Andres Cabrera
>>>>> >> >> >>>> >> 
>>>>> >> >> >>>> >> wrote:
>>>>> >> >> >>>> >> > Hi,
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > My breakpoint callback looks like this:
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > void CsoundEngine::breakpointCallback(CSOUND *csound,
>>>>> >> >> >>>> >> > int
>>>>> >> >> >>>> >> > line,
>>>>> >> >> >>>> >> > double
>>>>> >> >> >>>> >> > instr, void *udata)
>>>>> >> >> >>>> >> > {
>>>>> >> >> >>>> >> >     qDebug() <<"breakpointCallback " << line << instr;
>>>>> >> >> >>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>>>>> >> >> >>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>>>>> >> >> >>>> >> >     // Copy variable list
>>>>> >> >> >>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>>>>> >> >> >>>> >> >     cs->variableMutex.lock();
>>>>> >> >> >>>> >> >     cs->m_varList.clear();
>>>>> >> >> >>>> >> >     while (vp) {
>>>>> >> >> >>>> >> >         if (vp->varName[0] != '#') {
>>>>> >> >> >>>> >> >             QVariantList varDetails;
>>>>> >> >> >>>> >> >             varDetails << vp->varName;
>>>>> >> >> >>>> >> >             if (strcmp(vp->varType->varTypeName, "i") ==
>>>>> >> >> >>>> >> > 0
>>>>> >> >> >>>> >> >                     || strcmp(vp->varType->varTypeName,
>>>>> >> >> >>>> >> > "k")
>>>>> >> >> >>>> >> > ==
>>>>> >> >> >>>> >> > 0) {
>>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>>>> >> >> >>>> >> >                     varDetails << *((MYFLT
>>>>> >> >> >>>> >> > *)vp->memBlock);
>>>>> >> >> >>>> >> >                 } else {
>>>>> >> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>>>>> >> >> >>>> >> > vp->memBlockIndex;
>>>>> >> >> >>>> >> >                     varDetails << QVariant(*varmem);
>>>>> >> >> >>>> >> >                 }
>>>>> >> >> >>>> >> >             } else if(strcmp(vp->varType->varTypeName,
>>>>> >> >> >>>> >> > "S")
>>>>> >> >> >>>> >> > ==
>>>>> >> >> >>>> >> > 0) {
>>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>>>> >> >> >>>> >> >                     varDetails << *((char
>>>>> >> >> >>>> >> > *)vp->memBlock);
>>>>> >> >> >>>> >> >                 } else {
>>>>> >> >> >>>> >> >                     char *varmem = (char *)
>>>>> >> >> >>>> >> > (insds->lclbas +
>>>>> >> >> >>>> >> > vp->memBlockIndex);
>>>>> >> >> >>>> >> >                     varDetails << QVariant(varmem);
>>>>> >> >> >>>> >> >                 }
>>>>> >> >> >>>> >> >             } else if (strcmp(vp->varType->varTypeName,
>>>>> >> >> >>>> >> > "a")
>>>>> >> >> >>>> >> > ==
>>>>> >> >> >>>> >> > 0) {
>>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>>>> >> >> >>>> >> >                     varDetails << *((MYFLT
>>>>> >> >> >>>> >> > *)vp->memBlock) <<
>>>>> >> >> >>>> >> > *((MYFLT
>>>>> >> >> >>>> >> > *)vp->memBlock + 1)
>>>>> >> >> >>>> >> >                                << *((MYFLT
>>>>> >> >> >>>> >> > *)vp->memBlock +
>>>>> >> >> >>>> >> > 2)<<
>>>>> >> >> >>>> >> > *((MYFLT
>>>>> >> >> >>>> >> > *)vp->memBlock + 3);
>>>>> >> >> >>>> >> >                 } else {
>>>>> >> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>>>>> >> >> >>>> >> > vp->memBlockIndex;
>>>>> >> >> >>>> >> >                     varDetails << QVariant(*varmem);
>>>>> >> >> >>>> >> >                 }
>>>>> >> >> >>>> >> >             } else {
>>>>> >> >> >>>> >> >                 varDetails << QVariant();
>>>>> >> >> >>>> >> >             }
>>>>> >> >> >>>> >> >             varDetails << vp->varType->varTypeName;
>>>>> >> >> >>>> >> >             cs->m_varList << varDetails;
>>>>> >> >> >>>> >> >         }
>>>>> >> >> >>>> >> >         vp = vp->next;
>>>>> >> >> >>>> >> >     }
>>>>> >> >> >>>> >> >     cs->variableMutex.unlock();
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >     //Copy active instrument list
>>>>> >> >> >>>> >> >     cs->instrumentMutex.lock();
>>>>> >> >> >>>> >> >     cs->m_instrumentList.clear();
>>>>> >> >> >>>> >> >     INSDS *in = insds;
>>>>> >> >> >>>> >> >     while (in->prvact) {
>>>>> >> >> >>>> >> >         in = in->prvact;
>>>>> >> >> >>>> >> >     }
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >     while (in) {
>>>>> >> >> >>>> >> >         QVariantList instance;
>>>>> >> >> >>>> >> >         instance << in->p1;
>>>>> >> >> >>>> >> >         instance << QString("%1
>>>>> >> >> >>>> >> > %2").arg(in->p2).arg(in->p3);
>>>>> >> >> >>>> >> >         instance << in->kcounter;
>>>>> >> >> >>>> >> >         cs->m_instrumentList << instance;
>>>>> >> >> >>>> >> >         in = in->nxtact;
>>>>> >> >> >>>> >> >     }
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >     cs->instrumentMutex.unlock();
>>>>> >> >> >>>> >> >     emit cs->breakpointReached();
>>>>> >> >> >>>> >> > }
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > And yes you can actually click the pause button and the
>>>>> >> >> >>>> >> > debugger
>>>>> >> >> >>>> >> > will
>>>>> >> >> >>>> >> > stop
>>>>> >> >> >>>> >> > and show you where it is, even if there is no breakpoint
>>>>> >> >> >>>> >> > there.
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > Cheers,
>>>>> >> >> >>>> >> > Andrés
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>>>> >> >> >>>> >> > 
>>>>> >> >> >>>> >> > wrote:
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >> Thanks. And how would one query the value of a variable
>>>>> >> >> >>>> >> >> once
>>>>> >> >> >>>> >> >> the
>>>>> >> >> >>>> >> >> breakpoint is hit? How does one access that information
>>>>> >> >> >>>> >> >> from
>>>>> >> >> >>>> >> >> the
>>>>> >> >> >>>> >> >> Csound structure? Btw, your debugger interface in
>>>>> >> >> >>>> >> >> CsounsQT
>>>>> >> >> >>>> >> >> looks
>>>>> >> >> >>>> >> >> really top-class. I could hope to implement anything as
>>>>> >> >> >>>> >> >> professional
>>>>> >> >> >>>> >> >> as that, but I like the idea of being able to stop and
>>>>> >> >> >>>> >> >> query
>>>>> >> >> >>>> >> >> variables
>>>>> >> >> >>>> >> >> on the fly. Is this possible, your screen-shot seems to
>>>>> >> >> >>>> >> >> indicate
>>>>> >> >> >>>> >> >> so?
>>>>> >> >> >>>> >> >> This will be so useful in teaching!
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >> On 10 April 2014 21:58, Andres Cabrera
>>>>> >> >> >>>> >> >> 
>>>>> >> >> >>>> >> >> wrote:
>>>>> >> >> >>>> >> >> > Also, since the breakpoint callback gets the CSOUND
>>>>> >> >> >>>> >> >> > structure, it
>>>>> >> >> >>>> >> >> > can
>>>>> >> >> >>>> >> >> > get
>>>>> >> >> >>>> >> >> > all of its information from there.
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> > Cheers,
>>>>> >> >> >>>> >> >> > Andrés
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>>>>> >> >> >>>> >> >> > 
>>>>> >> >> >>>> >> >> > wrote:
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >> Hi Rory,
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >> Essentially, your application could do something
>>>>> >> >> >>>> >> >> >> like:
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >>     int break_count = 0;
>>>>> >> >> >>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>>>>> >> >> >>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1,
>>>>> >> >> >>>> >> >> >> p4\nendin\n");
>>>>> >> >> >>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>>>>> >> >> >>>> >> >> >>     csoundStart(csound);
>>>>> >> >> >>>> >> >> >>     csoundDebuggerInit(csound);
>>>>> >> >> >>>> >> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb,
>>>>> >> >> >>>> >> >> >> (void
>>>>> >> >> >>>> >> >> >> *)
>>>>> >> >> >>>> >> >> >> &break_count);
>>>>> >> >> >>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >>     for (i = 0; i < 1000; i++) {
>>>>> >> >> >>>> >> >> >>         csoundPerformKsmps(csound);
>>>>> >> >> >>>> >> >> >>     }
>>>>> >> >> >>>> >> >> >>     CU_ASSERT(break_count == 1);
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >>     csoundDebuggerClean(csound);
>>>>> >> >> >>>> >> >> >>     csoundDestroy(csound);
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >> Whenever the breakpoint is reached, the breakpoint
>>>>> >> >> >>>> >> >> >> callback
>>>>> >> >> >>>> >> >> >> is
>>>>> >> >> >>>> >> >> >> called.
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >> Currently only instrument breakpoints are
>>>>> >> >> >>>> >> >> >> implemented
>>>>> >> >> >>>> >> >> >> (i.e.
>>>>> >> >> >>>> >> >> >> the
>>>>> >> >> >>>> >> >> >> debugger
>>>>> >> >> >>>> >> >> >> breaks when an instrument is active), but I also
>>>>> >> >> >>>> >> >> >> want to
>>>>> >> >> >>>> >> >> >> add
>>>>> >> >> >>>> >> >> >> line
>>>>> >> >> >>>> >> >> >> breakpoints.
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >> Cheers,
>>>>> >> >> >>>> >> >> >> Andrés
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>>>> >> >> >>>> >> >> >> 
>>>>> >> >> >>>> >> >> >> wrote:
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> > Wow, this looks super cool Andres. I'm just
>>>>> >> >> >>>> >> >> >> > looking
>>>>> >> >> >>>> >> >> >> > through
>>>>> >> >> >>>> >> >> >> > the
>>>>> >> >> >>>> >> >> >> > code
>>>>> >> >> >>>> >> >> >> > now. Do you have a basic example of setting this
>>>>> >> >> >>>> >> >> >> > up?
>>>>> >> >> >>>> >> >> >> > The
>>>>> >> >> >>>> >> >> >> > CUnit
>>>>> >> >> >>>> >> >> >> > stuff
>>>>> >> >> >>>> >> >> >> > in that debugger test code you posted is confusing
>>>>> >> >> >>>> >> >> >> > me.
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera
>>>>> >> >> >>>> >> >> >> > 
>>>>> >> >> >>>> >> >> >> > wrote:
>>>>> >> >> >>>> >> >> >> > > Hi,
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > The Csound debugger I'm working on is finally
>>>>> >> >> >>>> >> >> >> > > getting
>>>>> >> >> >>>> >> >> >> > > to
>>>>> >> >> >>>> >> >> >> > > a
>>>>> >> >> >>>> >> >> >> > > useful
>>>>> >> >> >>>> >> >> >> > > testing
>>>>> >> >> >>>> >> >> >> > > stage.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > I've been doing the work in the csdebugger
>>>>> >> >> >>>> >> >> >> > > branch, if
>>>>> >> >> >>>> >> >> >> > > you
>>>>> >> >> >>>> >> >> >> > > have
>>>>> >> >> >>>> >> >> >> > > time,
>>>>> >> >> >>>> >> >> >> > > please
>>>>> >> >> >>>> >> >> >> > > have a look.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > To build the debugger, you will need to add to
>>>>> >> >> >>>> >> >> >> > > cmake:
>>>>> >> >> >>>> >> >> >> > > -DBUILD_DEBUGGER=1
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > You will find some simple tests of the API here:
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > I have written a debugger front-end within
>>>>> >> >> >>>> >> >> >> > > CsoundQt,
>>>>> >> >> >>>> >> >> >> > > which
>>>>> >> >> >>>> >> >> >> > > you
>>>>> >> >> >>>> >> >> >> > > are
>>>>> >> >> >>>> >> >> >> > > welcome
>>>>> >> >> >>>> >> >> >> > > to try out too:
>>>>> >> >> >>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > Some internal details:
>>>>> >> >> >>>> >> >> >> > > The debugger interface is found at:
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > Although the debugger functions are part of the
>>>>> >> >> >>>> >> >> >> > > API,
>>>>> >> >> >>>> >> >> >> > > I
>>>>> >> >> >>>> >> >> >> > > think
>>>>> >> >> >>>> >> >> >> > > it's
>>>>> >> >> >>>> >> >> >> > > cleaner to
>>>>> >> >> >>>> >> >> >> > > have them in their own header, as they are also
>>>>> >> >> >>>> >> >> >> > > a
>>>>> >> >> >>>> >> >> >> > > compile
>>>>> >> >> >>>> >> >> >> > > time
>>>>> >> >> >>>> >> >> >> > > option.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > Because the changes are somewhat invasive, I
>>>>> >> >> >>>> >> >> >> > > chose to
>>>>> >> >> >>>> >> >> >> > > make
>>>>> >> >> >>>> >> >> >> > > the
>>>>> >> >> >>>> >> >> >> > > kperf
>>>>> >> >> >>>> >> >> >> > > function a pointer within the CSOUND struct that
>>>>> >> >> >>>> >> >> >> > > defaults to
>>>>> >> >> >>>> >> >> >> > > nodebug.
>>>>> >> >> >>>> >> >> >> > > When
>>>>> >> >> >>>> >> >> >> > > the debugger is initialized the kperf function
>>>>> >> >> >>>> >> >> >> > > pointer
>>>>> >> >> >>>> >> >> >> > > is
>>>>> >> >> >>>> >> >> >> > > switched
>>>>> >> >> >>>> >> >> >> > > to
>>>>> >> >> >>>> >> >> >> > > the
>>>>> >> >> >>>> >> >> >> > > debug version, and switched back when the
>>>>> >> >> >>>> >> >> >> > > debugger is
>>>>> >> >> >>>> >> >> >> > > disabled
>>>>> >> >> >>>> >> >> >> > > csoundDebuggerInit() and csoundDebuggerClean()
>>>>> >> >> >>>> >> >> >> > > functions.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > When a breakpoint is reached, a callback
>>>>> >> >> >>>> >> >> >> > > function
>>>>> >> >> >>>> >> >> >> > > that
>>>>> >> >> >>>> >> >> >> > > has
>>>>> >> >> >>>> >> >> >> > > been
>>>>> >> >> >>>> >> >> >> > > registered
>>>>> >> >> >>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound,
>>>>> >> >> >>>> >> >> >> > > breakpoint_cb_t
>>>>> >> >> >>>> >> >> >> > > bkpt_cb,
>>>>> >> >> >>>> >> >> >> > > void *userdata) is called.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > When a breakpoint is reached, after the callback
>>>>> >> >> >>>> >> >> >> > > is
>>>>> >> >> >>>> >> >> >> > > called,
>>>>> >> >> >>>> >> >> >> > > the
>>>>> >> >> >>>> >> >> >> > > kperf
>>>>> >> >> >>>> >> >> >> > > function continues running as usual, providing
>>>>> >> >> >>>> >> >> >> > > empty
>>>>> >> >> >>>> >> >> >> > > buffers
>>>>> >> >> >>>> >> >> >> > > to
>>>>> >> >> >>>> >> >> >> > > the
>>>>> >> >> >>>> >> >> >> > > audio
>>>>> >> >> >>>> >> >> >> > > hardware, and not incrementing the time counters
>>>>> >> >> >>>> >> >> >> > > in
>>>>> >> >> >>>> >> >> >> > > musmon.
>>>>> >> >> >>>> >> >> >> > > When
>>>>> >> >> >>>> >> >> >> > > a
>>>>> >> >> >>>> >> >> >> > > continue
>>>>> >> >> >>>> >> >> >> > > is reached, the graph traversing continues where
>>>>> >> >> >>>> >> >> >> > > it
>>>>> >> >> >>>> >> >> >> > > left
>>>>> >> >> >>>> >> >> >> > > off.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > There are probably still a few bugs, but it's
>>>>> >> >> >>>> >> >> >> > > now
>>>>> >> >> >>>> >> >> >> > > working on
>>>>> >> >> >>>> >> >> >> > > my
>>>>> >> >> >>>> >> >> >> > > simple
>>>>> >> >> >>>> >> >> >> > > tests.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > Any ideas, thoughts and suggestions are very
>>>>> >> >> >>>> >> >> >> > > welcome.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > Cheers,
>>>>> >> >> >>>> >> >> >> > > Andrés
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > ------------------------------------------------------------------------------
>>>>> >> >> >>>> >> >> >> > > Put Bad Developers to Shame
>>>>> >> >> >>>> >> >> >> > > Dominate Development with Jenkins Continuous
>>>>> >> >> >>>> >> >> >> > > Integration
>>>>> >> >> >>>> >> >> >> > > Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> >> >> >> > > Start a new project now. Try Jenkins in the
>>>>> >> >> >>>> >> >> >> > > cloud.
>>>>> >> >> >>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> >> >> >> > > _______________________________________________
>>>>> >> >> >>>> >> >> >> > > Csound-devel mailing list
>>>>> >> >> >>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> > ------------------------------------------------------------------------------
>>>>> >> >> >>>> >> >> >> > Put Bad Developers to Shame
>>>>> >> >> >>>> >> >> >> > Dominate Development with Jenkins Continuous
>>>>> >> >> >>>> >> >> >> > Integration
>>>>> >> >> >>>> >> >> >> > Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> >> >> >> > Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> >> >> >> > _______________________________________________
>>>>> >> >> >>>> >> >> >> > Csound-devel mailing list
>>>>> >> >> >>>> >> >> >> > Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> > ------------------------------------------------------------------------------
>>>>> >> >> >>>> >> >> > Put Bad Developers to Shame
>>>>> >> >> >>>> >> >> > Dominate Development with Jenkins Continuous
>>>>> >> >> >>>> >> >> > Integration
>>>>> >> >> >>>> >> >> > Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> >> >> > Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> >> >> > _______________________________________________
>>>>> >> >> >>>> >> >> > Csound-devel mailing list
>>>>> >> >> >>>> >> >> > Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >> ------------------------------------------------------------------------------
>>>>> >> >> >>>> >> >> Put Bad Developers to Shame
>>>>> >> >> >>>> >> >> Dominate Development with Jenkins Continuous
>>>>> >> >> >>>> >> >> Integration
>>>>> >> >> >>>> >> >> Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> >> >> _______________________________________________
>>>>> >> >> >>>> >> >> Csound-devel mailing list
>>>>> >> >> >>>> >> >> Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > ------------------------------------------------------------------------------
>>>>> >> >> >>>> >> > Put Bad Developers to Shame
>>>>> >> >> >>>> >> > Dominate Development with Jenkins Continuous Integration
>>>>> >> >> >>>> >> > Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> >> > Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> >> > _______________________________________________
>>>>> >> >> >>>> >> > Csound-devel mailing list
>>>>> >> >> >>>> >> > Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >> ------------------------------------------------------------------------------
>>>>> >> >> >>>> >> Put Bad Developers to Shame
>>>>> >> >> >>>> >> Dominate Development with Jenkins Continuous Integration
>>>>> >> >> >>>> >> Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> >> Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> >> _______________________________________________
>>>>> >> >> >>>> >> Csound-devel mailing list
>>>>> >> >> >>>> >> Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> > ------------------------------------------------------------------------------
>>>>> >> >> >>>> > Put Bad Developers to Shame
>>>>> >> >> >>>> > Dominate Development with Jenkins Continuous Integration
>>>>> >> >> >>>> > Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> > Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> > http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> > _______________________________________________
>>>>> >> >> >>>> > Csound-devel mailing list
>>>>> >> >> >>>> > Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >
>>>>> >> >> >>>>
>>>>> >> >> >>>>
>>>>> >> >> >>>>
>>>>> >> >> >>>>
>>>>> >> >> >>>>
>>>>> >> >> >>>> ------------------------------------------------------------------------------
>>>>> >> >> >>>> Put Bad Developers to Shame
>>>>> >> >> >>>> Dominate Development with Jenkins Continuous Integration
>>>>> >> >> >>>> Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> _______________________________________________
>>>>> >> >> >>>> Csound-devel mailing list
>>>>> >> >> >>>> Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>> ------------------------------------------------------------------------------
>>>>> >> >> >>> Put Bad Developers to Shame
>>>>> >> >> >>> Dominate Development with Jenkins Continuous Integration
>>>>> >> >> >>> Continuously Automate Build, Test & Deployment
>>>>> >> >> >>> Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>> http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>> _______________________________________________
>>>>> >> >> >>> Csound-devel mailing list
>>>>> >> >> >>> Csound-devel@lists.sourceforge.net
>>>>> >> >> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>
>>>>> >> >> >>
>>>>> >> >>
>>>>> >> >>
>>>>> >> >>
>>>>> >> >>
>>>>> >> >> ------------------------------------------------------------------------------
>>>>> >> >> Put Bad Developers to Shame
>>>>> >> >> Dominate Development with Jenkins Continuous Integration
>>>>> >> >> Continuously Automate Build, Test & Deployment
>>>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> _______________________________________________
>>>>> >> >> Csound-devel mailing list
>>>>> >> >> Csound-devel@lists.sourceforge.net
>>>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >
>>>>> >> >
>>>>> >> >
>>>>> >> >
>>>>> >> >
>>>>> >> > ------------------------------------------------------------------------------
>>>>> >> > Put Bad Developers to Shame
>>>>> >> > Dominate Development with Jenkins Continuous Integration
>>>>> >> > Continuously Automate Build, Test & Deployment
>>>>> >> > Start a new project now. Try Jenkins in the cloud.
>>>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> > _______________________________________________
>>>>> >> > Csound-devel mailing list
>>>>> >> > Csound-devel@lists.sourceforge.net
>>>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> ------------------------------------------------------------------------------
>>>>> >> Put Bad Developers to Shame
>>>>> >> Dominate Development with Jenkins Continuous Integration
>>>>> >> Continuously Automate Build, Test & Deployment
>>>>> >> Start a new project now. Try Jenkins in the cloud.
>>>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> _______________________________________________
>>>>> >> Csound-devel mailing list
>>>>> >> Csound-devel@lists.sourceforge.net
>>>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >
>>>>> >
>>>>> >
>>>>> >
>>>>> > ------------------------------------------------------------------------------
>>>>> > Put Bad Developers to Shame
>>>>> > Dominate Development with Jenkins Continuous Integration
>>>>> > Continuously Automate Build, Test & Deployment
>>>>> > Start a new project now. Try Jenkins in the cloud.
>>>>> > http://p.sf.net/sfu/13600_Cloudbees
>>>>> > _______________________________________________
>>>>> > Csound-devel mailing list
>>>>> > Csound-devel@lists.sourceforge.net
>>>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> Put Bad Developers to Shame
>>>>> Dominate Development with Jenkins Continuous Integration
>>>>> Continuously Automate Build, Test & Deployment
>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>> _______________________________________________
>>>>> Csound-devel mailing list
>>>>> Csound-devel@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>
>>>>
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-11 22:08
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
Hi,

Good to hear you've got it going. The only performance penalty if you don't call csoundDebuggerInit is that kperf is a function pointer rather than a function. If you have called csoundDebuggerInit, then you will be running a slightly heavier kperf_debug function, which needs to check whether there are new debug commands (like break, continue, or new breakpoints), and which needs to check on every new instrument in the chain whether it matches one of the existing breakpoints. It's not too much, since it's done at control rate, but there is a penalty. Performance during debugging will also get a little worse once line breakpoints are implemented because there will have to be a check for every ugen called within an instrument. But still I think the difference in performance between debug and no debug will not be as large as it is for C.

Cheers,
Andrés



On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
Sorry for the noise! I'm properly checked out now and enjoying the
ride! This is great. Are there any performance costs if no breakpoint
is set?

On 11 April 2014 09:05, Rory Walsh <rorywalsh@ear.ie> wrote:
> I assume that since I am getting no build or linker errors that there
> is something amiss in my code?
>
> On 11 April 2014 01:51, Rory Walsh <rorywalsh@ear.ie> wrote:
>> No. None at all?
>>
>> On 11 Apr 2014 00:36, "Andres Cabrera" <mantaraya36@gmail.com> wrote:
>>>
>>> Are you getting build errors?
>>>
>>> Cheers,
>>> Andrés
>>>
>>>
>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera <mantaraya36@gmail.com>
>>> wrote:
>>>>
>>>> Did you checkout the csdebugger branch for csound and run cmake with
>>>> -DBUILD_DEBUGGER=1?
>>>>
>>>> Cheers,
>>>> Andrés
>>>>
>>>>
>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>>
>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>>>>
>>>>> On 11 April 2014 00:26, Andres Cabrera <mantaraya36@gmail.com> wrote:
>>>>> > easier to do:
>>>>> >
>>>>> > cmake -DBUILD_DEBUGGER=1
>>>>> >
>>>>> > Cheers,
>>>>> > Andrés
>>>>> >
>>>>> >
>>>>> > On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>> >>
>>>>> >> I'm probably adding the wrong lines to cmakelists.txt?
>>>>> >>
>>>>> >> set (BUILD_DEBUGGER 1)
>>>>> >>
>>>>> >> Is that right?
>>>>> >>
>>>>> >> On 11 April 2014 00:06, Andres Cabrera <mantaraya36@gmail.com> wrote:
>>>>> >> > Yes it would :)
>>>>> >> >
>>>>> >> > Cheers,
>>>>> >> > Andrés
>>>>> >> >
>>>>> >> >
>>>>> >> > On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh <rorywalsh@ear.ie>
>>>>> >> > wrote:
>>>>> >> >>
>>>>> >> >> It would help if I built with the debugger enabled :)
>>>>> >> >>
>>>>> >> >> On 11 April 2014 00:01, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>> >> >> > I'm using a csd file instead of compiling orcs and scores, is
>>>>> >> >> > this
>>>>> >> >> > allowed? My breakpoint callback is never being hit. What am I
>>>>> >> >> > missing?
>>>>> >> >> >
>>>>> >> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>>>>> >> >> > *userdata);
>>>>> >> >> >
>>>>> >> >> > int main(int argc, char *argv[])
>>>>> >> >> > {
>>>>> >> >> >     int break_count = 0;
>>>>> >> >> >     CSOUND* csound = csoundCreate(NULL);
>>>>> >> >> >     csoundCompile(csound,argc,argv);
>>>>> >> >> >     csoundStart(csound);
>>>>> >> >> >     csoundDebuggerInit(csound);
>>>>> >> >> >     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>>>>> >> >> > &break_count);
>>>>> >> >> >     csoundSetInstrumentBreakpoint(csound, 1, 0);
>>>>> >> >> >
>>>>> >> >> >     while (csoundPerformKsmps(csound)==0);
>>>>> >> >> >
>>>>> >> >> >     csoundDebuggerClean(csound);
>>>>> >> >> >     csoundDestroy(csound);
>>>>> >> >> > }
>>>>> >> >> >
>>>>> >> >> > //this never gets called.
>>>>> >> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>>>>> >> >> > *userdata)
>>>>> >> >> > {
>>>>> >> >> >     int *count = (int *) userdata;
>>>>> >> >> >     printf("bkpt line %i instr %f\n", line, instr);
>>>>> >> >> >     *count = *count + 1;
>>>>> >> >> > };
>>>>> >> >> >
>>>>> >> >> > On 10 April 2014 22:56, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>> >> >> >> That's great. Thanks.
>>>>> >> >> >>
>>>>> >> >> >> On 10 Apr 2014 22:44, "Andres Cabrera" <mantaraya36@gmail.com>
>>>>> >> >> >> wrote:
>>>>> >> >> >>>
>>>>> >> >> >>> Currently only instrument breakpoints are implemented...
>>>>> >> >> >>>
>>>>> >> >> >>> Cheers,
>>>>> >> >> >>> Andrés
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh <rorywalsh@ear.ie>
>>>>> >> >> >>> wrote:
>>>>> >> >> >>>>
>>>>> >> >> >>>> Ok, that sounds good. To help get my head around this I might
>>>>> >> >> >>>> try
>>>>> >> >> >>>> to
>>>>> >> >> >>>> write a simple command line app that passes a breakpoint line
>>>>> >> >> >>>> number
>>>>> >> >> >>>> as a parameter, and then when it hits, it will print out the
>>>>> >> >> >>>> values
>>>>> >> >> >>>> of
>>>>> >> >> >>>> each variable in that instrument. That would be a start.
>>>>> >> >> >>>>
>>>>> >> >> >>>> On 10 April 2014 22:29, Andres Cabrera
>>>>> >> >> >>>> <mantaraya36@gmail.com>
>>>>> >> >> >>>> wrote:
>>>>> >> >> >>>> > Not exactly.
>>>>> >> >> >>>> >
>>>>> >> >> >>>> > the function:
>>>>> >> >> >>>> > csoundDebugGetInstrument(csound);
>>>>> >> >> >>>> >
>>>>> >> >> >>>> > Gives you a pointer to the currently active instrument
>>>>> >> >> >>>> > (where
>>>>> >> >> >>>> > the
>>>>> >> >> >>>> > debugger
>>>>> >> >> >>>> > interrupted execution). You can then get the information
>>>>> >> >> >>>> > about
>>>>> >> >> >>>> > the
>>>>> >> >> >>>> > instrument instance (variables and time counters, p-fields,
>>>>> >> >> >>>> > etc.)
>>>>> >> >> >>>> > from
>>>>> >> >> >>>> > it.
>>>>> >> >> >>>> >
>>>>> >> >> >>>> > The callback function is only called if a breakpoint is
>>>>> >> >> >>>> > reached,
>>>>> >> >> >>>> > which
>>>>> >> >> >>>> > is
>>>>> >> >> >>>> > checked inside csound's kperf function. There is a linked
>>>>> >> >> >>>> > list
>>>>> >> >> >>>> > of
>>>>> >> >> >>>> > breakpoints (that is managed in a thread-safe way), which
>>>>> >> >> >>>> > is
>>>>> >> >> >>>> > traversed
>>>>> >> >> >>>> > to
>>>>> >> >> >>>> > check if the current instrument matches a breakpoint. For
>>>>> >> >> >>>> > line
>>>>> >> >> >>>> > breakpoints,
>>>>> >> >> >>>> > what will need to happen is that for every opcode that is
>>>>> >> >> >>>> > executed,
>>>>> >> >> >>>> > it
>>>>> >> >> >>>> > is
>>>>> >> >> >>>> > checked whether it matches to a breakpoint line.
>>>>> >> >> >>>> >
>>>>> >> >> >>>> > Cheers,
>>>>> >> >> >>>> > Andrés
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>>>> >> >> >>>> > <rorywalsh@ear.ie>
>>>>> >> >> >>>> > wrote:
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >> So you grab the values for all the variables in a
>>>>> >> >> >>>> >> particular
>>>>> >> >> >>>> >> line
>>>>> >> >> >>>> >> each
>>>>> >> >> >>>> >> time this callback function is hit? Am I reading that
>>>>> >> >> >>>> >> right?
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >> On 10 April 2014 22:10, Andres Cabrera
>>>>> >> >> >>>> >> <mantaraya36@gmail.com>
>>>>> >> >> >>>> >> wrote:
>>>>> >> >> >>>> >> > Hi,
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > My breakpoint callback looks like this:
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > void CsoundEngine::breakpointCallback(CSOUND *csound,
>>>>> >> >> >>>> >> > int
>>>>> >> >> >>>> >> > line,
>>>>> >> >> >>>> >> > double
>>>>> >> >> >>>> >> > instr, void *udata)
>>>>> >> >> >>>> >> > {
>>>>> >> >> >>>> >> >     qDebug() <<"breakpointCallback " << line << instr;
>>>>> >> >> >>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>>>>> >> >> >>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>>>>> >> >> >>>> >> >     // Copy variable list
>>>>> >> >> >>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>>>>> >> >> >>>> >> >     cs->variableMutex.lock();
>>>>> >> >> >>>> >> >     cs->m_varList.clear();
>>>>> >> >> >>>> >> >     while (vp) {
>>>>> >> >> >>>> >> >         if (vp->varName[0] != '#') {
>>>>> >> >> >>>> >> >             QVariantList varDetails;
>>>>> >> >> >>>> >> >             varDetails << vp->varName;
>>>>> >> >> >>>> >> >             if (strcmp(vp->varType->varTypeName, "i") ==
>>>>> >> >> >>>> >> > 0
>>>>> >> >> >>>> >> >                     || strcmp(vp->varType->varTypeName,
>>>>> >> >> >>>> >> > "k")
>>>>> >> >> >>>> >> > ==
>>>>> >> >> >>>> >> > 0) {
>>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>>>> >> >> >>>> >> >                     varDetails << *((MYFLT
>>>>> >> >> >>>> >> > *)vp->memBlock);
>>>>> >> >> >>>> >> >                 } else {
>>>>> >> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>>>>> >> >> >>>> >> > vp->memBlockIndex;
>>>>> >> >> >>>> >> >                     varDetails << QVariant(*varmem);
>>>>> >> >> >>>> >> >                 }
>>>>> >> >> >>>> >> >             } else if(strcmp(vp->varType->varTypeName,
>>>>> >> >> >>>> >> > "S")
>>>>> >> >> >>>> >> > ==
>>>>> >> >> >>>> >> > 0) {
>>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>>>> >> >> >>>> >> >                     varDetails << *((char
>>>>> >> >> >>>> >> > *)vp->memBlock);
>>>>> >> >> >>>> >> >                 } else {
>>>>> >> >> >>>> >> >                     char *varmem = (char *)
>>>>> >> >> >>>> >> > (insds->lclbas +
>>>>> >> >> >>>> >> > vp->memBlockIndex);
>>>>> >> >> >>>> >> >                     varDetails << QVariant(varmem);
>>>>> >> >> >>>> >> >                 }
>>>>> >> >> >>>> >> >             } else if (strcmp(vp->varType->varTypeName,
>>>>> >> >> >>>> >> > "a")
>>>>> >> >> >>>> >> > ==
>>>>> >> >> >>>> >> > 0) {
>>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>>>> >> >> >>>> >> >                     varDetails << *((MYFLT
>>>>> >> >> >>>> >> > *)vp->memBlock) <<
>>>>> >> >> >>>> >> > *((MYFLT
>>>>> >> >> >>>> >> > *)vp->memBlock + 1)
>>>>> >> >> >>>> >> >                                << *((MYFLT
>>>>> >> >> >>>> >> > *)vp->memBlock +
>>>>> >> >> >>>> >> > 2)<<
>>>>> >> >> >>>> >> > *((MYFLT
>>>>> >> >> >>>> >> > *)vp->memBlock + 3);
>>>>> >> >> >>>> >> >                 } else {
>>>>> >> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>>>>> >> >> >>>> >> > vp->memBlockIndex;
>>>>> >> >> >>>> >> >                     varDetails << QVariant(*varmem);
>>>>> >> >> >>>> >> >                 }
>>>>> >> >> >>>> >> >             } else {
>>>>> >> >> >>>> >> >                 varDetails << QVariant();
>>>>> >> >> >>>> >> >             }
>>>>> >> >> >>>> >> >             varDetails << vp->varType->varTypeName;
>>>>> >> >> >>>> >> >             cs->m_varList << varDetails;
>>>>> >> >> >>>> >> >         }
>>>>> >> >> >>>> >> >         vp = vp->next;
>>>>> >> >> >>>> >> >     }
>>>>> >> >> >>>> >> >     cs->variableMutex.unlock();
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >     //Copy active instrument list
>>>>> >> >> >>>> >> >     cs->instrumentMutex.lock();
>>>>> >> >> >>>> >> >     cs->m_instrumentList.clear();
>>>>> >> >> >>>> >> >     INSDS *in = insds;
>>>>> >> >> >>>> >> >     while (in->prvact) {
>>>>> >> >> >>>> >> >         in = in->prvact;
>>>>> >> >> >>>> >> >     }
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >     while (in) {
>>>>> >> >> >>>> >> >         QVariantList instance;
>>>>> >> >> >>>> >> >         instance << in->p1;
>>>>> >> >> >>>> >> >         instance << QString("%1
>>>>> >> >> >>>> >> > %2").arg(in->p2).arg(in->p3);
>>>>> >> >> >>>> >> >         instance << in->kcounter;
>>>>> >> >> >>>> >> >         cs->m_instrumentList << instance;
>>>>> >> >> >>>> >> >         in = in->nxtact;
>>>>> >> >> >>>> >> >     }
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >     cs->instrumentMutex.unlock();
>>>>> >> >> >>>> >> >     emit cs->breakpointReached();
>>>>> >> >> >>>> >> > }
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > And yes you can actually click the pause button and the
>>>>> >> >> >>>> >> > debugger
>>>>> >> >> >>>> >> > will
>>>>> >> >> >>>> >> > stop
>>>>> >> >> >>>> >> > and show you where it is, even if there is no breakpoint
>>>>> >> >> >>>> >> > there.
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > Cheers,
>>>>> >> >> >>>> >> > Andrés
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>>>> >> >> >>>> >> > <rorywalsh@ear.ie>
>>>>> >> >> >>>> >> > wrote:
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >> Thanks. And how would one query the value of a variable
>>>>> >> >> >>>> >> >> once
>>>>> >> >> >>>> >> >> the
>>>>> >> >> >>>> >> >> breakpoint is hit? How does one access that information
>>>>> >> >> >>>> >> >> from
>>>>> >> >> >>>> >> >> the
>>>>> >> >> >>>> >> >> Csound structure? Btw, your debugger interface in
>>>>> >> >> >>>> >> >> CsounsQT
>>>>> >> >> >>>> >> >> looks
>>>>> >> >> >>>> >> >> really top-class. I could hope to implement anything as
>>>>> >> >> >>>> >> >> professional
>>>>> >> >> >>>> >> >> as that, but I like the idea of being able to stop and
>>>>> >> >> >>>> >> >> query
>>>>> >> >> >>>> >> >> variables
>>>>> >> >> >>>> >> >> on the fly. Is this possible, your screen-shot seems to
>>>>> >> >> >>>> >> >> indicate
>>>>> >> >> >>>> >> >> so?
>>>>> >> >> >>>> >> >> This will be so useful in teaching!
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >> On 10 April 2014 21:58, Andres Cabrera
>>>>> >> >> >>>> >> >> <mantaraya36@gmail.com>
>>>>> >> >> >>>> >> >> wrote:
>>>>> >> >> >>>> >> >> > Also, since the breakpoint callback gets the CSOUND
>>>>> >> >> >>>> >> >> > structure, it
>>>>> >> >> >>>> >> >> > can
>>>>> >> >> >>>> >> >> > get
>>>>> >> >> >>>> >> >> > all of its information from there.
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> > Cheers,
>>>>> >> >> >>>> >> >> > Andrés
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>>>>> >> >> >>>> >> >> > <mantaraya36@gmail.com>
>>>>> >> >> >>>> >> >> > wrote:
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >> Hi Rory,
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >> Essentially, your application could do something
>>>>> >> >> >>>> >> >> >> like:
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >>     int break_count = 0;
>>>>> >> >> >>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>>>>> >> >> >>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig oscil 1,
>>>>> >> >> >>>> >> >> >> p4\nendin\n");
>>>>> >> >> >>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1 440");
>>>>> >> >> >>>> >> >> >>     csoundStart(csound);
>>>>> >> >> >>>> >> >> >>     csoundDebuggerInit(csound);
>>>>> >> >> >>>> >> >> >>     csoundSetBreakpointCallback(csound, brkpt_cb,
>>>>> >> >> >>>> >> >> >> (void
>>>>> >> >> >>>> >> >> >> *)
>>>>> >> >> >>>> >> >> >> &break_count);
>>>>> >> >> >>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1, 0);
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >>     for (i = 0; i < 1000; i++) {
>>>>> >> >> >>>> >> >> >>         csoundPerformKsmps(csound);
>>>>> >> >> >>>> >> >> >>     }
>>>>> >> >> >>>> >> >> >>     CU_ASSERT(break_count == 1);
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >>     csoundDebuggerClean(csound);
>>>>> >> >> >>>> >> >> >>     csoundDestroy(csound);
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >> Whenever the breakpoint is reached, the breakpoint
>>>>> >> >> >>>> >> >> >> callback
>>>>> >> >> >>>> >> >> >> is
>>>>> >> >> >>>> >> >> >> called.
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >> Currently only instrument breakpoints are
>>>>> >> >> >>>> >> >> >> implemented
>>>>> >> >> >>>> >> >> >> (i.e.
>>>>> >> >> >>>> >> >> >> the
>>>>> >> >> >>>> >> >> >> debugger
>>>>> >> >> >>>> >> >> >> breaks when an instrument is active), but I also
>>>>> >> >> >>>> >> >> >> want to
>>>>> >> >> >>>> >> >> >> add
>>>>> >> >> >>>> >> >> >> line
>>>>> >> >> >>>> >> >> >> breakpoints.
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >> Cheers,
>>>>> >> >> >>>> >> >> >> Andrés
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>>>> >> >> >>>> >> >> >> <rorywalsh@ear.ie>
>>>>> >> >> >>>> >> >> >> wrote:
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> > Wow, this looks super cool Andres. I'm just
>>>>> >> >> >>>> >> >> >> > looking
>>>>> >> >> >>>> >> >> >> > through
>>>>> >> >> >>>> >> >> >> > the
>>>>> >> >> >>>> >> >> >> > code
>>>>> >> >> >>>> >> >> >> > now. Do you have a basic example of setting this
>>>>> >> >> >>>> >> >> >> > up?
>>>>> >> >> >>>> >> >> >> > The
>>>>> >> >> >>>> >> >> >> > CUnit
>>>>> >> >> >>>> >> >> >> > stuff
>>>>> >> >> >>>> >> >> >> > in that debugger test code you posted is confusing
>>>>> >> >> >>>> >> >> >> > me.
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera
>>>>> >> >> >>>> >> >> >> > <mantaraya36@gmail.com>
>>>>> >> >> >>>> >> >> >> > wrote:
>>>>> >> >> >>>> >> >> >> > > Hi,
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > The Csound debugger I'm working on is finally
>>>>> >> >> >>>> >> >> >> > > getting
>>>>> >> >> >>>> >> >> >> > > to
>>>>> >> >> >>>> >> >> >> > > a
>>>>> >> >> >>>> >> >> >> > > useful
>>>>> >> >> >>>> >> >> >> > > testing
>>>>> >> >> >>>> >> >> >> > > stage.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > I've been doing the work in the csdebugger
>>>>> >> >> >>>> >> >> >> > > branch, if
>>>>> >> >> >>>> >> >> >> > > you
>>>>> >> >> >>>> >> >> >> > > have
>>>>> >> >> >>>> >> >> >> > > time,
>>>>> >> >> >>>> >> >> >> > > please
>>>>> >> >> >>>> >> >> >> > > have a look.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > To build the debugger, you will need to add to
>>>>> >> >> >>>> >> >> >> > > cmake:
>>>>> >> >> >>>> >> >> >> > > -DBUILD_DEBUGGER=1
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > You will find some simple tests of the API here:
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > I have written a debugger front-end within
>>>>> >> >> >>>> >> >> >> > > CsoundQt,
>>>>> >> >> >>>> >> >> >> > > which
>>>>> >> >> >>>> >> >> >> > > you
>>>>> >> >> >>>> >> >> >> > > are
>>>>> >> >> >>>> >> >> >> > > welcome
>>>>> >> >> >>>> >> >> >> > > to try out too:
>>>>> >> >> >>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > Some internal details:
>>>>> >> >> >>>> >> >> >> > > The debugger interface is found at:
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > Although the debugger functions are part of the
>>>>> >> >> >>>> >> >> >> > > API,
>>>>> >> >> >>>> >> >> >> > > I
>>>>> >> >> >>>> >> >> >> > > think
>>>>> >> >> >>>> >> >> >> > > it's
>>>>> >> >> >>>> >> >> >> > > cleaner to
>>>>> >> >> >>>> >> >> >> > > have them in their own header, as they are also
>>>>> >> >> >>>> >> >> >> > > a
>>>>> >> >> >>>> >> >> >> > > compile
>>>>> >> >> >>>> >> >> >> > > time
>>>>> >> >> >>>> >> >> >> > > option.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > Because the changes are somewhat invasive, I
>>>>> >> >> >>>> >> >> >> > > chose to
>>>>> >> >> >>>> >> >> >> > > make
>>>>> >> >> >>>> >> >> >> > > the
>>>>> >> >> >>>> >> >> >> > > kperf
>>>>> >> >> >>>> >> >> >> > > function a pointer within the CSOUND struct that
>>>>> >> >> >>>> >> >> >> > > defaults to
>>>>> >> >> >>>> >> >> >> > > nodebug.
>>>>> >> >> >>>> >> >> >> > > When
>>>>> >> >> >>>> >> >> >> > > the debugger is initialized the kperf function
>>>>> >> >> >>>> >> >> >> > > pointer
>>>>> >> >> >>>> >> >> >> > > is
>>>>> >> >> >>>> >> >> >> > > switched
>>>>> >> >> >>>> >> >> >> > > to
>>>>> >> >> >>>> >> >> >> > > the
>>>>> >> >> >>>> >> >> >> > > debug version, and switched back when the
>>>>> >> >> >>>> >> >> >> > > debugger is
>>>>> >> >> >>>> >> >> >> > > disabled
>>>>> >> >> >>>> >> >> >> > > csoundDebuggerInit() and csoundDebuggerClean()
>>>>> >> >> >>>> >> >> >> > > functions.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > When a breakpoint is reached, a callback
>>>>> >> >> >>>> >> >> >> > > function
>>>>> >> >> >>>> >> >> >> > > that
>>>>> >> >> >>>> >> >> >> > > has
>>>>> >> >> >>>> >> >> >> > > been
>>>>> >> >> >>>> >> >> >> > > registered
>>>>> >> >> >>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND *csound,
>>>>> >> >> >>>> >> >> >> > > breakpoint_cb_t
>>>>> >> >> >>>> >> >> >> > > bkpt_cb,
>>>>> >> >> >>>> >> >> >> > > void *userdata) is called.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > When a breakpoint is reached, after the callback
>>>>> >> >> >>>> >> >> >> > > is
>>>>> >> >> >>>> >> >> >> > > called,
>>>>> >> >> >>>> >> >> >> > > the
>>>>> >> >> >>>> >> >> >> > > kperf
>>>>> >> >> >>>> >> >> >> > > function continues running as usual, providing
>>>>> >> >> >>>> >> >> >> > > empty
>>>>> >> >> >>>> >> >> >> > > buffers
>>>>> >> >> >>>> >> >> >> > > to
>>>>> >> >> >>>> >> >> >> > > the
>>>>> >> >> >>>> >> >> >> > > audio
>>>>> >> >> >>>> >> >> >> > > hardware, and not incrementing the time counters
>>>>> >> >> >>>> >> >> >> > > in
>>>>> >> >> >>>> >> >> >> > > musmon.
>>>>> >> >> >>>> >> >> >> > > When
>>>>> >> >> >>>> >> >> >> > > a
>>>>> >> >> >>>> >> >> >> > > continue
>>>>> >> >> >>>> >> >> >> > > is reached, the graph traversing continues where
>>>>> >> >> >>>> >> >> >> > > it
>>>>> >> >> >>>> >> >> >> > > left
>>>>> >> >> >>>> >> >> >> > > off.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > There are probably still a few bugs, but it's
>>>>> >> >> >>>> >> >> >> > > now
>>>>> >> >> >>>> >> >> >> > > working on
>>>>> >> >> >>>> >> >> >> > > my
>>>>> >> >> >>>> >> >> >> > > simple
>>>>> >> >> >>>> >> >> >> > > tests.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > Any ideas, thoughts and suggestions are very
>>>>> >> >> >>>> >> >> >> > > welcome.
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > Cheers,
>>>>> >> >> >>>> >> >> >> > > Andrés
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > ------------------------------------------------------------------------------
>>>>> >> >> >>>> >> >> >> > > Put Bad Developers to Shame
>>>>> >> >> >>>> >> >> >> > > Dominate Development with Jenkins Continuous
>>>>> >> >> >>>> >> >> >> > > Integration
>>>>> >> >> >>>> >> >> >> > > Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> >> >> >> > > Start a new project now. Try Jenkins in the
>>>>> >> >> >>>> >> >> >> > > cloud.
>>>>> >> >> >>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> >> >> >> > > _______________________________________________
>>>>> >> >> >>>> >> >> >> > > Csound-devel mailing list
>>>>> >> >> >>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >> >> >> > >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> > ------------------------------------------------------------------------------
>>>>> >> >> >>>> >> >> >> > Put Bad Developers to Shame
>>>>> >> >> >>>> >> >> >> > Dominate Development with Jenkins Continuous
>>>>> >> >> >>>> >> >> >> > Integration
>>>>> >> >> >>>> >> >> >> > Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> >> >> >> > Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> >> >> >> > _______________________________________________
>>>>> >> >> >>>> >> >> >> > Csound-devel mailing list
>>>>> >> >> >>>> >> >> >> > Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> >
>>>>> >> >> >>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >> >> >>
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> > ------------------------------------------------------------------------------
>>>>> >> >> >>>> >> >> > Put Bad Developers to Shame
>>>>> >> >> >>>> >> >> > Dominate Development with Jenkins Continuous
>>>>> >> >> >>>> >> >> > Integration
>>>>> >> >> >>>> >> >> > Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> >> >> > Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> >> >> > _______________________________________________
>>>>> >> >> >>>> >> >> > Csound-devel mailing list
>>>>> >> >> >>>> >> >> > Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >> >> >
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >> ------------------------------------------------------------------------------
>>>>> >> >> >>>> >> >> Put Bad Developers to Shame
>>>>> >> >> >>>> >> >> Dominate Development with Jenkins Continuous
>>>>> >> >> >>>> >> >> Integration
>>>>> >> >> >>>> >> >> Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> >> >> _______________________________________________
>>>>> >> >> >>>> >> >> Csound-devel mailing list
>>>>> >> >> >>>> >> >> Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> >> >>
>>>>> >> >> >>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > ------------------------------------------------------------------------------
>>>>> >> >> >>>> >> > Put Bad Developers to Shame
>>>>> >> >> >>>> >> > Dominate Development with Jenkins Continuous Integration
>>>>> >> >> >>>> >> > Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> >> > Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> >> > _______________________________________________
>>>>> >> >> >>>> >> > Csound-devel mailing list
>>>>> >> >> >>>> >> > Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >> >
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >>
>>>>> >> >> >>>> >> ------------------------------------------------------------------------------
>>>>> >> >> >>>> >> Put Bad Developers to Shame
>>>>> >> >> >>>> >> Dominate Development with Jenkins Continuous Integration
>>>>> >> >> >>>> >> Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> >> Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> >> _______________________________________________
>>>>> >> >> >>>> >> Csound-devel mailing list
>>>>> >> >> >>>> >> Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> >
>>>>> >> >> >>>> > ------------------------------------------------------------------------------
>>>>> >> >> >>>> > Put Bad Developers to Shame
>>>>> >> >> >>>> > Dominate Development with Jenkins Continuous Integration
>>>>> >> >> >>>> > Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> > Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> > http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> > _______________________________________________
>>>>> >> >> >>>> > Csound-devel mailing list
>>>>> >> >> >>>> > Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>> >
>>>>> >> >> >>>>
>>>>> >> >> >>>>
>>>>> >> >> >>>>
>>>>> >> >> >>>>
>>>>> >> >> >>>>
>>>>> >> >> >>>> ------------------------------------------------------------------------------
>>>>> >> >> >>>> Put Bad Developers to Shame
>>>>> >> >> >>>> Dominate Development with Jenkins Continuous Integration
>>>>> >> >> >>>> Continuously Automate Build, Test & Deployment
>>>>> >> >> >>>> Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>>> _______________________________________________
>>>>> >> >> >>>> Csound-devel mailing list
>>>>> >> >> >>>> Csound-devel@lists.sourceforge.net
>>>>> >> >> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>>
>>>>> >> >> >>> ------------------------------------------------------------------------------
>>>>> >> >> >>> Put Bad Developers to Shame
>>>>> >> >> >>> Dominate Development with Jenkins Continuous Integration
>>>>> >> >> >>> Continuously Automate Build, Test & Deployment
>>>>> >> >> >>> Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> >>> http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> >>> _______________________________________________
>>>>> >> >> >>> Csound-devel mailing list
>>>>> >> >> >>> Csound-devel@lists.sourceforge.net
>>>>> >> >> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >> >>>
>>>>> >> >> >>
>>>>> >> >>
>>>>> >> >>
>>>>> >> >>
>>>>> >> >>
>>>>> >> >> ------------------------------------------------------------------------------
>>>>> >> >> Put Bad Developers to Shame
>>>>> >> >> Dominate Development with Jenkins Continuous Integration
>>>>> >> >> Continuously Automate Build, Test & Deployment
>>>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> >> _______________________________________________
>>>>> >> >> Csound-devel mailing list
>>>>> >> >> Csound-devel@lists.sourceforge.net
>>>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >
>>>>> >> >
>>>>> >> >
>>>>> >> >
>>>>> >> >
>>>>> >> > ------------------------------------------------------------------------------
>>>>> >> > Put Bad Developers to Shame
>>>>> >> > Dominate Development with Jenkins Continuous Integration
>>>>> >> > Continuously Automate Build, Test & Deployment
>>>>> >> > Start a new project now. Try Jenkins in the cloud.
>>>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> > _______________________________________________
>>>>> >> > Csound-devel mailing list
>>>>> >> > Csound-devel@lists.sourceforge.net
>>>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >> >
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> ------------------------------------------------------------------------------
>>>>> >> Put Bad Developers to Shame
>>>>> >> Dominate Development with Jenkins Continuous Integration
>>>>> >> Continuously Automate Build, Test & Deployment
>>>>> >> Start a new project now. Try Jenkins in the cloud.
>>>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>>>> >> _______________________________________________
>>>>> >> Csound-devel mailing list
>>>>> >> Csound-devel@lists.sourceforge.net
>>>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >
>>>>> >
>>>>> >
>>>>> >
>>>>> > ------------------------------------------------------------------------------
>>>>> > Put Bad Developers to Shame
>>>>> > Dominate Development with Jenkins Continuous Integration
>>>>> > Continuously Automate Build, Test & Deployment
>>>>> > Start a new project now. Try Jenkins in the cloud.
>>>>> > http://p.sf.net/sfu/13600_Cloudbees
>>>>> > _______________________________________________
>>>>> > Csound-devel mailing list
>>>>> > Csound-devel@lists.sourceforge.net
>>>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>> >
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> Put Bad Developers to Shame
>>>>> Dominate Development with Jenkins Continuous Integration
>>>>> Continuously Automate Build, Test & Deployment
>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>> _______________________________________________
>>>>> Csound-devel mailing list
>>>>> Csound-devel@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>
>>>>
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-11 22:51
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
AttachmentscsddebuggerExample.cpp  None  None  
This is really great Andres. I threw together a simple command line
application that perhaps you could add to the test suite? I just
robbed what I could understand from yours and slotted it into as basic
an example as I could think off.

Usage:

./csddebug [filename.csd] [instrument number] [ksmps offset]

Once the breakpoint at the given k-cycle is hit the debugger will
print the values of each of the variables in the chosen instrument ala

==============================================
Breakpoint at instr 1
Number of k-cycles into performance: 100
------------------------------------------------------
VarName:Schannel    value = hello         varType[S]
VarName:k1    value = 0.580499     varType[k]
VarName:aout    value = 0.0823895     varType[a]
VarName:ksmps     varType[r]

I have to say hats off. This is very clever. I can't wait to add
something like this to Cabbage.


On 11 April 2014 22:08, Andres Cabrera  wrote:
> Hi,
>
> Good to hear you've got it going. The only performance penalty if you don't
> call csoundDebuggerInit is that kperf is a function pointer rather than a
> function. If you have called csoundDebuggerInit, then you will be running a
> slightly heavier kperf_debug function, which needs to check whether there
> are new debug commands (like break, continue, or new breakpoints), and which
> needs to check on every new instrument in the chain whether it matches one
> of the existing breakpoints. It's not too much, since it's done at control
> rate, but there is a penalty. Performance during debugging will also get a
> little worse once line breakpoints are implemented because there will have
> to be a check for every ugen called within an instrument. But still I think
> the difference in performance between debug and no debug will not be as
> large as it is for C.
>
> Cheers,
> Andrés
>
>
>
> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh  wrote:
>>
>> Sorry for the noise! I'm properly checked out now and enjoying the
>> ride! This is great. Are there any performance costs if no breakpoint
>> is set?
>>
>> On 11 April 2014 09:05, Rory Walsh  wrote:
>> > I assume that since I am getting no build or linker errors that there
>> > is something amiss in my code?
>> >
>> > On 11 April 2014 01:51, Rory Walsh  wrote:
>> >> No. None at all?
>> >>
>> >> On 11 Apr 2014 00:36, "Andres Cabrera"  wrote:
>> >>>
>> >>> Are you getting build errors?
>> >>>
>> >>> Cheers,
>> >>> Andrés
>> >>>
>> >>>
>> >>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>> >>> 
>> >>> wrote:
>> >>>>
>> >>>> Did you checkout the csdebugger branch for csound and run cmake with
>> >>>> -DBUILD_DEBUGGER=1?
>> >>>>
>> >>>> Cheers,
>> >>>> Andrés
>> >>>>
>> >>>>
>> >>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh  wrote:
>> >>>>>
>> >>>>> Still no luck I'm afraid. Are you sure my code is ok?
>> >>>>>
>> >>>>> On 11 April 2014 00:26, Andres Cabrera 
>> >>>>> wrote:
>> >>>>> > easier to do:
>> >>>>> >
>> >>>>> > cmake -DBUILD_DEBUGGER=1
>> >>>>> >
>> >>>>> > Cheers,
>> >>>>> > Andrés
>> >>>>> >
>> >>>>> >
>> >>>>> > On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh 
>> >>>>> > wrote:
>> >>>>> >>
>> >>>>> >> I'm probably adding the wrong lines to cmakelists.txt?
>> >>>>> >>
>> >>>>> >> set (BUILD_DEBUGGER 1)
>> >>>>> >>
>> >>>>> >> Is that right?
>> >>>>> >>
>> >>>>> >> On 11 April 2014 00:06, Andres Cabrera 
>> >>>>> >> wrote:
>> >>>>> >> > Yes it would :)
>> >>>>> >> >
>> >>>>> >> > Cheers,
>> >>>>> >> > Andrés
>> >>>>> >> >
>> >>>>> >> >
>> >>>>> >> > On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh 
>> >>>>> >> > wrote:
>> >>>>> >> >>
>> >>>>> >> >> It would help if I built with the debugger enabled :)
>> >>>>> >> >>
>> >>>>> >> >> On 11 April 2014 00:01, Rory Walsh  wrote:
>> >>>>> >> >> > I'm using a csd file instead of compiling orcs and scores,
>> >>>>> >> >> > is
>> >>>>> >> >> > this
>> >>>>> >> >> > allowed? My breakpoint callback is never being hit. What am
>> >>>>> >> >> > I
>> >>>>> >> >> > missing?
>> >>>>> >> >> >
>> >>>>> >> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>> >>>>> >> >> > *userdata);
>> >>>>> >> >> >
>> >>>>> >> >> > int main(int argc, char *argv[])
>> >>>>> >> >> > {
>> >>>>> >> >> >     int break_count = 0;
>> >>>>> >> >> >     CSOUND* csound = csoundCreate(NULL);
>> >>>>> >> >> >     csoundCompile(csound,argc,argv);
>> >>>>> >> >> >     csoundStart(csound);
>> >>>>> >> >> >     csoundDebuggerInit(csound);
>> >>>>> >> >> >     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >>>>> >> >> > &break_count);
>> >>>>> >> >> >     csoundSetInstrumentBreakpoint(csound, 1, 0);
>> >>>>> >> >> >
>> >>>>> >> >> >     while (csoundPerformKsmps(csound)==0);
>> >>>>> >> >> >
>> >>>>> >> >> >     csoundDebuggerClean(csound);
>> >>>>> >> >> >     csoundDestroy(csound);
>> >>>>> >> >> > }
>> >>>>> >> >> >
>> >>>>> >> >> > //this never gets called.
>> >>>>> >> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>> >>>>> >> >> > *userdata)
>> >>>>> >> >> > {
>> >>>>> >> >> >     int *count = (int *) userdata;
>> >>>>> >> >> >     printf("bkpt line %i instr %f\n", line, instr);
>> >>>>> >> >> >     *count = *count + 1;
>> >>>>> >> >> > };
>> >>>>> >> >> >
>> >>>>> >> >> > On 10 April 2014 22:56, Rory Walsh  wrote:
>> >>>>> >> >> >> That's great. Thanks.
>> >>>>> >> >> >>
>> >>>>> >> >> >> On 10 Apr 2014 22:44, "Andres Cabrera"
>> >>>>> >> >> >> 
>> >>>>> >> >> >> wrote:
>> >>>>> >> >> >>>
>> >>>>> >> >> >>> Currently only instrument breakpoints are implemented...
>> >>>>> >> >> >>>
>> >>>>> >> >> >>> Cheers,
>> >>>>> >> >> >>> Andrés
>> >>>>> >> >> >>>
>> >>>>> >> >> >>>
>> >>>>> >> >> >>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>> >>>>> >> >> >>> 
>> >>>>> >> >> >>> wrote:
>> >>>>> >> >> >>>>
>> >>>>> >> >> >>>> Ok, that sounds good. To help get my head around this I
>> >>>>> >> >> >>>> might
>> >>>>> >> >> >>>> try
>> >>>>> >> >> >>>> to
>> >>>>> >> >> >>>> write a simple command line app that passes a breakpoint
>> >>>>> >> >> >>>> line
>> >>>>> >> >> >>>> number
>> >>>>> >> >> >>>> as a parameter, and then when it hits, it will print out
>> >>>>> >> >> >>>> the
>> >>>>> >> >> >>>> values
>> >>>>> >> >> >>>> of
>> >>>>> >> >> >>>> each variable in that instrument. That would be a start.
>> >>>>> >> >> >>>>
>> >>>>> >> >> >>>> On 10 April 2014 22:29, Andres Cabrera
>> >>>>> >> >> >>>> 
>> >>>>> >> >> >>>> wrote:
>> >>>>> >> >> >>>> > Not exactly.
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> > the function:
>> >>>>> >> >> >>>> > csoundDebugGetInstrument(csound);
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> > Gives you a pointer to the currently active instrument
>> >>>>> >> >> >>>> > (where
>> >>>>> >> >> >>>> > the
>> >>>>> >> >> >>>> > debugger
>> >>>>> >> >> >>>> > interrupted execution). You can then get the
>> >>>>> >> >> >>>> > information
>> >>>>> >> >> >>>> > about
>> >>>>> >> >> >>>> > the
>> >>>>> >> >> >>>> > instrument instance (variables and time counters,
>> >>>>> >> >> >>>> > p-fields,
>> >>>>> >> >> >>>> > etc.)
>> >>>>> >> >> >>>> > from
>> >>>>> >> >> >>>> > it.
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> > The callback function is only called if a breakpoint is
>> >>>>> >> >> >>>> > reached,
>> >>>>> >> >> >>>> > which
>> >>>>> >> >> >>>> > is
>> >>>>> >> >> >>>> > checked inside csound's kperf function. There is a
>> >>>>> >> >> >>>> > linked
>> >>>>> >> >> >>>> > list
>> >>>>> >> >> >>>> > of
>> >>>>> >> >> >>>> > breakpoints (that is managed in a thread-safe way),
>> >>>>> >> >> >>>> > which
>> >>>>> >> >> >>>> > is
>> >>>>> >> >> >>>> > traversed
>> >>>>> >> >> >>>> > to
>> >>>>> >> >> >>>> > check if the current instrument matches a breakpoint.
>> >>>>> >> >> >>>> > For
>> >>>>> >> >> >>>> > line
>> >>>>> >> >> >>>> > breakpoints,
>> >>>>> >> >> >>>> > what will need to happen is that for every opcode that
>> >>>>> >> >> >>>> > is
>> >>>>> >> >> >>>> > executed,
>> >>>>> >> >> >>>> > it
>> >>>>> >> >> >>>> > is
>> >>>>> >> >> >>>> > checked whether it matches to a breakpoint line.
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> > Cheers,
>> >>>>> >> >> >>>> > Andrés
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>> >>>>> >> >> >>>> > 
>> >>>>> >> >> >>>> > wrote:
>> >>>>> >> >> >>>> >>
>> >>>>> >> >> >>>> >> So you grab the values for all the variables in a
>> >>>>> >> >> >>>> >> particular
>> >>>>> >> >> >>>> >> line
>> >>>>> >> >> >>>> >> each
>> >>>>> >> >> >>>> >> time this callback function is hit? Am I reading that
>> >>>>> >> >> >>>> >> right?
>> >>>>> >> >> >>>> >>
>> >>>>> >> >> >>>> >> On 10 April 2014 22:10, Andres Cabrera
>> >>>>> >> >> >>>> >> 
>> >>>>> >> >> >>>> >> wrote:
>> >>>>> >> >> >>>> >> > Hi,
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> > My breakpoint callback looks like this:
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> > void CsoundEngine::breakpointCallback(CSOUND
>> >>>>> >> >> >>>> >> > *csound,
>> >>>>> >> >> >>>> >> > int
>> >>>>> >> >> >>>> >> > line,
>> >>>>> >> >> >>>> >> > double
>> >>>>> >> >> >>>> >> > instr, void *udata)
>> >>>>> >> >> >>>> >> > {
>> >>>>> >> >> >>>> >> >     qDebug() <<"breakpointCallback " << line <<
>> >>>>> >> >> >>>> >> > instr;
>> >>>>> >> >> >>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>> >>>>> >> >> >>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>> >>>>> >> >> >>>> >> >     // Copy variable list
>> >>>>> >> >> >>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>> >>>>> >> >> >>>> >> >     cs->variableMutex.lock();
>> >>>>> >> >> >>>> >> >     cs->m_varList.clear();
>> >>>>> >> >> >>>> >> >     while (vp) {
>> >>>>> >> >> >>>> >> >         if (vp->varName[0] != '#') {
>> >>>>> >> >> >>>> >> >             QVariantList varDetails;
>> >>>>> >> >> >>>> >> >             varDetails << vp->varName;
>> >>>>> >> >> >>>> >> >             if (strcmp(vp->varType->varTypeName,
>> >>>>> >> >> >>>> >> > "i") ==
>> >>>>> >> >> >>>> >> > 0
>> >>>>> >> >> >>>> >> >                     ||
>> >>>>> >> >> >>>> >> > strcmp(vp->varType->varTypeName,
>> >>>>> >> >> >>>> >> > "k")
>> >>>>> >> >> >>>> >> > ==
>> >>>>> >> >> >>>> >> > 0) {
>> >>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>> >>>>> >> >> >>>> >> >                     varDetails << *((MYFLT
>> >>>>> >> >> >>>> >> > *)vp->memBlock);
>> >>>>> >> >> >>>> >> >                 } else {
>> >>>>> >> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >>>>> >> >> >>>> >> > vp->memBlockIndex;
>> >>>>> >> >> >>>> >> >                     varDetails << QVariant(*varmem);
>> >>>>> >> >> >>>> >> >                 }
>> >>>>> >> >> >>>> >> >             } else
>> >>>>> >> >> >>>> >> > if(strcmp(vp->varType->varTypeName,
>> >>>>> >> >> >>>> >> > "S")
>> >>>>> >> >> >>>> >> > ==
>> >>>>> >> >> >>>> >> > 0) {
>> >>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>> >>>>> >> >> >>>> >> >                     varDetails << *((char
>> >>>>> >> >> >>>> >> > *)vp->memBlock);
>> >>>>> >> >> >>>> >> >                 } else {
>> >>>>> >> >> >>>> >> >                     char *varmem = (char *)
>> >>>>> >> >> >>>> >> > (insds->lclbas +
>> >>>>> >> >> >>>> >> > vp->memBlockIndex);
>> >>>>> >> >> >>>> >> >                     varDetails << QVariant(varmem);
>> >>>>> >> >> >>>> >> >                 }
>> >>>>> >> >> >>>> >> >             } else if
>> >>>>> >> >> >>>> >> > (strcmp(vp->varType->varTypeName,
>> >>>>> >> >> >>>> >> > "a")
>> >>>>> >> >> >>>> >> > ==
>> >>>>> >> >> >>>> >> > 0) {
>> >>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>> >>>>> >> >> >>>> >> >                     varDetails << *((MYFLT
>> >>>>> >> >> >>>> >> > *)vp->memBlock) <<
>> >>>>> >> >> >>>> >> > *((MYFLT
>> >>>>> >> >> >>>> >> > *)vp->memBlock + 1)
>> >>>>> >> >> >>>> >> >                                << *((MYFLT
>> >>>>> >> >> >>>> >> > *)vp->memBlock +
>> >>>>> >> >> >>>> >> > 2)<<
>> >>>>> >> >> >>>> >> > *((MYFLT
>> >>>>> >> >> >>>> >> > *)vp->memBlock + 3);
>> >>>>> >> >> >>>> >> >                 } else {
>> >>>>> >> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>> >>>>> >> >> >>>> >> > vp->memBlockIndex;
>> >>>>> >> >> >>>> >> >                     varDetails << QVariant(*varmem);
>> >>>>> >> >> >>>> >> >                 }
>> >>>>> >> >> >>>> >> >             } else {
>> >>>>> >> >> >>>> >> >                 varDetails << QVariant();
>> >>>>> >> >> >>>> >> >             }
>> >>>>> >> >> >>>> >> >             varDetails << vp->varType->varTypeName;
>> >>>>> >> >> >>>> >> >             cs->m_varList << varDetails;
>> >>>>> >> >> >>>> >> >         }
>> >>>>> >> >> >>>> >> >         vp = vp->next;
>> >>>>> >> >> >>>> >> >     }
>> >>>>> >> >> >>>> >> >     cs->variableMutex.unlock();
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >     //Copy active instrument list
>> >>>>> >> >> >>>> >> >     cs->instrumentMutex.lock();
>> >>>>> >> >> >>>> >> >     cs->m_instrumentList.clear();
>> >>>>> >> >> >>>> >> >     INSDS *in = insds;
>> >>>>> >> >> >>>> >> >     while (in->prvact) {
>> >>>>> >> >> >>>> >> >         in = in->prvact;
>> >>>>> >> >> >>>> >> >     }
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >     while (in) {
>> >>>>> >> >> >>>> >> >         QVariantList instance;
>> >>>>> >> >> >>>> >> >         instance << in->p1;
>> >>>>> >> >> >>>> >> >         instance << QString("%1
>> >>>>> >> >> >>>> >> > %2").arg(in->p2).arg(in->p3);
>> >>>>> >> >> >>>> >> >         instance << in->kcounter;
>> >>>>> >> >> >>>> >> >         cs->m_instrumentList << instance;
>> >>>>> >> >> >>>> >> >         in = in->nxtact;
>> >>>>> >> >> >>>> >> >     }
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >     cs->instrumentMutex.unlock();
>> >>>>> >> >> >>>> >> >     emit cs->breakpointReached();
>> >>>>> >> >> >>>> >> > }
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> > And yes you can actually click the pause button and
>> >>>>> >> >> >>>> >> > the
>> >>>>> >> >> >>>> >> > debugger
>> >>>>> >> >> >>>> >> > will
>> >>>>> >> >> >>>> >> > stop
>> >>>>> >> >> >>>> >> > and show you where it is, even if there is no
>> >>>>> >> >> >>>> >> > breakpoint
>> >>>>> >> >> >>>> >> > there.
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> > Cheers,
>> >>>>> >> >> >>>> >> > Andrés
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>> >>>>> >> >> >>>> >> > 
>> >>>>> >> >> >>>> >> > wrote:
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >> Thanks. And how would one query the value of a
>> >>>>> >> >> >>>> >> >> variable
>> >>>>> >> >> >>>> >> >> once
>> >>>>> >> >> >>>> >> >> the
>> >>>>> >> >> >>>> >> >> breakpoint is hit? How does one access that
>> >>>>> >> >> >>>> >> >> information
>> >>>>> >> >> >>>> >> >> from
>> >>>>> >> >> >>>> >> >> the
>> >>>>> >> >> >>>> >> >> Csound structure? Btw, your debugger interface in
>> >>>>> >> >> >>>> >> >> CsounsQT
>> >>>>> >> >> >>>> >> >> looks
>> >>>>> >> >> >>>> >> >> really top-class. I could hope to implement
>> >>>>> >> >> >>>> >> >> anything as
>> >>>>> >> >> >>>> >> >> professional
>> >>>>> >> >> >>>> >> >> as that, but I like the idea of being able to stop
>> >>>>> >> >> >>>> >> >> and
>> >>>>> >> >> >>>> >> >> query
>> >>>>> >> >> >>>> >> >> variables
>> >>>>> >> >> >>>> >> >> on the fly. Is this possible, your screen-shot
>> >>>>> >> >> >>>> >> >> seems to
>> >>>>> >> >> >>>> >> >> indicate
>> >>>>> >> >> >>>> >> >> so?
>> >>>>> >> >> >>>> >> >> This will be so useful in teaching!
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >> On 10 April 2014 21:58, Andres Cabrera
>> >>>>> >> >> >>>> >> >> 
>> >>>>> >> >> >>>> >> >> wrote:
>> >>>>> >> >> >>>> >> >> > Also, since the breakpoint callback gets the
>> >>>>> >> >> >>>> >> >> > CSOUND
>> >>>>> >> >> >>>> >> >> > structure, it
>> >>>>> >> >> >>>> >> >> > can
>> >>>>> >> >> >>>> >> >> > get
>> >>>>> >> >> >>>> >> >> > all of its information from there.
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> > Cheers,
>> >>>>> >> >> >>>> >> >> > Andrés
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>> >>>>> >> >> >>>> >> >> > 
>> >>>>> >> >> >>>> >> >> > wrote:
>> >>>>> >> >> >>>> >> >> >>
>> >>>>> >> >> >>>> >> >> >> Hi Rory,
>> >>>>> >> >> >>>> >> >> >>
>> >>>>> >> >> >>>> >> >> >> Essentially, your application could do something
>> >>>>> >> >> >>>> >> >> >> like:
>> >>>>> >> >> >>>> >> >> >>
>> >>>>> >> >> >>>> >> >> >>     int break_count = 0;
>> >>>>> >> >> >>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>> >>>>> >> >> >>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig
>> >>>>> >> >> >>>> >> >> >> oscil 1,
>> >>>>> >> >> >>>> >> >> >> p4\nendin\n");
>> >>>>> >> >> >>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1
>> >>>>> >> >> >>>> >> >> >> 440");
>> >>>>> >> >> >>>> >> >> >>     csoundStart(csound);
>> >>>>> >> >> >>>> >> >> >>     csoundDebuggerInit(csound);
>> >>>>> >> >> >>>> >> >> >>     csoundSetBreakpointCallback(csound,
>> >>>>> >> >> >>>> >> >> >> brkpt_cb,
>> >>>>> >> >> >>>> >> >> >> (void
>> >>>>> >> >> >>>> >> >> >> *)
>> >>>>> >> >> >>>> >> >> >> &break_count);
>> >>>>> >> >> >>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1,
>> >>>>> >> >> >>>> >> >> >> 0);
>> >>>>> >> >> >>>> >> >> >>
>> >>>>> >> >> >>>> >> >> >>     for (i = 0; i < 1000; i++) {
>> >>>>> >> >> >>>> >> >> >>         csoundPerformKsmps(csound);
>> >>>>> >> >> >>>> >> >> >>     }
>> >>>>> >> >> >>>> >> >> >>     CU_ASSERT(break_count == 1);
>> >>>>> >> >> >>>> >> >> >>
>> >>>>> >> >> >>>> >> >> >>     csoundDebuggerClean(csound);
>> >>>>> >> >> >>>> >> >> >>     csoundDestroy(csound);
>> >>>>> >> >> >>>> >> >> >>
>> >>>>> >> >> >>>> >> >> >> Whenever the breakpoint is reached, the
>> >>>>> >> >> >>>> >> >> >> breakpoint
>> >>>>> >> >> >>>> >> >> >> callback
>> >>>>> >> >> >>>> >> >> >> is
>> >>>>> >> >> >>>> >> >> >> called.
>> >>>>> >> >> >>>> >> >> >>
>> >>>>> >> >> >>>> >> >> >> Currently only instrument breakpoints are
>> >>>>> >> >> >>>> >> >> >> implemented
>> >>>>> >> >> >>>> >> >> >> (i.e.
>> >>>>> >> >> >>>> >> >> >> the
>> >>>>> >> >> >>>> >> >> >> debugger
>> >>>>> >> >> >>>> >> >> >> breaks when an instrument is active), but I also
>> >>>>> >> >> >>>> >> >> >> want to
>> >>>>> >> >> >>>> >> >> >> add
>> >>>>> >> >> >>>> >> >> >> line
>> >>>>> >> >> >>>> >> >> >> breakpoints.
>> >>>>> >> >> >>>> >> >> >>
>> >>>>> >> >> >>>> >> >> >> Cheers,
>> >>>>> >> >> >>>> >> >> >> Andrés
>> >>>>> >> >> >>>> >> >> >>
>> >>>>> >> >> >>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>> >>>>> >> >> >>>> >> >> >> 
>> >>>>> >> >> >>>> >> >> >> wrote:
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> > Wow, this looks super cool Andres. I'm just
>> >>>>> >> >> >>>> >> >> >> > looking
>> >>>>> >> >> >>>> >> >> >> > through
>> >>>>> >> >> >>>> >> >> >> > the
>> >>>>> >> >> >>>> >> >> >> > code
>> >>>>> >> >> >>>> >> >> >> > now. Do you have a basic example of setting
>> >>>>> >> >> >>>> >> >> >> > this
>> >>>>> >> >> >>>> >> >> >> > up?
>> >>>>> >> >> >>>> >> >> >> > The
>> >>>>> >> >> >>>> >> >> >> > CUnit
>> >>>>> >> >> >>>> >> >> >> > stuff
>> >>>>> >> >> >>>> >> >> >> > in that debugger test code you posted is
>> >>>>> >> >> >>>> >> >> >> > confusing
>> >>>>> >> >> >>>> >> >> >> > me.
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera
>> >>>>> >> >> >>>> >> >> >> > 
>> >>>>> >> >> >>>> >> >> >> > wrote:
>> >>>>> >> >> >>>> >> >> >> > > Hi,
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > The Csound debugger I'm working on is
>> >>>>> >> >> >>>> >> >> >> > > finally
>> >>>>> >> >> >>>> >> >> >> > > getting
>> >>>>> >> >> >>>> >> >> >> > > to
>> >>>>> >> >> >>>> >> >> >> > > a
>> >>>>> >> >> >>>> >> >> >> > > useful
>> >>>>> >> >> >>>> >> >> >> > > testing
>> >>>>> >> >> >>>> >> >> >> > > stage.
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > I've been doing the work in the csdebugger
>> >>>>> >> >> >>>> >> >> >> > > branch, if
>> >>>>> >> >> >>>> >> >> >> > > you
>> >>>>> >> >> >>>> >> >> >> > > have
>> >>>>> >> >> >>>> >> >> >> > > time,
>> >>>>> >> >> >>>> >> >> >> > > please
>> >>>>> >> >> >>>> >> >> >> > > have a look.
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > To build the debugger, you will need to add
>> >>>>> >> >> >>>> >> >> >> > > to
>> >>>>> >> >> >>>> >> >> >> > > cmake:
>> >>>>> >> >> >>>> >> >> >> > > -DBUILD_DEBUGGER=1
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > You will find some simple tests of the API
>> >>>>> >> >> >>>> >> >> >> > > here:
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > I have written a debugger front-end within
>> >>>>> >> >> >>>> >> >> >> > > CsoundQt,
>> >>>>> >> >> >>>> >> >> >> > > which
>> >>>>> >> >> >>>> >> >> >> > > you
>> >>>>> >> >> >>>> >> >> >> > > are
>> >>>>> >> >> >>>> >> >> >> > > welcome
>> >>>>> >> >> >>>> >> >> >> > > to try out too:
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > Some internal details:
>> >>>>> >> >> >>>> >> >> >> > > The debugger interface is found at:
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > Although the debugger functions are part of
>> >>>>> >> >> >>>> >> >> >> > > the
>> >>>>> >> >> >>>> >> >> >> > > API,
>> >>>>> >> >> >>>> >> >> >> > > I
>> >>>>> >> >> >>>> >> >> >> > > think
>> >>>>> >> >> >>>> >> >> >> > > it's
>> >>>>> >> >> >>>> >> >> >> > > cleaner to
>> >>>>> >> >> >>>> >> >> >> > > have them in their own header, as they are
>> >>>>> >> >> >>>> >> >> >> > > also
>> >>>>> >> >> >>>> >> >> >> > > a
>> >>>>> >> >> >>>> >> >> >> > > compile
>> >>>>> >> >> >>>> >> >> >> > > time
>> >>>>> >> >> >>>> >> >> >> > > option.
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > Because the changes are somewhat invasive, I
>> >>>>> >> >> >>>> >> >> >> > > chose to
>> >>>>> >> >> >>>> >> >> >> > > make
>> >>>>> >> >> >>>> >> >> >> > > the
>> >>>>> >> >> >>>> >> >> >> > > kperf
>> >>>>> >> >> >>>> >> >> >> > > function a pointer within the CSOUND struct
>> >>>>> >> >> >>>> >> >> >> > > that
>> >>>>> >> >> >>>> >> >> >> > > defaults to
>> >>>>> >> >> >>>> >> >> >> > > nodebug.
>> >>>>> >> >> >>>> >> >> >> > > When
>> >>>>> >> >> >>>> >> >> >> > > the debugger is initialized the kperf
>> >>>>> >> >> >>>> >> >> >> > > function
>> >>>>> >> >> >>>> >> >> >> > > pointer
>> >>>>> >> >> >>>> >> >> >> > > is
>> >>>>> >> >> >>>> >> >> >> > > switched
>> >>>>> >> >> >>>> >> >> >> > > to
>> >>>>> >> >> >>>> >> >> >> > > the
>> >>>>> >> >> >>>> >> >> >> > > debug version, and switched back when the
>> >>>>> >> >> >>>> >> >> >> > > debugger is
>> >>>>> >> >> >>>> >> >> >> > > disabled
>> >>>>> >> >> >>>> >> >> >> > > csoundDebuggerInit() and
>> >>>>> >> >> >>>> >> >> >> > > csoundDebuggerClean()
>> >>>>> >> >> >>>> >> >> >> > > functions.
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > When a breakpoint is reached, a callback
>> >>>>> >> >> >>>> >> >> >> > > function
>> >>>>> >> >> >>>> >> >> >> > > that
>> >>>>> >> >> >>>> >> >> >> > > has
>> >>>>> >> >> >>>> >> >> >> > > been
>> >>>>> >> >> >>>> >> >> >> > > registered
>> >>>>> >> >> >>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND
>> >>>>> >> >> >>>> >> >> >> > > *csound,
>> >>>>> >> >> >>>> >> >> >> > > breakpoint_cb_t
>> >>>>> >> >> >>>> >> >> >> > > bkpt_cb,
>> >>>>> >> >> >>>> >> >> >> > > void *userdata) is called.
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > When a breakpoint is reached, after the
>> >>>>> >> >> >>>> >> >> >> > > callback
>> >>>>> >> >> >>>> >> >> >> > > is
>> >>>>> >> >> >>>> >> >> >> > > called,
>> >>>>> >> >> >>>> >> >> >> > > the
>> >>>>> >> >> >>>> >> >> >> > > kperf
>> >>>>> >> >> >>>> >> >> >> > > function continues running as usual,
>> >>>>> >> >> >>>> >> >> >> > > providing
>> >>>>> >> >> >>>> >> >> >> > > empty
>> >>>>> >> >> >>>> >> >> >> > > buffers
>> >>>>> >> >> >>>> >> >> >> > > to
>> >>>>> >> >> >>>> >> >> >> > > the
>> >>>>> >> >> >>>> >> >> >> > > audio
>> >>>>> >> >> >>>> >> >> >> > > hardware, and not incrementing the time
>> >>>>> >> >> >>>> >> >> >> > > counters
>> >>>>> >> >> >>>> >> >> >> > > in
>> >>>>> >> >> >>>> >> >> >> > > musmon.
>> >>>>> >> >> >>>> >> >> >> > > When
>> >>>>> >> >> >>>> >> >> >> > > a
>> >>>>> >> >> >>>> >> >> >> > > continue
>> >>>>> >> >> >>>> >> >> >> > > is reached, the graph traversing continues
>> >>>>> >> >> >>>> >> >> >> > > where
>> >>>>> >> >> >>>> >> >> >> > > it
>> >>>>> >> >> >>>> >> >> >> > > left
>> >>>>> >> >> >>>> >> >> >> > > off.
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > There are probably still a few bugs, but
>> >>>>> >> >> >>>> >> >> >> > > it's
>> >>>>> >> >> >>>> >> >> >> > > now
>> >>>>> >> >> >>>> >> >> >> > > working on
>> >>>>> >> >> >>>> >> >> >> > > my
>> >>>>> >> >> >>>> >> >> >> > > simple
>> >>>>> >> >> >>>> >> >> >> > > tests.
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > Any ideas, thoughts and suggestions are very
>> >>>>> >> >> >>>> >> >> >> > > welcome.
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > Cheers,
>> >>>>> >> >> >>>> >> >> >> > > Andrés
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > ------------------------------------------------------------------------------
>> >>>>> >> >> >>>> >> >> >> > > Put Bad Developers to Shame
>> >>>>> >> >> >>>> >> >> >> > > Dominate Development with Jenkins Continuous
>> >>>>> >> >> >>>> >> >> >> > > Integration
>> >>>>> >> >> >>>> >> >> >> > > Continuously Automate Build, Test &
>> >>>>> >> >> >>>> >> >> >> > > Deployment
>> >>>>> >> >> >>>> >> >> >> > > Start a new project now. Try Jenkins in the
>> >>>>> >> >> >>>> >> >> >> > > cloud.
>> >>>>> >> >> >>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > _______________________________________________
>> >>>>> >> >> >>>> >> >> >> > > Csound-devel mailing list
>> >>>>> >> >> >>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >> >> >>>> >> >> >> > >
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> > ------------------------------------------------------------------------------
>> >>>>> >> >> >>>> >> >> >> > Put Bad Developers to Shame
>> >>>>> >> >> >>>> >> >> >> > Dominate Development with Jenkins Continuous
>> >>>>> >> >> >>>> >> >> >> > Integration
>> >>>>> >> >> >>>> >> >> >> > Continuously Automate Build, Test & Deployment
>> >>>>> >> >> >>>> >> >> >> > Start a new project now. Try Jenkins in the
>> >>>>> >> >> >>>> >> >> >> > cloud.
>> >>>>> >> >> >>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> > _______________________________________________
>> >>>>> >> >> >>>> >> >> >> > Csound-devel mailing list
>> >>>>> >> >> >>>> >> >> >> > Csound-devel@lists.sourceforge.net
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> >
>> >>>>> >> >> >>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >> >> >>>> >> >> >>
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> > ------------------------------------------------------------------------------
>> >>>>> >> >> >>>> >> >> > Put Bad Developers to Shame
>> >>>>> >> >> >>>> >> >> > Dominate Development with Jenkins Continuous
>> >>>>> >> >> >>>> >> >> > Integration
>> >>>>> >> >> >>>> >> >> > Continuously Automate Build, Test & Deployment
>> >>>>> >> >> >>>> >> >> > Start a new project now. Try Jenkins in the
>> >>>>> >> >> >>>> >> >> > cloud.
>> >>>>> >> >> >>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> >> >> >>>> >> >> > _______________________________________________
>> >>>>> >> >> >>>> >> >> > Csound-devel mailing list
>> >>>>> >> >> >>>> >> >> > Csound-devel@lists.sourceforge.net
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >> >> >>>> >> >> >
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >> ------------------------------------------------------------------------------
>> >>>>> >> >> >>>> >> >> Put Bad Developers to Shame
>> >>>>> >> >> >>>> >> >> Dominate Development with Jenkins Continuous
>> >>>>> >> >> >>>> >> >> Integration
>> >>>>> >> >> >>>> >> >> Continuously Automate Build, Test & Deployment
>> >>>>> >> >> >>>> >> >> Start a new project now. Try Jenkins in the cloud.
>> >>>>> >> >> >>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> >> >> >>>> >> >> _______________________________________________
>> >>>>> >> >> >>>> >> >> Csound-devel mailing list
>> >>>>> >> >> >>>> >> >> Csound-devel@lists.sourceforge.net
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >>
>> >>>>> >> >> >>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> > ------------------------------------------------------------------------------
>> >>>>> >> >> >>>> >> > Put Bad Developers to Shame
>> >>>>> >> >> >>>> >> > Dominate Development with Jenkins Continuous
>> >>>>> >> >> >>>> >> > Integration
>> >>>>> >> >> >>>> >> > Continuously Automate Build, Test & Deployment
>> >>>>> >> >> >>>> >> > Start a new project now. Try Jenkins in the cloud.
>> >>>>> >> >> >>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> >> >> >>>> >> > _______________________________________________
>> >>>>> >> >> >>>> >> > Csound-devel mailing list
>> >>>>> >> >> >>>> >> > Csound-devel@lists.sourceforge.net
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >> >> >>>> >> >
>> >>>>> >> >> >>>> >>
>> >>>>> >> >> >>>> >>
>> >>>>> >> >> >>>> >>
>> >>>>> >> >> >>>> >>
>> >>>>> >> >> >>>> >>
>> >>>>> >> >> >>>> >>
>> >>>>> >> >> >>>> >>
>> >>>>> >> >> >>>> >> ------------------------------------------------------------------------------
>> >>>>> >> >> >>>> >> Put Bad Developers to Shame
>> >>>>> >> >> >>>> >> Dominate Development with Jenkins Continuous
>> >>>>> >> >> >>>> >> Integration
>> >>>>> >> >> >>>> >> Continuously Automate Build, Test & Deployment
>> >>>>> >> >> >>>> >> Start a new project now. Try Jenkins in the cloud.
>> >>>>> >> >> >>>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> >> >> >>>> >> _______________________________________________
>> >>>>> >> >> >>>> >> Csound-devel mailing list
>> >>>>> >> >> >>>> >> Csound-devel@lists.sourceforge.net
>> >>>>> >> >> >>>> >>
>> >>>>> >> >> >>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> > ------------------------------------------------------------------------------
>> >>>>> >> >> >>>> > Put Bad Developers to Shame
>> >>>>> >> >> >>>> > Dominate Development with Jenkins Continuous
>> >>>>> >> >> >>>> > Integration
>> >>>>> >> >> >>>> > Continuously Automate Build, Test & Deployment
>> >>>>> >> >> >>>> > Start a new project now. Try Jenkins in the cloud.
>> >>>>> >> >> >>>> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> >> >> >>>> > _______________________________________________
>> >>>>> >> >> >>>> > Csound-devel mailing list
>> >>>>> >> >> >>>> > Csound-devel@lists.sourceforge.net
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >> >> >>>> >
>> >>>>> >> >> >>>>
>> >>>>> >> >> >>>>
>> >>>>> >> >> >>>>
>> >>>>> >> >> >>>>
>> >>>>> >> >> >>>>
>> >>>>> >> >> >>>>
>> >>>>> >> >> >>>> ------------------------------------------------------------------------------
>> >>>>> >> >> >>>> Put Bad Developers to Shame
>> >>>>> >> >> >>>> Dominate Development with Jenkins Continuous Integration
>> >>>>> >> >> >>>> Continuously Automate Build, Test & Deployment
>> >>>>> >> >> >>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>> >> >> >>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> >> >> >>>> _______________________________________________
>> >>>>> >> >> >>>> Csound-devel mailing list
>> >>>>> >> >> >>>> Csound-devel@lists.sourceforge.net
>> >>>>> >> >> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >> >> >>>
>> >>>>> >> >> >>>
>> >>>>> >> >> >>>
>> >>>>> >> >> >>>
>> >>>>> >> >> >>>
>> >>>>> >> >> >>>
>> >>>>> >> >> >>>
>> >>>>> >> >> >>>
>> >>>>> >> >> >>> ------------------------------------------------------------------------------
>> >>>>> >> >> >>> Put Bad Developers to Shame
>> >>>>> >> >> >>> Dominate Development with Jenkins Continuous Integration
>> >>>>> >> >> >>> Continuously Automate Build, Test & Deployment
>> >>>>> >> >> >>> Start a new project now. Try Jenkins in the cloud.
>> >>>>> >> >> >>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> >> >> >>> _______________________________________________
>> >>>>> >> >> >>> Csound-devel mailing list
>> >>>>> >> >> >>> Csound-devel@lists.sourceforge.net
>> >>>>> >> >> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >> >> >>>
>> >>>>> >> >> >>
>> >>>>> >> >>
>> >>>>> >> >>
>> >>>>> >> >>
>> >>>>> >> >>
>> >>>>> >> >>
>> >>>>> >> >> ------------------------------------------------------------------------------
>> >>>>> >> >> Put Bad Developers to Shame
>> >>>>> >> >> Dominate Development with Jenkins Continuous Integration
>> >>>>> >> >> Continuously Automate Build, Test & Deployment
>> >>>>> >> >> Start a new project now. Try Jenkins in the cloud.
>> >>>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> >> >> _______________________________________________
>> >>>>> >> >> Csound-devel mailing list
>> >>>>> >> >> Csound-devel@lists.sourceforge.net
>> >>>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >> >
>> >>>>> >> >
>> >>>>> >> >
>> >>>>> >> >
>> >>>>> >> >
>> >>>>> >> >
>> >>>>> >> > ------------------------------------------------------------------------------
>> >>>>> >> > Put Bad Developers to Shame
>> >>>>> >> > Dominate Development with Jenkins Continuous Integration
>> >>>>> >> > Continuously Automate Build, Test & Deployment
>> >>>>> >> > Start a new project now. Try Jenkins in the cloud.
>> >>>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> >> > _______________________________________________
>> >>>>> >> > Csound-devel mailing list
>> >>>>> >> > Csound-devel@lists.sourceforge.net
>> >>>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >> >
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> ------------------------------------------------------------------------------
>> >>>>> >> Put Bad Developers to Shame
>> >>>>> >> Dominate Development with Jenkins Continuous Integration
>> >>>>> >> Continuously Automate Build, Test & Deployment
>> >>>>> >> Start a new project now. Try Jenkins in the cloud.
>> >>>>> >> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> >> _______________________________________________
>> >>>>> >> Csound-devel mailing list
>> >>>>> >> Csound-devel@lists.sourceforge.net
>> >>>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >
>> >>>>> >
>> >>>>> >
>> >>>>> >
>> >>>>> >
>> >>>>> > ------------------------------------------------------------------------------
>> >>>>> > Put Bad Developers to Shame
>> >>>>> > Dominate Development with Jenkins Continuous Integration
>> >>>>> > Continuously Automate Build, Test & Deployment
>> >>>>> > Start a new project now. Try Jenkins in the cloud.
>> >>>>> > http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> > _______________________________________________
>> >>>>> > Csound-devel mailing list
>> >>>>> > Csound-devel@lists.sourceforge.net
>> >>>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>> >
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> ------------------------------------------------------------------------------
>> >>>>> Put Bad Developers to Shame
>> >>>>> Dominate Development with Jenkins Continuous Integration
>> >>>>> Continuously Automate Build, Test & Deployment
>> >>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> _______________________________________________
>> >>>>> Csound-devel mailing list
>> >>>>> Csound-devel@lists.sourceforge.net
>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>
>> >>>>
>> >>>
>> >>>
>> >>>
>> >>>
>> >>> ------------------------------------------------------------------------------
>> >>> Put Bad Developers to Shame
>> >>> Dominate Development with Jenkins Continuous Integration
>> >>> Continuously Automate Build, Test & Deployment
>> >>> Start a new project now. Try Jenkins in the cloud.
>> >>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> _______________________________________________
>> >>> Csound-devel mailing list
>> >>> Csound-devel@lists.sourceforge.net
>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>
>> >>
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

Date2014-04-12 13:20
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Hi Andres. All going good here. I just wanted to ask you something
about the implementation. Am I right in saying that whenever
csoundDebuggerInit() is called the CSOUND structure that is passed to
it gets appended with some csdebug_data_t data? This data block is
then zeroed and removed when one calls csoundDebuggerClean()? One
little issue I have is that I seem to have to call
csoundDebuggerInit() before I set my breakpoints, that is every time I
set a breakpoint or call any of the debugger methods I have to call
csoundDebuggerInit() first. Otherwise I get an assert in the
breakpoint functions because csound->csdebug_data_t is no longer
valid. I guess there is no harm in calling csoundDebuggerInit() each
time one updates or removes a breakpoint if all it does it
add/overwrite a data block in the underlying Csound object? I'd love
to see this in the next release. It would be nice to ship a command
line app in all packages that would work like the gdb debugger.

On 11 April 2014 22:51, Rory Walsh  wrote:
> This is really great Andres. I threw together a simple command line
> application that perhaps you could add to the test suite? I just
> robbed what I could understand from yours and slotted it into as basic
> an example as I could think off.
>
> Usage:
>
> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>
> Once the breakpoint at the given k-cycle is hit the debugger will
> print the values of each of the variables in the chosen instrument ala
>
> ==============================================
> Breakpoint at instr 1
> Number of k-cycles into performance: 100
> ------------------------------------------------------
> VarName:Schannel    value = hello         varType[S]
> VarName:k1    value = 0.580499     varType[k]
> VarName:aout    value = 0.0823895     varType[a]
> VarName:ksmps     varType[r]
>
> I have to say hats off. This is very clever. I can't wait to add
> something like this to Cabbage.
>
>
> On 11 April 2014 22:08, Andres Cabrera  wrote:
>> Hi,
>>
>> Good to hear you've got it going. The only performance penalty if you don't
>> call csoundDebuggerInit is that kperf is a function pointer rather than a
>> function. If you have called csoundDebuggerInit, then you will be running a
>> slightly heavier kperf_debug function, which needs to check whether there
>> are new debug commands (like break, continue, or new breakpoints), and which
>> needs to check on every new instrument in the chain whether it matches one
>> of the existing breakpoints. It's not too much, since it's done at control
>> rate, but there is a penalty. Performance during debugging will also get a
>> little worse once line breakpoints are implemented because there will have
>> to be a check for every ugen called within an instrument. But still I think
>> the difference in performance between debug and no debug will not be as
>> large as it is for C.
>>
>> Cheers,
>> Andrés
>>
>>
>>
>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh  wrote:
>>>
>>> Sorry for the noise! I'm properly checked out now and enjoying the
>>> ride! This is great. Are there any performance costs if no breakpoint
>>> is set?
>>>
>>> On 11 April 2014 09:05, Rory Walsh  wrote:
>>> > I assume that since I am getting no build or linker errors that there
>>> > is something amiss in my code?
>>> >
>>> > On 11 April 2014 01:51, Rory Walsh  wrote:
>>> >> No. None at all?
>>> >>
>>> >> On 11 Apr 2014 00:36, "Andres Cabrera"  wrote:
>>> >>>
>>> >>> Are you getting build errors?
>>> >>>
>>> >>> Cheers,
>>> >>> Andrés
>>> >>>
>>> >>>
>>> >>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>> >>> 
>>> >>> wrote:
>>> >>>>
>>> >>>> Did you checkout the csdebugger branch for csound and run cmake with
>>> >>>> -DBUILD_DEBUGGER=1?
>>> >>>>
>>> >>>> Cheers,
>>> >>>> Andrés
>>> >>>>
>>> >>>>
>>> >>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh  wrote:
>>> >>>>>
>>> >>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>> >>>>>
>>> >>>>> On 11 April 2014 00:26, Andres Cabrera 
>>> >>>>> wrote:
>>> >>>>> > easier to do:
>>> >>>>> >
>>> >>>>> > cmake -DBUILD_DEBUGGER=1
>>> >>>>> >
>>> >>>>> > Cheers,
>>> >>>>> > Andrés
>>> >>>>> >
>>> >>>>> >
>>> >>>>> > On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh 
>>> >>>>> > wrote:
>>> >>>>> >>
>>> >>>>> >> I'm probably adding the wrong lines to cmakelists.txt?
>>> >>>>> >>
>>> >>>>> >> set (BUILD_DEBUGGER 1)
>>> >>>>> >>
>>> >>>>> >> Is that right?
>>> >>>>> >>
>>> >>>>> >> On 11 April 2014 00:06, Andres Cabrera 
>>> >>>>> >> wrote:
>>> >>>>> >> > Yes it would :)
>>> >>>>> >> >
>>> >>>>> >> > Cheers,
>>> >>>>> >> > Andrés
>>> >>>>> >> >
>>> >>>>> >> >
>>> >>>>> >> > On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh 
>>> >>>>> >> > wrote:
>>> >>>>> >> >>
>>> >>>>> >> >> It would help if I built with the debugger enabled :)
>>> >>>>> >> >>
>>> >>>>> >> >> On 11 April 2014 00:01, Rory Walsh  wrote:
>>> >>>>> >> >> > I'm using a csd file instead of compiling orcs and scores,
>>> >>>>> >> >> > is
>>> >>>>> >> >> > this
>>> >>>>> >> >> > allowed? My breakpoint callback is never being hit. What am
>>> >>>>> >> >> > I
>>> >>>>> >> >> > missing?
>>> >>>>> >> >> >
>>> >>>>> >> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>>> >>>>> >> >> > *userdata);
>>> >>>>> >> >> >
>>> >>>>> >> >> > int main(int argc, char *argv[])
>>> >>>>> >> >> > {
>>> >>>>> >> >> >     int break_count = 0;
>>> >>>>> >> >> >     CSOUND* csound = csoundCreate(NULL);
>>> >>>>> >> >> >     csoundCompile(csound,argc,argv);
>>> >>>>> >> >> >     csoundStart(csound);
>>> >>>>> >> >> >     csoundDebuggerInit(csound);
>>> >>>>> >> >> >     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>>> >>>>> >> >> > &break_count);
>>> >>>>> >> >> >     csoundSetInstrumentBreakpoint(csound, 1, 0);
>>> >>>>> >> >> >
>>> >>>>> >> >> >     while (csoundPerformKsmps(csound)==0);
>>> >>>>> >> >> >
>>> >>>>> >> >> >     csoundDebuggerClean(csound);
>>> >>>>> >> >> >     csoundDestroy(csound);
>>> >>>>> >> >> > }
>>> >>>>> >> >> >
>>> >>>>> >> >> > //this never gets called.
>>> >>>>> >> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>>> >>>>> >> >> > *userdata)
>>> >>>>> >> >> > {
>>> >>>>> >> >> >     int *count = (int *) userdata;
>>> >>>>> >> >> >     printf("bkpt line %i instr %f\n", line, instr);
>>> >>>>> >> >> >     *count = *count + 1;
>>> >>>>> >> >> > };
>>> >>>>> >> >> >
>>> >>>>> >> >> > On 10 April 2014 22:56, Rory Walsh  wrote:
>>> >>>>> >> >> >> That's great. Thanks.
>>> >>>>> >> >> >>
>>> >>>>> >> >> >> On 10 Apr 2014 22:44, "Andres Cabrera"
>>> >>>>> >> >> >> 
>>> >>>>> >> >> >> wrote:
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>> Currently only instrument breakpoints are implemented...
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>> Cheers,
>>> >>>>> >> >> >>> Andrés
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>> >>>>> >> >> >>> 
>>> >>>>> >> >> >>> wrote:
>>> >>>>> >> >> >>>>
>>> >>>>> >> >> >>>> Ok, that sounds good. To help get my head around this I
>>> >>>>> >> >> >>>> might
>>> >>>>> >> >> >>>> try
>>> >>>>> >> >> >>>> to
>>> >>>>> >> >> >>>> write a simple command line app that passes a breakpoint
>>> >>>>> >> >> >>>> line
>>> >>>>> >> >> >>>> number
>>> >>>>> >> >> >>>> as a parameter, and then when it hits, it will print out
>>> >>>>> >> >> >>>> the
>>> >>>>> >> >> >>>> values
>>> >>>>> >> >> >>>> of
>>> >>>>> >> >> >>>> each variable in that instrument. That would be a start.
>>> >>>>> >> >> >>>>
>>> >>>>> >> >> >>>> On 10 April 2014 22:29, Andres Cabrera
>>> >>>>> >> >> >>>> 
>>> >>>>> >> >> >>>> wrote:
>>> >>>>> >> >> >>>> > Not exactly.
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> > the function:
>>> >>>>> >> >> >>>> > csoundDebugGetInstrument(csound);
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> > Gives you a pointer to the currently active instrument
>>> >>>>> >> >> >>>> > (where
>>> >>>>> >> >> >>>> > the
>>> >>>>> >> >> >>>> > debugger
>>> >>>>> >> >> >>>> > interrupted execution). You can then get the
>>> >>>>> >> >> >>>> > information
>>> >>>>> >> >> >>>> > about
>>> >>>>> >> >> >>>> > the
>>> >>>>> >> >> >>>> > instrument instance (variables and time counters,
>>> >>>>> >> >> >>>> > p-fields,
>>> >>>>> >> >> >>>> > etc.)
>>> >>>>> >> >> >>>> > from
>>> >>>>> >> >> >>>> > it.
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> > The callback function is only called if a breakpoint is
>>> >>>>> >> >> >>>> > reached,
>>> >>>>> >> >> >>>> > which
>>> >>>>> >> >> >>>> > is
>>> >>>>> >> >> >>>> > checked inside csound's kperf function. There is a
>>> >>>>> >> >> >>>> > linked
>>> >>>>> >> >> >>>> > list
>>> >>>>> >> >> >>>> > of
>>> >>>>> >> >> >>>> > breakpoints (that is managed in a thread-safe way),
>>> >>>>> >> >> >>>> > which
>>> >>>>> >> >> >>>> > is
>>> >>>>> >> >> >>>> > traversed
>>> >>>>> >> >> >>>> > to
>>> >>>>> >> >> >>>> > check if the current instrument matches a breakpoint.
>>> >>>>> >> >> >>>> > For
>>> >>>>> >> >> >>>> > line
>>> >>>>> >> >> >>>> > breakpoints,
>>> >>>>> >> >> >>>> > what will need to happen is that for every opcode that
>>> >>>>> >> >> >>>> > is
>>> >>>>> >> >> >>>> > executed,
>>> >>>>> >> >> >>>> > it
>>> >>>>> >> >> >>>> > is
>>> >>>>> >> >> >>>> > checked whether it matches to a breakpoint line.
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> > Cheers,
>>> >>>>> >> >> >>>> > Andrés
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>> >>>>> >> >> >>>> > 
>>> >>>>> >> >> >>>> > wrote:
>>> >>>>> >> >> >>>> >>
>>> >>>>> >> >> >>>> >> So you grab the values for all the variables in a
>>> >>>>> >> >> >>>> >> particular
>>> >>>>> >> >> >>>> >> line
>>> >>>>> >> >> >>>> >> each
>>> >>>>> >> >> >>>> >> time this callback function is hit? Am I reading that
>>> >>>>> >> >> >>>> >> right?
>>> >>>>> >> >> >>>> >>
>>> >>>>> >> >> >>>> >> On 10 April 2014 22:10, Andres Cabrera
>>> >>>>> >> >> >>>> >> 
>>> >>>>> >> >> >>>> >> wrote:
>>> >>>>> >> >> >>>> >> > Hi,
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> > My breakpoint callback looks like this:
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> > void CsoundEngine::breakpointCallback(CSOUND
>>> >>>>> >> >> >>>> >> > *csound,
>>> >>>>> >> >> >>>> >> > int
>>> >>>>> >> >> >>>> >> > line,
>>> >>>>> >> >> >>>> >> > double
>>> >>>>> >> >> >>>> >> > instr, void *udata)
>>> >>>>> >> >> >>>> >> > {
>>> >>>>> >> >> >>>> >> >     qDebug() <<"breakpointCallback " << line <<
>>> >>>>> >> >> >>>> >> > instr;
>>> >>>>> >> >> >>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>>> >>>>> >> >> >>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>>> >>>>> >> >> >>>> >> >     // Copy variable list
>>> >>>>> >> >> >>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>>> >>>>> >> >> >>>> >> >     cs->variableMutex.lock();
>>> >>>>> >> >> >>>> >> >     cs->m_varList.clear();
>>> >>>>> >> >> >>>> >> >     while (vp) {
>>> >>>>> >> >> >>>> >> >         if (vp->varName[0] != '#') {
>>> >>>>> >> >> >>>> >> >             QVariantList varDetails;
>>> >>>>> >> >> >>>> >> >             varDetails << vp->varName;
>>> >>>>> >> >> >>>> >> >             if (strcmp(vp->varType->varTypeName,
>>> >>>>> >> >> >>>> >> > "i") ==
>>> >>>>> >> >> >>>> >> > 0
>>> >>>>> >> >> >>>> >> >                     ||
>>> >>>>> >> >> >>>> >> > strcmp(vp->varType->varTypeName,
>>> >>>>> >> >> >>>> >> > "k")
>>> >>>>> >> >> >>>> >> > ==
>>> >>>>> >> >> >>>> >> > 0) {
>>> >>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>> >>>>> >> >> >>>> >> >                     varDetails << *((MYFLT
>>> >>>>> >> >> >>>> >> > *)vp->memBlock);
>>> >>>>> >> >> >>>> >> >                 } else {
>>> >>>>> >> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>>> >>>>> >> >> >>>> >> > vp->memBlockIndex;
>>> >>>>> >> >> >>>> >> >                     varDetails << QVariant(*varmem);
>>> >>>>> >> >> >>>> >> >                 }
>>> >>>>> >> >> >>>> >> >             } else
>>> >>>>> >> >> >>>> >> > if(strcmp(vp->varType->varTypeName,
>>> >>>>> >> >> >>>> >> > "S")
>>> >>>>> >> >> >>>> >> > ==
>>> >>>>> >> >> >>>> >> > 0) {
>>> >>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>> >>>>> >> >> >>>> >> >                     varDetails << *((char
>>> >>>>> >> >> >>>> >> > *)vp->memBlock);
>>> >>>>> >> >> >>>> >> >                 } else {
>>> >>>>> >> >> >>>> >> >                     char *varmem = (char *)
>>> >>>>> >> >> >>>> >> > (insds->lclbas +
>>> >>>>> >> >> >>>> >> > vp->memBlockIndex);
>>> >>>>> >> >> >>>> >> >                     varDetails << QVariant(varmem);
>>> >>>>> >> >> >>>> >> >                 }
>>> >>>>> >> >> >>>> >> >             } else if
>>> >>>>> >> >> >>>> >> > (strcmp(vp->varType->varTypeName,
>>> >>>>> >> >> >>>> >> > "a")
>>> >>>>> >> >> >>>> >> > ==
>>> >>>>> >> >> >>>> >> > 0) {
>>> >>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>> >>>>> >> >> >>>> >> >                     varDetails << *((MYFLT
>>> >>>>> >> >> >>>> >> > *)vp->memBlock) <<
>>> >>>>> >> >> >>>> >> > *((MYFLT
>>> >>>>> >> >> >>>> >> > *)vp->memBlock + 1)
>>> >>>>> >> >> >>>> >> >                                << *((MYFLT
>>> >>>>> >> >> >>>> >> > *)vp->memBlock +
>>> >>>>> >> >> >>>> >> > 2)<<
>>> >>>>> >> >> >>>> >> > *((MYFLT
>>> >>>>> >> >> >>>> >> > *)vp->memBlock + 3);
>>> >>>>> >> >> >>>> >> >                 } else {
>>> >>>>> >> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>>> >>>>> >> >> >>>> >> > vp->memBlockIndex;
>>> >>>>> >> >> >>>> >> >                     varDetails << QVariant(*varmem);
>>> >>>>> >> >> >>>> >> >                 }
>>> >>>>> >> >> >>>> >> >             } else {
>>> >>>>> >> >> >>>> >> >                 varDetails << QVariant();
>>> >>>>> >> >> >>>> >> >             }
>>> >>>>> >> >> >>>> >> >             varDetails << vp->varType->varTypeName;
>>> >>>>> >> >> >>>> >> >             cs->m_varList << varDetails;
>>> >>>>> >> >> >>>> >> >         }
>>> >>>>> >> >> >>>> >> >         vp = vp->next;
>>> >>>>> >> >> >>>> >> >     }
>>> >>>>> >> >> >>>> >> >     cs->variableMutex.unlock();
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >     //Copy active instrument list
>>> >>>>> >> >> >>>> >> >     cs->instrumentMutex.lock();
>>> >>>>> >> >> >>>> >> >     cs->m_instrumentList.clear();
>>> >>>>> >> >> >>>> >> >     INSDS *in = insds;
>>> >>>>> >> >> >>>> >> >     while (in->prvact) {
>>> >>>>> >> >> >>>> >> >         in = in->prvact;
>>> >>>>> >> >> >>>> >> >     }
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >     while (in) {
>>> >>>>> >> >> >>>> >> >         QVariantList instance;
>>> >>>>> >> >> >>>> >> >         instance << in->p1;
>>> >>>>> >> >> >>>> >> >         instance << QString("%1
>>> >>>>> >> >> >>>> >> > %2").arg(in->p2).arg(in->p3);
>>> >>>>> >> >> >>>> >> >         instance << in->kcounter;
>>> >>>>> >> >> >>>> >> >         cs->m_instrumentList << instance;
>>> >>>>> >> >> >>>> >> >         in = in->nxtact;
>>> >>>>> >> >> >>>> >> >     }
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >     cs->instrumentMutex.unlock();
>>> >>>>> >> >> >>>> >> >     emit cs->breakpointReached();
>>> >>>>> >> >> >>>> >> > }
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> > And yes you can actually click the pause button and
>>> >>>>> >> >> >>>> >> > the
>>> >>>>> >> >> >>>> >> > debugger
>>> >>>>> >> >> >>>> >> > will
>>> >>>>> >> >> >>>> >> > stop
>>> >>>>> >> >> >>>> >> > and show you where it is, even if there is no
>>> >>>>> >> >> >>>> >> > breakpoint
>>> >>>>> >> >> >>>> >> > there.
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> > Cheers,
>>> >>>>> >> >> >>>> >> > Andrés
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>> >>>>> >> >> >>>> >> > 
>>> >>>>> >> >> >>>> >> > wrote:
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >> Thanks. And how would one query the value of a
>>> >>>>> >> >> >>>> >> >> variable
>>> >>>>> >> >> >>>> >> >> once
>>> >>>>> >> >> >>>> >> >> the
>>> >>>>> >> >> >>>> >> >> breakpoint is hit? How does one access that
>>> >>>>> >> >> >>>> >> >> information
>>> >>>>> >> >> >>>> >> >> from
>>> >>>>> >> >> >>>> >> >> the
>>> >>>>> >> >> >>>> >> >> Csound structure? Btw, your debugger interface in
>>> >>>>> >> >> >>>> >> >> CsounsQT
>>> >>>>> >> >> >>>> >> >> looks
>>> >>>>> >> >> >>>> >> >> really top-class. I could hope to implement
>>> >>>>> >> >> >>>> >> >> anything as
>>> >>>>> >> >> >>>> >> >> professional
>>> >>>>> >> >> >>>> >> >> as that, but I like the idea of being able to stop
>>> >>>>> >> >> >>>> >> >> and
>>> >>>>> >> >> >>>> >> >> query
>>> >>>>> >> >> >>>> >> >> variables
>>> >>>>> >> >> >>>> >> >> on the fly. Is this possible, your screen-shot
>>> >>>>> >> >> >>>> >> >> seems to
>>> >>>>> >> >> >>>> >> >> indicate
>>> >>>>> >> >> >>>> >> >> so?
>>> >>>>> >> >> >>>> >> >> This will be so useful in teaching!
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >> On 10 April 2014 21:58, Andres Cabrera
>>> >>>>> >> >> >>>> >> >> 
>>> >>>>> >> >> >>>> >> >> wrote:
>>> >>>>> >> >> >>>> >> >> > Also, since the breakpoint callback gets the
>>> >>>>> >> >> >>>> >> >> > CSOUND
>>> >>>>> >> >> >>>> >> >> > structure, it
>>> >>>>> >> >> >>>> >> >> > can
>>> >>>>> >> >> >>>> >> >> > get
>>> >>>>> >> >> >>>> >> >> > all of its information from there.
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> > Cheers,
>>> >>>>> >> >> >>>> >> >> > Andrés
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>>> >>>>> >> >> >>>> >> >> > 
>>> >>>>> >> >> >>>> >> >> > wrote:
>>> >>>>> >> >> >>>> >> >> >>
>>> >>>>> >> >> >>>> >> >> >> Hi Rory,
>>> >>>>> >> >> >>>> >> >> >>
>>> >>>>> >> >> >>>> >> >> >> Essentially, your application could do something
>>> >>>>> >> >> >>>> >> >> >> like:
>>> >>>>> >> >> >>>> >> >> >>
>>> >>>>> >> >> >>>> >> >> >>     int break_count = 0;
>>> >>>>> >> >> >>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>>> >>>>> >> >> >>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig
>>> >>>>> >> >> >>>> >> >> >> oscil 1,
>>> >>>>> >> >> >>>> >> >> >> p4\nendin\n");
>>> >>>>> >> >> >>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1
>>> >>>>> >> >> >>>> >> >> >> 440");
>>> >>>>> >> >> >>>> >> >> >>     csoundStart(csound);
>>> >>>>> >> >> >>>> >> >> >>     csoundDebuggerInit(csound);
>>> >>>>> >> >> >>>> >> >> >>     csoundSetBreakpointCallback(csound,
>>> >>>>> >> >> >>>> >> >> >> brkpt_cb,
>>> >>>>> >> >> >>>> >> >> >> (void
>>> >>>>> >> >> >>>> >> >> >> *)
>>> >>>>> >> >> >>>> >> >> >> &break_count);
>>> >>>>> >> >> >>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1,
>>> >>>>> >> >> >>>> >> >> >> 0);
>>> >>>>> >> >> >>>> >> >> >>
>>> >>>>> >> >> >>>> >> >> >>     for (i = 0; i < 1000; i++) {
>>> >>>>> >> >> >>>> >> >> >>         csoundPerformKsmps(csound);
>>> >>>>> >> >> >>>> >> >> >>     }
>>> >>>>> >> >> >>>> >> >> >>     CU_ASSERT(break_count == 1);
>>> >>>>> >> >> >>>> >> >> >>
>>> >>>>> >> >> >>>> >> >> >>     csoundDebuggerClean(csound);
>>> >>>>> >> >> >>>> >> >> >>     csoundDestroy(csound);
>>> >>>>> >> >> >>>> >> >> >>
>>> >>>>> >> >> >>>> >> >> >> Whenever the breakpoint is reached, the
>>> >>>>> >> >> >>>> >> >> >> breakpoint
>>> >>>>> >> >> >>>> >> >> >> callback
>>> >>>>> >> >> >>>> >> >> >> is
>>> >>>>> >> >> >>>> >> >> >> called.
>>> >>>>> >> >> >>>> >> >> >>
>>> >>>>> >> >> >>>> >> >> >> Currently only instrument breakpoints are
>>> >>>>> >> >> >>>> >> >> >> implemented
>>> >>>>> >> >> >>>> >> >> >> (i.e.
>>> >>>>> >> >> >>>> >> >> >> the
>>> >>>>> >> >> >>>> >> >> >> debugger
>>> >>>>> >> >> >>>> >> >> >> breaks when an instrument is active), but I also
>>> >>>>> >> >> >>>> >> >> >> want to
>>> >>>>> >> >> >>>> >> >> >> add
>>> >>>>> >> >> >>>> >> >> >> line
>>> >>>>> >> >> >>>> >> >> >> breakpoints.
>>> >>>>> >> >> >>>> >> >> >>
>>> >>>>> >> >> >>>> >> >> >> Cheers,
>>> >>>>> >> >> >>>> >> >> >> Andrés
>>> >>>>> >> >> >>>> >> >> >>
>>> >>>>> >> >> >>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>> >>>>> >> >> >>>> >> >> >> 
>>> >>>>> >> >> >>>> >> >> >> wrote:
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> > Wow, this looks super cool Andres. I'm just
>>> >>>>> >> >> >>>> >> >> >> > looking
>>> >>>>> >> >> >>>> >> >> >> > through
>>> >>>>> >> >> >>>> >> >> >> > the
>>> >>>>> >> >> >>>> >> >> >> > code
>>> >>>>> >> >> >>>> >> >> >> > now. Do you have a basic example of setting
>>> >>>>> >> >> >>>> >> >> >> > this
>>> >>>>> >> >> >>>> >> >> >> > up?
>>> >>>>> >> >> >>>> >> >> >> > The
>>> >>>>> >> >> >>>> >> >> >> > CUnit
>>> >>>>> >> >> >>>> >> >> >> > stuff
>>> >>>>> >> >> >>>> >> >> >> > in that debugger test code you posted is
>>> >>>>> >> >> >>>> >> >> >> > confusing
>>> >>>>> >> >> >>>> >> >> >> > me.
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera
>>> >>>>> >> >> >>>> >> >> >> > 
>>> >>>>> >> >> >>>> >> >> >> > wrote:
>>> >>>>> >> >> >>>> >> >> >> > > Hi,
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > The Csound debugger I'm working on is
>>> >>>>> >> >> >>>> >> >> >> > > finally
>>> >>>>> >> >> >>>> >> >> >> > > getting
>>> >>>>> >> >> >>>> >> >> >> > > to
>>> >>>>> >> >> >>>> >> >> >> > > a
>>> >>>>> >> >> >>>> >> >> >> > > useful
>>> >>>>> >> >> >>>> >> >> >> > > testing
>>> >>>>> >> >> >>>> >> >> >> > > stage.
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > I've been doing the work in the csdebugger
>>> >>>>> >> >> >>>> >> >> >> > > branch, if
>>> >>>>> >> >> >>>> >> >> >> > > you
>>> >>>>> >> >> >>>> >> >> >> > > have
>>> >>>>> >> >> >>>> >> >> >> > > time,
>>> >>>>> >> >> >>>> >> >> >> > > please
>>> >>>>> >> >> >>>> >> >> >> > > have a look.
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > To build the debugger, you will need to add
>>> >>>>> >> >> >>>> >> >> >> > > to
>>> >>>>> >> >> >>>> >> >> >> > > cmake:
>>> >>>>> >> >> >>>> >> >> >> > > -DBUILD_DEBUGGER=1
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > You will find some simple tests of the API
>>> >>>>> >> >> >>>> >> >> >> > > here:
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > I have written a debugger front-end within
>>> >>>>> >> >> >>>> >> >> >> > > CsoundQt,
>>> >>>>> >> >> >>>> >> >> >> > > which
>>> >>>>> >> >> >>>> >> >> >> > > you
>>> >>>>> >> >> >>>> >> >> >> > > are
>>> >>>>> >> >> >>>> >> >> >> > > welcome
>>> >>>>> >> >> >>>> >> >> >> > > to try out too:
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > Some internal details:
>>> >>>>> >> >> >>>> >> >> >> > > The debugger interface is found at:
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > Although the debugger functions are part of
>>> >>>>> >> >> >>>> >> >> >> > > the
>>> >>>>> >> >> >>>> >> >> >> > > API,
>>> >>>>> >> >> >>>> >> >> >> > > I
>>> >>>>> >> >> >>>> >> >> >> > > think
>>> >>>>> >> >> >>>> >> >> >> > > it's
>>> >>>>> >> >> >>>> >> >> >> > > cleaner to
>>> >>>>> >> >> >>>> >> >> >> > > have them in their own header, as they are
>>> >>>>> >> >> >>>> >> >> >> > > also
>>> >>>>> >> >> >>>> >> >> >> > > a
>>> >>>>> >> >> >>>> >> >> >> > > compile
>>> >>>>> >> >> >>>> >> >> >> > > time
>>> >>>>> >> >> >>>> >> >> >> > > option.
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > Because the changes are somewhat invasive, I
>>> >>>>> >> >> >>>> >> >> >> > > chose to
>>> >>>>> >> >> >>>> >> >> >> > > make
>>> >>>>> >> >> >>>> >> >> >> > > the
>>> >>>>> >> >> >>>> >> >> >> > > kperf
>>> >>>>> >> >> >>>> >> >> >> > > function a pointer within the CSOUND struct
>>> >>>>> >> >> >>>> >> >> >> > > that
>>> >>>>> >> >> >>>> >> >> >> > > defaults to
>>> >>>>> >> >> >>>> >> >> >> > > nodebug.
>>> >>>>> >> >> >>>> >> >> >> > > When
>>> >>>>> >> >> >>>> >> >> >> > > the debugger is initialized the kperf
>>> >>>>> >> >> >>>> >> >> >> > > function
>>> >>>>> >> >> >>>> >> >> >> > > pointer
>>> >>>>> >> >> >>>> >> >> >> > > is
>>> >>>>> >> >> >>>> >> >> >> > > switched
>>> >>>>> >> >> >>>> >> >> >> > > to
>>> >>>>> >> >> >>>> >> >> >> > > the
>>> >>>>> >> >> >>>> >> >> >> > > debug version, and switched back when the
>>> >>>>> >> >> >>>> >> >> >> > > debugger is
>>> >>>>> >> >> >>>> >> >> >> > > disabled
>>> >>>>> >> >> >>>> >> >> >> > > csoundDebuggerInit() and
>>> >>>>> >> >> >>>> >> >> >> > > csoundDebuggerClean()
>>> >>>>> >> >> >>>> >> >> >> > > functions.
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > When a breakpoint is reached, a callback
>>> >>>>> >> >> >>>> >> >> >> > > function
>>> >>>>> >> >> >>>> >> >> >> > > that
>>> >>>>> >> >> >>>> >> >> >> > > has
>>> >>>>> >> >> >>>> >> >> >> > > been
>>> >>>>> >> >> >>>> >> >> >> > > registered
>>> >>>>> >> >> >>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND
>>> >>>>> >> >> >>>> >> >> >> > > *csound,
>>> >>>>> >> >> >>>> >> >> >> > > breakpoint_cb_t
>>> >>>>> >> >> >>>> >> >> >> > > bkpt_cb,
>>> >>>>> >> >> >>>> >> >> >> > > void *userdata) is called.
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > When a breakpoint is reached, after the
>>> >>>>> >> >> >>>> >> >> >> > > callback
>>> >>>>> >> >> >>>> >> >> >> > > is
>>> >>>>> >> >> >>>> >> >> >> > > called,
>>> >>>>> >> >> >>>> >> >> >> > > the
>>> >>>>> >> >> >>>> >> >> >> > > kperf
>>> >>>>> >> >> >>>> >> >> >> > > function continues running as usual,
>>> >>>>> >> >> >>>> >> >> >> > > providing
>>> >>>>> >> >> >>>> >> >> >> > > empty
>>> >>>>> >> >> >>>> >> >> >> > > buffers
>>> >>>>> >> >> >>>> >> >> >> > > to
>>> >>>>> >> >> >>>> >> >> >> > > the
>>> >>>>> >> >> >>>> >> >> >> > > audio
>>> >>>>> >> >> >>>> >> >> >> > > hardware, and not incrementing the time
>>> >>>>> >> >> >>>> >> >> >> > > counters
>>> >>>>> >> >> >>>> >> >> >> > > in
>>> >>>>> >> >> >>>> >> >> >> > > musmon.
>>> >>>>> >> >> >>>> >> >> >> > > When
>>> >>>>> >> >> >>>> >> >> >> > > a
>>> >>>>> >> >> >>>> >> >> >> > > continue
>>> >>>>> >> >> >>>> >> >> >> > > is reached, the graph traversing continues
>>> >>>>> >> >> >>>> >> >> >> > > where
>>> >>>>> >> >> >>>> >> >> >> > > it
>>> >>>>> >> >> >>>> >> >> >> > > left
>>> >>>>> >> >> >>>> >> >> >> > > off.
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > There are probably still a few bugs, but
>>> >>>>> >> >> >>>> >> >> >> > > it's
>>> >>>>> >> >> >>>> >> >> >> > > now
>>> >>>>> >> >> >>>> >> >> >> > > working on
>>> >>>>> >> >> >>>> >> >> >> > > my
>>> >>>>> >> >> >>>> >> >> >> > > simple
>>> >>>>> >> >> >>>> >> >> >> > > tests.
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > Any ideas, thoughts and suggestions are very
>>> >>>>> >> >> >>>> >> >> >> > > welcome.
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > Cheers,
>>> >>>>> >> >> >>>> >> >> >> > > Andrés
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > ------------------------------------------------------------------------------
>>> >>>>> >> >> >>>> >> >> >> > > Put Bad Developers to Shame
>>> >>>>> >> >> >>>> >> >> >> > > Dominate Development with Jenkins Continuous
>>> >>>>> >> >> >>>> >> >> >> > > Integration
>>> >>>>> >> >> >>>> >> >> >> > > Continuously Automate Build, Test &
>>> >>>>> >> >> >>>> >> >> >> > > Deployment
>>> >>>>> >> >> >>>> >> >> >> > > Start a new project now. Try Jenkins in the
>>> >>>>> >> >> >>>> >> >> >> > > cloud.
>>> >>>>> >> >> >>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > _______________________________________________
>>> >>>>> >> >> >>>> >> >> >> > > Csound-devel mailing list
>>> >>>>> >> >> >>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >> >> >>>> >> >> >> > >
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> > ------------------------------------------------------------------------------
>>> >>>>> >> >> >>>> >> >> >> > Put Bad Developers to Shame
>>> >>>>> >> >> >>>> >> >> >> > Dominate Development with Jenkins Continuous
>>> >>>>> >> >> >>>> >> >> >> > Integration
>>> >>>>> >> >> >>>> >> >> >> > Continuously Automate Build, Test & Deployment
>>> >>>>> >> >> >>>> >> >> >> > Start a new project now. Try Jenkins in the
>>> >>>>> >> >> >>>> >> >> >> > cloud.
>>> >>>>> >> >> >>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> > _______________________________________________
>>> >>>>> >> >> >>>> >> >> >> > Csound-devel mailing list
>>> >>>>> >> >> >>>> >> >> >> > Csound-devel@lists.sourceforge.net
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> >
>>> >>>>> >> >> >>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >> >> >>>> >> >> >>
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> > ------------------------------------------------------------------------------
>>> >>>>> >> >> >>>> >> >> > Put Bad Developers to Shame
>>> >>>>> >> >> >>>> >> >> > Dominate Development with Jenkins Continuous
>>> >>>>> >> >> >>>> >> >> > Integration
>>> >>>>> >> >> >>>> >> >> > Continuously Automate Build, Test & Deployment
>>> >>>>> >> >> >>>> >> >> > Start a new project now. Try Jenkins in the
>>> >>>>> >> >> >>>> >> >> > cloud.
>>> >>>>> >> >> >>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> >> >> >>>> >> >> > _______________________________________________
>>> >>>>> >> >> >>>> >> >> > Csound-devel mailing list
>>> >>>>> >> >> >>>> >> >> > Csound-devel@lists.sourceforge.net
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >> >> >>>> >> >> >
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >> ------------------------------------------------------------------------------
>>> >>>>> >> >> >>>> >> >> Put Bad Developers to Shame
>>> >>>>> >> >> >>>> >> >> Dominate Development with Jenkins Continuous
>>> >>>>> >> >> >>>> >> >> Integration
>>> >>>>> >> >> >>>> >> >> Continuously Automate Build, Test & Deployment
>>> >>>>> >> >> >>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>> >>>>> >> >> >>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> >> >> >>>> >> >> _______________________________________________
>>> >>>>> >> >> >>>> >> >> Csound-devel mailing list
>>> >>>>> >> >> >>>> >> >> Csound-devel@lists.sourceforge.net
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >>
>>> >>>>> >> >> >>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> > ------------------------------------------------------------------------------
>>> >>>>> >> >> >>>> >> > Put Bad Developers to Shame
>>> >>>>> >> >> >>>> >> > Dominate Development with Jenkins Continuous
>>> >>>>> >> >> >>>> >> > Integration
>>> >>>>> >> >> >>>> >> > Continuously Automate Build, Test & Deployment
>>> >>>>> >> >> >>>> >> > Start a new project now. Try Jenkins in the cloud.
>>> >>>>> >> >> >>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> >> >> >>>> >> > _______________________________________________
>>> >>>>> >> >> >>>> >> > Csound-devel mailing list
>>> >>>>> >> >> >>>> >> > Csound-devel@lists.sourceforge.net
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >> >> >>>> >> >
>>> >>>>> >> >> >>>> >>
>>> >>>>> >> >> >>>> >>
>>> >>>>> >> >> >>>> >>
>>> >>>>> >> >> >>>> >>
>>> >>>>> >> >> >>>> >>
>>> >>>>> >> >> >>>> >>
>>> >>>>> >> >> >>>> >>
>>> >>>>> >> >> >>>> >> ------------------------------------------------------------------------------
>>> >>>>> >> >> >>>> >> Put Bad Developers to Shame
>>> >>>>> >> >> >>>> >> Dominate Development with Jenkins Continuous
>>> >>>>> >> >> >>>> >> Integration
>>> >>>>> >> >> >>>> >> Continuously Automate Build, Test & Deployment
>>> >>>>> >> >> >>>> >> Start a new project now. Try Jenkins in the cloud.
>>> >>>>> >> >> >>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> >> >> >>>> >> _______________________________________________
>>> >>>>> >> >> >>>> >> Csound-devel mailing list
>>> >>>>> >> >> >>>> >> Csound-devel@lists.sourceforge.net
>>> >>>>> >> >> >>>> >>
>>> >>>>> >> >> >>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> > ------------------------------------------------------------------------------
>>> >>>>> >> >> >>>> > Put Bad Developers to Shame
>>> >>>>> >> >> >>>> > Dominate Development with Jenkins Continuous
>>> >>>>> >> >> >>>> > Integration
>>> >>>>> >> >> >>>> > Continuously Automate Build, Test & Deployment
>>> >>>>> >> >> >>>> > Start a new project now. Try Jenkins in the cloud.
>>> >>>>> >> >> >>>> > http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> >> >> >>>> > _______________________________________________
>>> >>>>> >> >> >>>> > Csound-devel mailing list
>>> >>>>> >> >> >>>> > Csound-devel@lists.sourceforge.net
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >> >> >>>> >
>>> >>>>> >> >> >>>>
>>> >>>>> >> >> >>>>
>>> >>>>> >> >> >>>>
>>> >>>>> >> >> >>>>
>>> >>>>> >> >> >>>>
>>> >>>>> >> >> >>>>
>>> >>>>> >> >> >>>> ------------------------------------------------------------------------------
>>> >>>>> >> >> >>>> Put Bad Developers to Shame
>>> >>>>> >> >> >>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>> >> >> >>>> Continuously Automate Build, Test & Deployment
>>> >>>>> >> >> >>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>> >> >> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> >> >> >>>> _______________________________________________
>>> >>>>> >> >> >>>> Csound-devel mailing list
>>> >>>>> >> >> >>>> Csound-devel@lists.sourceforge.net
>>> >>>>> >> >> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>> ------------------------------------------------------------------------------
>>> >>>>> >> >> >>> Put Bad Developers to Shame
>>> >>>>> >> >> >>> Dominate Development with Jenkins Continuous Integration
>>> >>>>> >> >> >>> Continuously Automate Build, Test & Deployment
>>> >>>>> >> >> >>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>> >> >> >>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> >> >> >>> _______________________________________________
>>> >>>>> >> >> >>> Csound-devel mailing list
>>> >>>>> >> >> >>> Csound-devel@lists.sourceforge.net
>>> >>>>> >> >> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >> >> >>>
>>> >>>>> >> >> >>
>>> >>>>> >> >>
>>> >>>>> >> >>
>>> >>>>> >> >>
>>> >>>>> >> >>
>>> >>>>> >> >>
>>> >>>>> >> >> ------------------------------------------------------------------------------
>>> >>>>> >> >> Put Bad Developers to Shame
>>> >>>>> >> >> Dominate Development with Jenkins Continuous Integration
>>> >>>>> >> >> Continuously Automate Build, Test & Deployment
>>> >>>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>> >>>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> >> >> _______________________________________________
>>> >>>>> >> >> Csound-devel mailing list
>>> >>>>> >> >> Csound-devel@lists.sourceforge.net
>>> >>>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >> >
>>> >>>>> >> >
>>> >>>>> >> >
>>> >>>>> >> >
>>> >>>>> >> >
>>> >>>>> >> >
>>> >>>>> >> > ------------------------------------------------------------------------------
>>> >>>>> >> > Put Bad Developers to Shame
>>> >>>>> >> > Dominate Development with Jenkins Continuous Integration
>>> >>>>> >> > Continuously Automate Build, Test & Deployment
>>> >>>>> >> > Start a new project now. Try Jenkins in the cloud.
>>> >>>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> >> > _______________________________________________
>>> >>>>> >> > Csound-devel mailing list
>>> >>>>> >> > Csound-devel@lists.sourceforge.net
>>> >>>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >> >
>>> >>>>> >>
>>> >>>>> >>
>>> >>>>> >>
>>> >>>>> >>
>>> >>>>> >> ------------------------------------------------------------------------------
>>> >>>>> >> Put Bad Developers to Shame
>>> >>>>> >> Dominate Development with Jenkins Continuous Integration
>>> >>>>> >> Continuously Automate Build, Test & Deployment
>>> >>>>> >> Start a new project now. Try Jenkins in the cloud.
>>> >>>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> >> _______________________________________________
>>> >>>>> >> Csound-devel mailing list
>>> >>>>> >> Csound-devel@lists.sourceforge.net
>>> >>>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >
>>> >>>>> >
>>> >>>>> >
>>> >>>>> >
>>> >>>>> >
>>> >>>>> > ------------------------------------------------------------------------------
>>> >>>>> > Put Bad Developers to Shame
>>> >>>>> > Dominate Development with Jenkins Continuous Integration
>>> >>>>> > Continuously Automate Build, Test & Deployment
>>> >>>>> > Start a new project now. Try Jenkins in the cloud.
>>> >>>>> > http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> > _______________________________________________
>>> >>>>> > Csound-devel mailing list
>>> >>>>> > Csound-devel@lists.sourceforge.net
>>> >>>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>> >
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>> ------------------------------------------------------------------------------
>>> >>>>> Put Bad Developers to Shame
>>> >>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>> Continuously Automate Build, Test & Deployment
>>> >>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> _______________________________________________
>>> >>>>> Csound-devel mailing list
>>> >>>>> Csound-devel@lists.sourceforge.net
>>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>
>>> >>>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>> ------------------------------------------------------------------------------
>>> >>> Put Bad Developers to Shame
>>> >>> Dominate Development with Jenkins Continuous Integration
>>> >>> Continuously Automate Build, Test & Deployment
>>> >>> Start a new project now. Try Jenkins in the cloud.
>>> >>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> _______________________________________________
>>> >>> Csound-devel mailing list
>>> >>> Csound-devel@lists.sourceforge.net
>>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>
>>> >>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-12 18:36
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Finally, how can one query the current k-pass, as in how many k-cycles
have passed? I can put in a counter in my own processing thread, but I
thought it might be simple to grab from Csound?

On 12 April 2014 13:20, Rory Walsh  wrote:
> Hi Andres. All going good here. I just wanted to ask you something
> about the implementation. Am I right in saying that whenever
> csoundDebuggerInit() is called the CSOUND structure that is passed to
> it gets appended with some csdebug_data_t data? This data block is
> then zeroed and removed when one calls csoundDebuggerClean()? One
> little issue I have is that I seem to have to call
> csoundDebuggerInit() before I set my breakpoints, that is every time I
> set a breakpoint or call any of the debugger methods I have to call
> csoundDebuggerInit() first. Otherwise I get an assert in the
> breakpoint functions because csound->csdebug_data_t is no longer
> valid. I guess there is no harm in calling csoundDebuggerInit() each
> time one updates or removes a breakpoint if all it does it
> add/overwrite a data block in the underlying Csound object? I'd love
> to see this in the next release. It would be nice to ship a command
> line app in all packages that would work like the gdb debugger.
>
> On 11 April 2014 22:51, Rory Walsh  wrote:
>> This is really great Andres. I threw together a simple command line
>> application that perhaps you could add to the test suite? I just
>> robbed what I could understand from yours and slotted it into as basic
>> an example as I could think off.
>>
>> Usage:
>>
>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>>
>> Once the breakpoint at the given k-cycle is hit the debugger will
>> print the values of each of the variables in the chosen instrument ala
>>
>> ==============================================
>> Breakpoint at instr 1
>> Number of k-cycles into performance: 100
>> ------------------------------------------------------
>> VarName:Schannel    value = hello         varType[S]
>> VarName:k1    value = 0.580499     varType[k]
>> VarName:aout    value = 0.0823895     varType[a]
>> VarName:ksmps     varType[r]
>>
>> I have to say hats off. This is very clever. I can't wait to add
>> something like this to Cabbage.
>>
>>
>> On 11 April 2014 22:08, Andres Cabrera  wrote:
>>> Hi,
>>>
>>> Good to hear you've got it going. The only performance penalty if you don't
>>> call csoundDebuggerInit is that kperf is a function pointer rather than a
>>> function. If you have called csoundDebuggerInit, then you will be running a
>>> slightly heavier kperf_debug function, which needs to check whether there
>>> are new debug commands (like break, continue, or new breakpoints), and which
>>> needs to check on every new instrument in the chain whether it matches one
>>> of the existing breakpoints. It's not too much, since it's done at control
>>> rate, but there is a penalty. Performance during debugging will also get a
>>> little worse once line breakpoints are implemented because there will have
>>> to be a check for every ugen called within an instrument. But still I think
>>> the difference in performance between debug and no debug will not be as
>>> large as it is for C.
>>>
>>> Cheers,
>>> Andrés
>>>
>>>
>>>
>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh  wrote:
>>>>
>>>> Sorry for the noise! I'm properly checked out now and enjoying the
>>>> ride! This is great. Are there any performance costs if no breakpoint
>>>> is set?
>>>>
>>>> On 11 April 2014 09:05, Rory Walsh  wrote:
>>>> > I assume that since I am getting no build or linker errors that there
>>>> > is something amiss in my code?
>>>> >
>>>> > On 11 April 2014 01:51, Rory Walsh  wrote:
>>>> >> No. None at all?
>>>> >>
>>>> >> On 11 Apr 2014 00:36, "Andres Cabrera"  wrote:
>>>> >>>
>>>> >>> Are you getting build errors?
>>>> >>>
>>>> >>> Cheers,
>>>> >>> Andrés
>>>> >>>
>>>> >>>
>>>> >>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>>> >>> 
>>>> >>> wrote:
>>>> >>>>
>>>> >>>> Did you checkout the csdebugger branch for csound and run cmake with
>>>> >>>> -DBUILD_DEBUGGER=1?
>>>> >>>>
>>>> >>>> Cheers,
>>>> >>>> Andrés
>>>> >>>>
>>>> >>>>
>>>> >>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh  wrote:
>>>> >>>>>
>>>> >>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>>> >>>>>
>>>> >>>>> On 11 April 2014 00:26, Andres Cabrera 
>>>> >>>>> wrote:
>>>> >>>>> > easier to do:
>>>> >>>>> >
>>>> >>>>> > cmake -DBUILD_DEBUGGER=1
>>>> >>>>> >
>>>> >>>>> > Cheers,
>>>> >>>>> > Andrés
>>>> >>>>> >
>>>> >>>>> >
>>>> >>>>> > On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh 
>>>> >>>>> > wrote:
>>>> >>>>> >>
>>>> >>>>> >> I'm probably adding the wrong lines to cmakelists.txt?
>>>> >>>>> >>
>>>> >>>>> >> set (BUILD_DEBUGGER 1)
>>>> >>>>> >>
>>>> >>>>> >> Is that right?
>>>> >>>>> >>
>>>> >>>>> >> On 11 April 2014 00:06, Andres Cabrera 
>>>> >>>>> >> wrote:
>>>> >>>>> >> > Yes it would :)
>>>> >>>>> >> >
>>>> >>>>> >> > Cheers,
>>>> >>>>> >> > Andrés
>>>> >>>>> >> >
>>>> >>>>> >> >
>>>> >>>>> >> > On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh 
>>>> >>>>> >> > wrote:
>>>> >>>>> >> >>
>>>> >>>>> >> >> It would help if I built with the debugger enabled :)
>>>> >>>>> >> >>
>>>> >>>>> >> >> On 11 April 2014 00:01, Rory Walsh  wrote:
>>>> >>>>> >> >> > I'm using a csd file instead of compiling orcs and scores,
>>>> >>>>> >> >> > is
>>>> >>>>> >> >> > this
>>>> >>>>> >> >> > allowed? My breakpoint callback is never being hit. What am
>>>> >>>>> >> >> > I
>>>> >>>>> >> >> > missing?
>>>> >>>>> >> >> >
>>>> >>>>> >> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>>>> >>>>> >> >> > *userdata);
>>>> >>>>> >> >> >
>>>> >>>>> >> >> > int main(int argc, char *argv[])
>>>> >>>>> >> >> > {
>>>> >>>>> >> >> >     int break_count = 0;
>>>> >>>>> >> >> >     CSOUND* csound = csoundCreate(NULL);
>>>> >>>>> >> >> >     csoundCompile(csound,argc,argv);
>>>> >>>>> >> >> >     csoundStart(csound);
>>>> >>>>> >> >> >     csoundDebuggerInit(csound);
>>>> >>>>> >> >> >     csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>>>> >>>>> >> >> > &break_count);
>>>> >>>>> >> >> >     csoundSetInstrumentBreakpoint(csound, 1, 0);
>>>> >>>>> >> >> >
>>>> >>>>> >> >> >     while (csoundPerformKsmps(csound)==0);
>>>> >>>>> >> >> >
>>>> >>>>> >> >> >     csoundDebuggerClean(csound);
>>>> >>>>> >> >> >     csoundDestroy(csound);
>>>> >>>>> >> >> > }
>>>> >>>>> >> >> >
>>>> >>>>> >> >> > //this never gets called.
>>>> >>>>> >> >> > void brkpt_cb(CSOUND *csound, int line, double instr, void
>>>> >>>>> >> >> > *userdata)
>>>> >>>>> >> >> > {
>>>> >>>>> >> >> >     int *count = (int *) userdata;
>>>> >>>>> >> >> >     printf("bkpt line %i instr %f\n", line, instr);
>>>> >>>>> >> >> >     *count = *count + 1;
>>>> >>>>> >> >> > };
>>>> >>>>> >> >> >
>>>> >>>>> >> >> > On 10 April 2014 22:56, Rory Walsh  wrote:
>>>> >>>>> >> >> >> That's great. Thanks.
>>>> >>>>> >> >> >>
>>>> >>>>> >> >> >> On 10 Apr 2014 22:44, "Andres Cabrera"
>>>> >>>>> >> >> >> 
>>>> >>>>> >> >> >> wrote:
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>> Currently only instrument breakpoints are implemented...
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>> Cheers,
>>>> >>>>> >> >> >>> Andrés
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>>> >>>>> >> >> >>> 
>>>> >>>>> >> >> >>> wrote:
>>>> >>>>> >> >> >>>>
>>>> >>>>> >> >> >>>> Ok, that sounds good. To help get my head around this I
>>>> >>>>> >> >> >>>> might
>>>> >>>>> >> >> >>>> try
>>>> >>>>> >> >> >>>> to
>>>> >>>>> >> >> >>>> write a simple command line app that passes a breakpoint
>>>> >>>>> >> >> >>>> line
>>>> >>>>> >> >> >>>> number
>>>> >>>>> >> >> >>>> as a parameter, and then when it hits, it will print out
>>>> >>>>> >> >> >>>> the
>>>> >>>>> >> >> >>>> values
>>>> >>>>> >> >> >>>> of
>>>> >>>>> >> >> >>>> each variable in that instrument. That would be a start.
>>>> >>>>> >> >> >>>>
>>>> >>>>> >> >> >>>> On 10 April 2014 22:29, Andres Cabrera
>>>> >>>>> >> >> >>>> 
>>>> >>>>> >> >> >>>> wrote:
>>>> >>>>> >> >> >>>> > Not exactly.
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> > the function:
>>>> >>>>> >> >> >>>> > csoundDebugGetInstrument(csound);
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> > Gives you a pointer to the currently active instrument
>>>> >>>>> >> >> >>>> > (where
>>>> >>>>> >> >> >>>> > the
>>>> >>>>> >> >> >>>> > debugger
>>>> >>>>> >> >> >>>> > interrupted execution). You can then get the
>>>> >>>>> >> >> >>>> > information
>>>> >>>>> >> >> >>>> > about
>>>> >>>>> >> >> >>>> > the
>>>> >>>>> >> >> >>>> > instrument instance (variables and time counters,
>>>> >>>>> >> >> >>>> > p-fields,
>>>> >>>>> >> >> >>>> > etc.)
>>>> >>>>> >> >> >>>> > from
>>>> >>>>> >> >> >>>> > it.
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> > The callback function is only called if a breakpoint is
>>>> >>>>> >> >> >>>> > reached,
>>>> >>>>> >> >> >>>> > which
>>>> >>>>> >> >> >>>> > is
>>>> >>>>> >> >> >>>> > checked inside csound's kperf function. There is a
>>>> >>>>> >> >> >>>> > linked
>>>> >>>>> >> >> >>>> > list
>>>> >>>>> >> >> >>>> > of
>>>> >>>>> >> >> >>>> > breakpoints (that is managed in a thread-safe way),
>>>> >>>>> >> >> >>>> > which
>>>> >>>>> >> >> >>>> > is
>>>> >>>>> >> >> >>>> > traversed
>>>> >>>>> >> >> >>>> > to
>>>> >>>>> >> >> >>>> > check if the current instrument matches a breakpoint.
>>>> >>>>> >> >> >>>> > For
>>>> >>>>> >> >> >>>> > line
>>>> >>>>> >> >> >>>> > breakpoints,
>>>> >>>>> >> >> >>>> > what will need to happen is that for every opcode that
>>>> >>>>> >> >> >>>> > is
>>>> >>>>> >> >> >>>> > executed,
>>>> >>>>> >> >> >>>> > it
>>>> >>>>> >> >> >>>> > is
>>>> >>>>> >> >> >>>> > checked whether it matches to a breakpoint line.
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> > Cheers,
>>>> >>>>> >> >> >>>> > Andrés
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> > On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>>> >>>>> >> >> >>>> > 
>>>> >>>>> >> >> >>>> > wrote:
>>>> >>>>> >> >> >>>> >>
>>>> >>>>> >> >> >>>> >> So you grab the values for all the variables in a
>>>> >>>>> >> >> >>>> >> particular
>>>> >>>>> >> >> >>>> >> line
>>>> >>>>> >> >> >>>> >> each
>>>> >>>>> >> >> >>>> >> time this callback function is hit? Am I reading that
>>>> >>>>> >> >> >>>> >> right?
>>>> >>>>> >> >> >>>> >>
>>>> >>>>> >> >> >>>> >> On 10 April 2014 22:10, Andres Cabrera
>>>> >>>>> >> >> >>>> >> 
>>>> >>>>> >> >> >>>> >> wrote:
>>>> >>>>> >> >> >>>> >> > Hi,
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> > My breakpoint callback looks like this:
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> > void CsoundEngine::breakpointCallback(CSOUND
>>>> >>>>> >> >> >>>> >> > *csound,
>>>> >>>>> >> >> >>>> >> > int
>>>> >>>>> >> >> >>>> >> > line,
>>>> >>>>> >> >> >>>> >> > double
>>>> >>>>> >> >> >>>> >> > instr, void *udata)
>>>> >>>>> >> >> >>>> >> > {
>>>> >>>>> >> >> >>>> >> >     qDebug() <<"breakpointCallback " << line <<
>>>> >>>>> >> >> >>>> >> > instr;
>>>> >>>>> >> >> >>>> >> >     INSDS *insds = csoundDebugGetInstrument(csound);
>>>> >>>>> >> >> >>>> >> >     CsoundEngine *cs = (CsoundEngine *) udata;
>>>> >>>>> >> >> >>>> >> >     // Copy variable list
>>>> >>>>> >> >> >>>> >> >     CS_VARIABLE *vp = insds->instr->varPool->head;
>>>> >>>>> >> >> >>>> >> >     cs->variableMutex.lock();
>>>> >>>>> >> >> >>>> >> >     cs->m_varList.clear();
>>>> >>>>> >> >> >>>> >> >     while (vp) {
>>>> >>>>> >> >> >>>> >> >         if (vp->varName[0] != '#') {
>>>> >>>>> >> >> >>>> >> >             QVariantList varDetails;
>>>> >>>>> >> >> >>>> >> >             varDetails << vp->varName;
>>>> >>>>> >> >> >>>> >> >             if (strcmp(vp->varType->varTypeName,
>>>> >>>>> >> >> >>>> >> > "i") ==
>>>> >>>>> >> >> >>>> >> > 0
>>>> >>>>> >> >> >>>> >> >                     ||
>>>> >>>>> >> >> >>>> >> > strcmp(vp->varType->varTypeName,
>>>> >>>>> >> >> >>>> >> > "k")
>>>> >>>>> >> >> >>>> >> > ==
>>>> >>>>> >> >> >>>> >> > 0) {
>>>> >>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>>> >>>>> >> >> >>>> >> >                     varDetails << *((MYFLT
>>>> >>>>> >> >> >>>> >> > *)vp->memBlock);
>>>> >>>>> >> >> >>>> >> >                 } else {
>>>> >>>>> >> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>>>> >>>>> >> >> >>>> >> > vp->memBlockIndex;
>>>> >>>>> >> >> >>>> >> >                     varDetails << QVariant(*varmem);
>>>> >>>>> >> >> >>>> >> >                 }
>>>> >>>>> >> >> >>>> >> >             } else
>>>> >>>>> >> >> >>>> >> > if(strcmp(vp->varType->varTypeName,
>>>> >>>>> >> >> >>>> >> > "S")
>>>> >>>>> >> >> >>>> >> > ==
>>>> >>>>> >> >> >>>> >> > 0) {
>>>> >>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>>> >>>>> >> >> >>>> >> >                     varDetails << *((char
>>>> >>>>> >> >> >>>> >> > *)vp->memBlock);
>>>> >>>>> >> >> >>>> >> >                 } else {
>>>> >>>>> >> >> >>>> >> >                     char *varmem = (char *)
>>>> >>>>> >> >> >>>> >> > (insds->lclbas +
>>>> >>>>> >> >> >>>> >> > vp->memBlockIndex);
>>>> >>>>> >> >> >>>> >> >                     varDetails << QVariant(varmem);
>>>> >>>>> >> >> >>>> >> >                 }
>>>> >>>>> >> >> >>>> >> >             } else if
>>>> >>>>> >> >> >>>> >> > (strcmp(vp->varType->varTypeName,
>>>> >>>>> >> >> >>>> >> > "a")
>>>> >>>>> >> >> >>>> >> > ==
>>>> >>>>> >> >> >>>> >> > 0) {
>>>> >>>>> >> >> >>>> >> >                 if (vp->memBlock) {
>>>> >>>>> >> >> >>>> >> >                     varDetails << *((MYFLT
>>>> >>>>> >> >> >>>> >> > *)vp->memBlock) <<
>>>> >>>>> >> >> >>>> >> > *((MYFLT
>>>> >>>>> >> >> >>>> >> > *)vp->memBlock + 1)
>>>> >>>>> >> >> >>>> >> >                                << *((MYFLT
>>>> >>>>> >> >> >>>> >> > *)vp->memBlock +
>>>> >>>>> >> >> >>>> >> > 2)<<
>>>> >>>>> >> >> >>>> >> > *((MYFLT
>>>> >>>>> >> >> >>>> >> > *)vp->memBlock + 3);
>>>> >>>>> >> >> >>>> >> >                 } else {
>>>> >>>>> >> >> >>>> >> >                     MYFLT *varmem = insds->lclbas +
>>>> >>>>> >> >> >>>> >> > vp->memBlockIndex;
>>>> >>>>> >> >> >>>> >> >                     varDetails << QVariant(*varmem);
>>>> >>>>> >> >> >>>> >> >                 }
>>>> >>>>> >> >> >>>> >> >             } else {
>>>> >>>>> >> >> >>>> >> >                 varDetails << QVariant();
>>>> >>>>> >> >> >>>> >> >             }
>>>> >>>>> >> >> >>>> >> >             varDetails << vp->varType->varTypeName;
>>>> >>>>> >> >> >>>> >> >             cs->m_varList << varDetails;
>>>> >>>>> >> >> >>>> >> >         }
>>>> >>>>> >> >> >>>> >> >         vp = vp->next;
>>>> >>>>> >> >> >>>> >> >     }
>>>> >>>>> >> >> >>>> >> >     cs->variableMutex.unlock();
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >     //Copy active instrument list
>>>> >>>>> >> >> >>>> >> >     cs->instrumentMutex.lock();
>>>> >>>>> >> >> >>>> >> >     cs->m_instrumentList.clear();
>>>> >>>>> >> >> >>>> >> >     INSDS *in = insds;
>>>> >>>>> >> >> >>>> >> >     while (in->prvact) {
>>>> >>>>> >> >> >>>> >> >         in = in->prvact;
>>>> >>>>> >> >> >>>> >> >     }
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >     while (in) {
>>>> >>>>> >> >> >>>> >> >         QVariantList instance;
>>>> >>>>> >> >> >>>> >> >         instance << in->p1;
>>>> >>>>> >> >> >>>> >> >         instance << QString("%1
>>>> >>>>> >> >> >>>> >> > %2").arg(in->p2).arg(in->p3);
>>>> >>>>> >> >> >>>> >> >         instance << in->kcounter;
>>>> >>>>> >> >> >>>> >> >         cs->m_instrumentList << instance;
>>>> >>>>> >> >> >>>> >> >         in = in->nxtact;
>>>> >>>>> >> >> >>>> >> >     }
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >     cs->instrumentMutex.unlock();
>>>> >>>>> >> >> >>>> >> >     emit cs->breakpointReached();
>>>> >>>>> >> >> >>>> >> > }
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> > And yes you can actually click the pause button and
>>>> >>>>> >> >> >>>> >> > the
>>>> >>>>> >> >> >>>> >> > debugger
>>>> >>>>> >> >> >>>> >> > will
>>>> >>>>> >> >> >>>> >> > stop
>>>> >>>>> >> >> >>>> >> > and show you where it is, even if there is no
>>>> >>>>> >> >> >>>> >> > breakpoint
>>>> >>>>> >> >> >>>> >> > there.
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> > Cheers,
>>>> >>>>> >> >> >>>> >> > Andrés
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> > On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>>> >>>>> >> >> >>>> >> > 
>>>> >>>>> >> >> >>>> >> > wrote:
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >> Thanks. And how would one query the value of a
>>>> >>>>> >> >> >>>> >> >> variable
>>>> >>>>> >> >> >>>> >> >> once
>>>> >>>>> >> >> >>>> >> >> the
>>>> >>>>> >> >> >>>> >> >> breakpoint is hit? How does one access that
>>>> >>>>> >> >> >>>> >> >> information
>>>> >>>>> >> >> >>>> >> >> from
>>>> >>>>> >> >> >>>> >> >> the
>>>> >>>>> >> >> >>>> >> >> Csound structure? Btw, your debugger interface in
>>>> >>>>> >> >> >>>> >> >> CsounsQT
>>>> >>>>> >> >> >>>> >> >> looks
>>>> >>>>> >> >> >>>> >> >> really top-class. I could hope to implement
>>>> >>>>> >> >> >>>> >> >> anything as
>>>> >>>>> >> >> >>>> >> >> professional
>>>> >>>>> >> >> >>>> >> >> as that, but I like the idea of being able to stop
>>>> >>>>> >> >> >>>> >> >> and
>>>> >>>>> >> >> >>>> >> >> query
>>>> >>>>> >> >> >>>> >> >> variables
>>>> >>>>> >> >> >>>> >> >> on the fly. Is this possible, your screen-shot
>>>> >>>>> >> >> >>>> >> >> seems to
>>>> >>>>> >> >> >>>> >> >> indicate
>>>> >>>>> >> >> >>>> >> >> so?
>>>> >>>>> >> >> >>>> >> >> This will be so useful in teaching!
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >> On 10 April 2014 21:58, Andres Cabrera
>>>> >>>>> >> >> >>>> >> >> 
>>>> >>>>> >> >> >>>> >> >> wrote:
>>>> >>>>> >> >> >>>> >> >> > Also, since the breakpoint callback gets the
>>>> >>>>> >> >> >>>> >> >> > CSOUND
>>>> >>>>> >> >> >>>> >> >> > structure, it
>>>> >>>>> >> >> >>>> >> >> > can
>>>> >>>>> >> >> >>>> >> >> > get
>>>> >>>>> >> >> >>>> >> >> > all of its information from there.
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> > Cheers,
>>>> >>>>> >> >> >>>> >> >> > Andrés
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> > On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>>>> >>>>> >> >> >>>> >> >> > 
>>>> >>>>> >> >> >>>> >> >> > wrote:
>>>> >>>>> >> >> >>>> >> >> >>
>>>> >>>>> >> >> >>>> >> >> >> Hi Rory,
>>>> >>>>> >> >> >>>> >> >> >>
>>>> >>>>> >> >> >>>> >> >> >> Essentially, your application could do something
>>>> >>>>> >> >> >>>> >> >> >> like:
>>>> >>>>> >> >> >>>> >> >> >>
>>>> >>>>> >> >> >>>> >> >> >>     int break_count = 0;
>>>> >>>>> >> >> >>>> >> >> >>     CSOUND* csound = csoundCreate(NULL);
>>>> >>>>> >> >> >>>> >> >> >>     csoundCompileOrc(csound, "instr 1\nasig
>>>> >>>>> >> >> >>>> >> >> >> oscil 1,
>>>> >>>>> >> >> >>>> >> >> >> p4\nendin\n");
>>>> >>>>> >> >> >>>> >> >> >>     csoundInputMessage(csound, "i 1.1 0   1
>>>> >>>>> >> >> >>>> >> >> >> 440");
>>>> >>>>> >> >> >>>> >> >> >>     csoundStart(csound);
>>>> >>>>> >> >> >>>> >> >> >>     csoundDebuggerInit(csound);
>>>> >>>>> >> >> >>>> >> >> >>     csoundSetBreakpointCallback(csound,
>>>> >>>>> >> >> >>>> >> >> >> brkpt_cb,
>>>> >>>>> >> >> >>>> >> >> >> (void
>>>> >>>>> >> >> >>>> >> >> >> *)
>>>> >>>>> >> >> >>>> >> >> >> &break_count);
>>>> >>>>> >> >> >>>> >> >> >>     csoundSetInstrumentBreakpoint(csound, 1.1,
>>>> >>>>> >> >> >>>> >> >> >> 0);
>>>> >>>>> >> >> >>>> >> >> >>
>>>> >>>>> >> >> >>>> >> >> >>     for (i = 0; i < 1000; i++) {
>>>> >>>>> >> >> >>>> >> >> >>         csoundPerformKsmps(csound);
>>>> >>>>> >> >> >>>> >> >> >>     }
>>>> >>>>> >> >> >>>> >> >> >>     CU_ASSERT(break_count == 1);
>>>> >>>>> >> >> >>>> >> >> >>
>>>> >>>>> >> >> >>>> >> >> >>     csoundDebuggerClean(csound);
>>>> >>>>> >> >> >>>> >> >> >>     csoundDestroy(csound);
>>>> >>>>> >> >> >>>> >> >> >>
>>>> >>>>> >> >> >>>> >> >> >> Whenever the breakpoint is reached, the
>>>> >>>>> >> >> >>>> >> >> >> breakpoint
>>>> >>>>> >> >> >>>> >> >> >> callback
>>>> >>>>> >> >> >>>> >> >> >> is
>>>> >>>>> >> >> >>>> >> >> >> called.
>>>> >>>>> >> >> >>>> >> >> >>
>>>> >>>>> >> >> >>>> >> >> >> Currently only instrument breakpoints are
>>>> >>>>> >> >> >>>> >> >> >> implemented
>>>> >>>>> >> >> >>>> >> >> >> (i.e.
>>>> >>>>> >> >> >>>> >> >> >> the
>>>> >>>>> >> >> >>>> >> >> >> debugger
>>>> >>>>> >> >> >>>> >> >> >> breaks when an instrument is active), but I also
>>>> >>>>> >> >> >>>> >> >> >> want to
>>>> >>>>> >> >> >>>> >> >> >> add
>>>> >>>>> >> >> >>>> >> >> >> line
>>>> >>>>> >> >> >>>> >> >> >> breakpoints.
>>>> >>>>> >> >> >>>> >> >> >>
>>>> >>>>> >> >> >>>> >> >> >> Cheers,
>>>> >>>>> >> >> >>>> >> >> >> Andrés
>>>> >>>>> >> >> >>>> >> >> >>
>>>> >>>>> >> >> >>>> >> >> >> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>>> >>>>> >> >> >>>> >> >> >> 
>>>> >>>>> >> >> >>>> >> >> >> wrote:
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> > Wow, this looks super cool Andres. I'm just
>>>> >>>>> >> >> >>>> >> >> >> > looking
>>>> >>>>> >> >> >>>> >> >> >> > through
>>>> >>>>> >> >> >>>> >> >> >> > the
>>>> >>>>> >> >> >>>> >> >> >> > code
>>>> >>>>> >> >> >>>> >> >> >> > now. Do you have a basic example of setting
>>>> >>>>> >> >> >>>> >> >> >> > this
>>>> >>>>> >> >> >>>> >> >> >> > up?
>>>> >>>>> >> >> >>>> >> >> >> > The
>>>> >>>>> >> >> >>>> >> >> >> > CUnit
>>>> >>>>> >> >> >>>> >> >> >> > stuff
>>>> >>>>> >> >> >>>> >> >> >> > in that debugger test code you posted is
>>>> >>>>> >> >> >>>> >> >> >> > confusing
>>>> >>>>> >> >> >>>> >> >> >> > me.
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> > On 10 April 2014 21:13, Andres Cabrera
>>>> >>>>> >> >> >>>> >> >> >> > 
>>>> >>>>> >> >> >>>> >> >> >> > wrote:
>>>> >>>>> >> >> >>>> >> >> >> > > Hi,
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > The Csound debugger I'm working on is
>>>> >>>>> >> >> >>>> >> >> >> > > finally
>>>> >>>>> >> >> >>>> >> >> >> > > getting
>>>> >>>>> >> >> >>>> >> >> >> > > to
>>>> >>>>> >> >> >>>> >> >> >> > > a
>>>> >>>>> >> >> >>>> >> >> >> > > useful
>>>> >>>>> >> >> >>>> >> >> >> > > testing
>>>> >>>>> >> >> >>>> >> >> >> > > stage.
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > I've been doing the work in the csdebugger
>>>> >>>>> >> >> >>>> >> >> >> > > branch, if
>>>> >>>>> >> >> >>>> >> >> >> > > you
>>>> >>>>> >> >> >>>> >> >> >> > > have
>>>> >>>>> >> >> >>>> >> >> >> > > time,
>>>> >>>>> >> >> >>>> >> >> >> > > please
>>>> >>>>> >> >> >>>> >> >> >> > > have a look.
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > To build the debugger, you will need to add
>>>> >>>>> >> >> >>>> >> >> >> > > to
>>>> >>>>> >> >> >>>> >> >> >> > > cmake:
>>>> >>>>> >> >> >>>> >> >> >> > > -DBUILD_DEBUGGER=1
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > You will find some simple tests of the API
>>>> >>>>> >> >> >>>> >> >> >> > > here:
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > I have written a debugger front-end within
>>>> >>>>> >> >> >>>> >> >> >> > > CsoundQt,
>>>> >>>>> >> >> >>>> >> >> >> > > which
>>>> >>>>> >> >> >>>> >> >> >> > > you
>>>> >>>>> >> >> >>>> >> >> >> > > are
>>>> >>>>> >> >> >>>> >> >> >> > > welcome
>>>> >>>>> >> >> >>>> >> >> >> > > to try out too:
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > http://qutecsound.sourceforge.net/debugger2.html
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > Some internal details:
>>>> >>>>> >> >> >>>> >> >> >> > > The debugger interface is found at:
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > Although the debugger functions are part of
>>>> >>>>> >> >> >>>> >> >> >> > > the
>>>> >>>>> >> >> >>>> >> >> >> > > API,
>>>> >>>>> >> >> >>>> >> >> >> > > I
>>>> >>>>> >> >> >>>> >> >> >> > > think
>>>> >>>>> >> >> >>>> >> >> >> > > it's
>>>> >>>>> >> >> >>>> >> >> >> > > cleaner to
>>>> >>>>> >> >> >>>> >> >> >> > > have them in their own header, as they are
>>>> >>>>> >> >> >>>> >> >> >> > > also
>>>> >>>>> >> >> >>>> >> >> >> > > a
>>>> >>>>> >> >> >>>> >> >> >> > > compile
>>>> >>>>> >> >> >>>> >> >> >> > > time
>>>> >>>>> >> >> >>>> >> >> >> > > option.
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > Because the changes are somewhat invasive, I
>>>> >>>>> >> >> >>>> >> >> >> > > chose to
>>>> >>>>> >> >> >>>> >> >> >> > > make
>>>> >>>>> >> >> >>>> >> >> >> > > the
>>>> >>>>> >> >> >>>> >> >> >> > > kperf
>>>> >>>>> >> >> >>>> >> >> >> > > function a pointer within the CSOUND struct
>>>> >>>>> >> >> >>>> >> >> >> > > that
>>>> >>>>> >> >> >>>> >> >> >> > > defaults to
>>>> >>>>> >> >> >>>> >> >> >> > > nodebug.
>>>> >>>>> >> >> >>>> >> >> >> > > When
>>>> >>>>> >> >> >>>> >> >> >> > > the debugger is initialized the kperf
>>>> >>>>> >> >> >>>> >> >> >> > > function
>>>> >>>>> >> >> >>>> >> >> >> > > pointer
>>>> >>>>> >> >> >>>> >> >> >> > > is
>>>> >>>>> >> >> >>>> >> >> >> > > switched
>>>> >>>>> >> >> >>>> >> >> >> > > to
>>>> >>>>> >> >> >>>> >> >> >> > > the
>>>> >>>>> >> >> >>>> >> >> >> > > debug version, and switched back when the
>>>> >>>>> >> >> >>>> >> >> >> > > debugger is
>>>> >>>>> >> >> >>>> >> >> >> > > disabled
>>>> >>>>> >> >> >>>> >> >> >> > > csoundDebuggerInit() and
>>>> >>>>> >> >> >>>> >> >> >> > > csoundDebuggerClean()
>>>> >>>>> >> >> >>>> >> >> >> > > functions.
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > When a breakpoint is reached, a callback
>>>> >>>>> >> >> >>>> >> >> >> > > function
>>>> >>>>> >> >> >>>> >> >> >> > > that
>>>> >>>>> >> >> >>>> >> >> >> > > has
>>>> >>>>> >> >> >>>> >> >> >> > > been
>>>> >>>>> >> >> >>>> >> >> >> > > registered
>>>> >>>>> >> >> >>>> >> >> >> > > with csoundSetBreakpointCallback(CSOUND
>>>> >>>>> >> >> >>>> >> >> >> > > *csound,
>>>> >>>>> >> >> >>>> >> >> >> > > breakpoint_cb_t
>>>> >>>>> >> >> >>>> >> >> >> > > bkpt_cb,
>>>> >>>>> >> >> >>>> >> >> >> > > void *userdata) is called.
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > When a breakpoint is reached, after the
>>>> >>>>> >> >> >>>> >> >> >> > > callback
>>>> >>>>> >> >> >>>> >> >> >> > > is
>>>> >>>>> >> >> >>>> >> >> >> > > called,
>>>> >>>>> >> >> >>>> >> >> >> > > the
>>>> >>>>> >> >> >>>> >> >> >> > > kperf
>>>> >>>>> >> >> >>>> >> >> >> > > function continues running as usual,
>>>> >>>>> >> >> >>>> >> >> >> > > providing
>>>> >>>>> >> >> >>>> >> >> >> > > empty
>>>> >>>>> >> >> >>>> >> >> >> > > buffers
>>>> >>>>> >> >> >>>> >> >> >> > > to
>>>> >>>>> >> >> >>>> >> >> >> > > the
>>>> >>>>> >> >> >>>> >> >> >> > > audio
>>>> >>>>> >> >> >>>> >> >> >> > > hardware, and not incrementing the time
>>>> >>>>> >> >> >>>> >> >> >> > > counters
>>>> >>>>> >> >> >>>> >> >> >> > > in
>>>> >>>>> >> >> >>>> >> >> >> > > musmon.
>>>> >>>>> >> >> >>>> >> >> >> > > When
>>>> >>>>> >> >> >>>> >> >> >> > > a
>>>> >>>>> >> >> >>>> >> >> >> > > continue
>>>> >>>>> >> >> >>>> >> >> >> > > is reached, the graph traversing continues
>>>> >>>>> >> >> >>>> >> >> >> > > where
>>>> >>>>> >> >> >>>> >> >> >> > > it
>>>> >>>>> >> >> >>>> >> >> >> > > left
>>>> >>>>> >> >> >>>> >> >> >> > > off.
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > There are probably still a few bugs, but
>>>> >>>>> >> >> >>>> >> >> >> > > it's
>>>> >>>>> >> >> >>>> >> >> >> > > now
>>>> >>>>> >> >> >>>> >> >> >> > > working on
>>>> >>>>> >> >> >>>> >> >> >> > > my
>>>> >>>>> >> >> >>>> >> >> >> > > simple
>>>> >>>>> >> >> >>>> >> >> >> > > tests.
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > Any ideas, thoughts and suggestions are very
>>>> >>>>> >> >> >>>> >> >> >> > > welcome.
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > Cheers,
>>>> >>>>> >> >> >>>> >> >> >> > > Andrés
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > ------------------------------------------------------------------------------
>>>> >>>>> >> >> >>>> >> >> >> > > Put Bad Developers to Shame
>>>> >>>>> >> >> >>>> >> >> >> > > Dominate Development with Jenkins Continuous
>>>> >>>>> >> >> >>>> >> >> >> > > Integration
>>>> >>>>> >> >> >>>> >> >> >> > > Continuously Automate Build, Test &
>>>> >>>>> >> >> >>>> >> >> >> > > Deployment
>>>> >>>>> >> >> >>>> >> >> >> > > Start a new project now. Try Jenkins in the
>>>> >>>>> >> >> >>>> >> >> >> > > cloud.
>>>> >>>>> >> >> >>>> >> >> >> > > http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > _______________________________________________
>>>> >>>>> >> >> >>>> >> >> >> > > Csound-devel mailing list
>>>> >>>>> >> >> >>>> >> >> >> > > Csound-devel@lists.sourceforge.net
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> > > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >> >> >>>> >> >> >> > >
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> > ------------------------------------------------------------------------------
>>>> >>>>> >> >> >>>> >> >> >> > Put Bad Developers to Shame
>>>> >>>>> >> >> >>>> >> >> >> > Dominate Development with Jenkins Continuous
>>>> >>>>> >> >> >>>> >> >> >> > Integration
>>>> >>>>> >> >> >>>> >> >> >> > Continuously Automate Build, Test & Deployment
>>>> >>>>> >> >> >>>> >> >> >> > Start a new project now. Try Jenkins in the
>>>> >>>>> >> >> >>>> >> >> >> > cloud.
>>>> >>>>> >> >> >>>> >> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> > _______________________________________________
>>>> >>>>> >> >> >>>> >> >> >> > Csound-devel mailing list
>>>> >>>>> >> >> >>>> >> >> >> > Csound-devel@lists.sourceforge.net
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> >
>>>> >>>>> >> >> >>>> >> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >> >> >>>> >> >> >>
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> > ------------------------------------------------------------------------------
>>>> >>>>> >> >> >>>> >> >> > Put Bad Developers to Shame
>>>> >>>>> >> >> >>>> >> >> > Dominate Development with Jenkins Continuous
>>>> >>>>> >> >> >>>> >> >> > Integration
>>>> >>>>> >> >> >>>> >> >> > Continuously Automate Build, Test & Deployment
>>>> >>>>> >> >> >>>> >> >> > Start a new project now. Try Jenkins in the
>>>> >>>>> >> >> >>>> >> >> > cloud.
>>>> >>>>> >> >> >>>> >> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> >> >> >>>> >> >> > _______________________________________________
>>>> >>>>> >> >> >>>> >> >> > Csound-devel mailing list
>>>> >>>>> >> >> >>>> >> >> > Csound-devel@lists.sourceforge.net
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >> >> >>>> >> >> >
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >> ------------------------------------------------------------------------------
>>>> >>>>> >> >> >>>> >> >> Put Bad Developers to Shame
>>>> >>>>> >> >> >>>> >> >> Dominate Development with Jenkins Continuous
>>>> >>>>> >> >> >>>> >> >> Integration
>>>> >>>>> >> >> >>>> >> >> Continuously Automate Build, Test & Deployment
>>>> >>>>> >> >> >>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>>> >>>>> >> >> >>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> >> >> >>>> >> >> _______________________________________________
>>>> >>>>> >> >> >>>> >> >> Csound-devel mailing list
>>>> >>>>> >> >> >>>> >> >> Csound-devel@lists.sourceforge.net
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >>
>>>> >>>>> >> >> >>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> > ------------------------------------------------------------------------------
>>>> >>>>> >> >> >>>> >> > Put Bad Developers to Shame
>>>> >>>>> >> >> >>>> >> > Dominate Development with Jenkins Continuous
>>>> >>>>> >> >> >>>> >> > Integration
>>>> >>>>> >> >> >>>> >> > Continuously Automate Build, Test & Deployment
>>>> >>>>> >> >> >>>> >> > Start a new project now. Try Jenkins in the cloud.
>>>> >>>>> >> >> >>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> >> >> >>>> >> > _______________________________________________
>>>> >>>>> >> >> >>>> >> > Csound-devel mailing list
>>>> >>>>> >> >> >>>> >> > Csound-devel@lists.sourceforge.net
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >> >> >>>> >> >
>>>> >>>>> >> >> >>>> >>
>>>> >>>>> >> >> >>>> >>
>>>> >>>>> >> >> >>>> >>
>>>> >>>>> >> >> >>>> >>
>>>> >>>>> >> >> >>>> >>
>>>> >>>>> >> >> >>>> >>
>>>> >>>>> >> >> >>>> >>
>>>> >>>>> >> >> >>>> >> ------------------------------------------------------------------------------
>>>> >>>>> >> >> >>>> >> Put Bad Developers to Shame
>>>> >>>>> >> >> >>>> >> Dominate Development with Jenkins Continuous
>>>> >>>>> >> >> >>>> >> Integration
>>>> >>>>> >> >> >>>> >> Continuously Automate Build, Test & Deployment
>>>> >>>>> >> >> >>>> >> Start a new project now. Try Jenkins in the cloud.
>>>> >>>>> >> >> >>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> >> >> >>>> >> _______________________________________________
>>>> >>>>> >> >> >>>> >> Csound-devel mailing list
>>>> >>>>> >> >> >>>> >> Csound-devel@lists.sourceforge.net
>>>> >>>>> >> >> >>>> >>
>>>> >>>>> >> >> >>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> > ------------------------------------------------------------------------------
>>>> >>>>> >> >> >>>> > Put Bad Developers to Shame
>>>> >>>>> >> >> >>>> > Dominate Development with Jenkins Continuous
>>>> >>>>> >> >> >>>> > Integration
>>>> >>>>> >> >> >>>> > Continuously Automate Build, Test & Deployment
>>>> >>>>> >> >> >>>> > Start a new project now. Try Jenkins in the cloud.
>>>> >>>>> >> >> >>>> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> >> >> >>>> > _______________________________________________
>>>> >>>>> >> >> >>>> > Csound-devel mailing list
>>>> >>>>> >> >> >>>> > Csound-devel@lists.sourceforge.net
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >> >> >>>> >
>>>> >>>>> >> >> >>>>
>>>> >>>>> >> >> >>>>
>>>> >>>>> >> >> >>>>
>>>> >>>>> >> >> >>>>
>>>> >>>>> >> >> >>>>
>>>> >>>>> >> >> >>>>
>>>> >>>>> >> >> >>>> ------------------------------------------------------------------------------
>>>> >>>>> >> >> >>>> Put Bad Developers to Shame
>>>> >>>>> >> >> >>>> Dominate Development with Jenkins Continuous Integration
>>>> >>>>> >> >> >>>> Continuously Automate Build, Test & Deployment
>>>> >>>>> >> >> >>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>>>> >> >> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> >> >> >>>> _______________________________________________
>>>> >>>>> >> >> >>>> Csound-devel mailing list
>>>> >>>>> >> >> >>>> Csound-devel@lists.sourceforge.net
>>>> >>>>> >> >> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>> ------------------------------------------------------------------------------
>>>> >>>>> >> >> >>> Put Bad Developers to Shame
>>>> >>>>> >> >> >>> Dominate Development with Jenkins Continuous Integration
>>>> >>>>> >> >> >>> Continuously Automate Build, Test & Deployment
>>>> >>>>> >> >> >>> Start a new project now. Try Jenkins in the cloud.
>>>> >>>>> >> >> >>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> >> >> >>> _______________________________________________
>>>> >>>>> >> >> >>> Csound-devel mailing list
>>>> >>>>> >> >> >>> Csound-devel@lists.sourceforge.net
>>>> >>>>> >> >> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >> >> >>>
>>>> >>>>> >> >> >>
>>>> >>>>> >> >>
>>>> >>>>> >> >>
>>>> >>>>> >> >>
>>>> >>>>> >> >>
>>>> >>>>> >> >>
>>>> >>>>> >> >> ------------------------------------------------------------------------------
>>>> >>>>> >> >> Put Bad Developers to Shame
>>>> >>>>> >> >> Dominate Development with Jenkins Continuous Integration
>>>> >>>>> >> >> Continuously Automate Build, Test & Deployment
>>>> >>>>> >> >> Start a new project now. Try Jenkins in the cloud.
>>>> >>>>> >> >> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> >> >> _______________________________________________
>>>> >>>>> >> >> Csound-devel mailing list
>>>> >>>>> >> >> Csound-devel@lists.sourceforge.net
>>>> >>>>> >> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >> >
>>>> >>>>> >> >
>>>> >>>>> >> >
>>>> >>>>> >> >
>>>> >>>>> >> >
>>>> >>>>> >> >
>>>> >>>>> >> > ------------------------------------------------------------------------------
>>>> >>>>> >> > Put Bad Developers to Shame
>>>> >>>>> >> > Dominate Development with Jenkins Continuous Integration
>>>> >>>>> >> > Continuously Automate Build, Test & Deployment
>>>> >>>>> >> > Start a new project now. Try Jenkins in the cloud.
>>>> >>>>> >> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> >> > _______________________________________________
>>>> >>>>> >> > Csound-devel mailing list
>>>> >>>>> >> > Csound-devel@lists.sourceforge.net
>>>> >>>>> >> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >> >
>>>> >>>>> >>
>>>> >>>>> >>
>>>> >>>>> >>
>>>> >>>>> >>
>>>> >>>>> >> ------------------------------------------------------------------------------
>>>> >>>>> >> Put Bad Developers to Shame
>>>> >>>>> >> Dominate Development with Jenkins Continuous Integration
>>>> >>>>> >> Continuously Automate Build, Test & Deployment
>>>> >>>>> >> Start a new project now. Try Jenkins in the cloud.
>>>> >>>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> >> _______________________________________________
>>>> >>>>> >> Csound-devel mailing list
>>>> >>>>> >> Csound-devel@lists.sourceforge.net
>>>> >>>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >
>>>> >>>>> >
>>>> >>>>> >
>>>> >>>>> >
>>>> >>>>> >
>>>> >>>>> > ------------------------------------------------------------------------------
>>>> >>>>> > Put Bad Developers to Shame
>>>> >>>>> > Dominate Development with Jenkins Continuous Integration
>>>> >>>>> > Continuously Automate Build, Test & Deployment
>>>> >>>>> > Start a new project now. Try Jenkins in the cloud.
>>>> >>>>> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> > _______________________________________________
>>>> >>>>> > Csound-devel mailing list
>>>> >>>>> > Csound-devel@lists.sourceforge.net
>>>> >>>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>> >
>>>> >>>>>
>>>> >>>>>
>>>> >>>>>
>>>> >>>>> ------------------------------------------------------------------------------
>>>> >>>>> Put Bad Developers to Shame
>>>> >>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>>>> Continuously Automate Build, Test & Deployment
>>>> >>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>>>> _______________________________________________
>>>> >>>>> Csound-devel mailing list
>>>> >>>>> Csound-devel@lists.sourceforge.net
>>>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>>
>>>> >>>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> ------------------------------------------------------------------------------
>>>> >>> Put Bad Developers to Shame
>>>> >>> Dominate Development with Jenkins Continuous Integration
>>>> >>> Continuously Automate Build, Test & Deployment
>>>> >>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> _______________________________________________
>>>> >>> Csound-devel mailing list
>>>> >>> Csound-devel@lists.sourceforge.net
>>>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>>
>>>> >>
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Put Bad Developers to Shame
>>>> Dominate Development with Jenkins Continuous Integration
>>>> Continuously Automate Build, Test & Deployment
>>>> Start a new project now. Try Jenkins in the cloud.
>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> _______________________________________________
>>>> Csound-devel mailing list
>>>> Csound-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-13 09:44
FromVictor Lazzarini
SubjectRe: [Cs-dev] Csound Debugger
csound->GetKcounter( )

http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
========================
Dr Victor Lazzarini
Senior Lecturer
NUI Maynooth, Ireland
victor dot lazzarini at nuim dot ie




On 12 Apr 2014, at 18:36, Rory Walsh  wrote:

> Finally, how can one query the current k-pass, as in how many k-cycles
> have passed? I can put in a counter in my own processing thread, but I
> thought it might be simple to grab from Csound?
> 
> On 12 April 2014 13:20, Rory Walsh  wrote:
>> Hi Andres. All going good here. I just wanted to ask you something
>> about the implementation. Am I right in saying that whenever
>> csoundDebuggerInit() is called the CSOUND structure that is passed to
>> it gets appended with some csdebug_data_t data? This data block is
>> then zeroed and removed when one calls csoundDebuggerClean()? One
>> little issue I have is that I seem to have to call
>> csoundDebuggerInit() before I set my breakpoints, that is every time I
>> set a breakpoint or call any of the debugger methods I have to call
>> csoundDebuggerInit() first. Otherwise I get an assert in the
>> breakpoint functions because csound->csdebug_data_t is no longer
>> valid. I guess there is no harm in calling csoundDebuggerInit() each
>> time one updates or removes a breakpoint if all it does it
>> add/overwrite a data block in the underlying Csound object? I'd love
>> to see this in the next release. It would be nice to ship a command
>> line app in all packages that would work like the gdb debugger.
>> 
>> On 11 April 2014 22:51, Rory Walsh  wrote:
>>> This is really great Andres. I threw together a simple command line
>>> application that perhaps you could add to the test suite? I just
>>> robbed what I could understand from yours and slotted it into as basic
>>> an example as I could think off.
>>> 
>>> Usage:
>>> 
>>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>>> 
>>> Once the breakpoint at the given k-cycle is hit the debugger will
>>> print the values of each of the variables in the chosen instrument ala
>>> 
>>> ==============================================
>>> Breakpoint at instr 1
>>> Number of k-cycles into performance: 100
>>> ------------------------------------------------------
>>> VarName:Schannel    value = hello         varType[S]
>>> VarName:k1    value = 0.580499     varType[k]
>>> VarName:aout    value = 0.0823895     varType[a]
>>> VarName:ksmps     varType[r]
>>> 
>>> I have to say hats off. This is very clever. I can't wait to add
>>> something like this to Cabbage.
>>> 
>>> 
>>> On 11 April 2014 22:08, Andres Cabrera  wrote:
>>>> Hi,
>>>> 
>>>> Good to hear you've got it going. The only performance penalty if you don't
>>>> call csoundDebuggerInit is that kperf is a function pointer rather than a
>>>> function. If you have called csoundDebuggerInit, then you will be running a
>>>> slightly heavier kperf_debug function, which needs to check whether there
>>>> are new debug commands (like break, continue, or new breakpoints), and which
>>>> needs to check on every new instrument in the chain whether it matches one
>>>> of the existing breakpoints. It's not too much, since it's done at control
>>>> rate, but there is a penalty. Performance during debugging will also get a
>>>> little worse once line breakpoints are implemented because there will have
>>>> to be a check for every ugen called within an instrument. But still I think
>>>> the difference in performance between debug and no debug will not be as
>>>> large as it is for C.
>>>> 
>>>> Cheers,
>>>> Andrés
>>>> 
>>>> 
>>>> 
>>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh  wrote:
>>>>> 
>>>>> Sorry for the noise! I'm properly checked out now and enjoying the
>>>>> ride! This is great. Are there any performance costs if no breakpoint
>>>>> is set?
>>>>> 
>>>>> On 11 April 2014 09:05, Rory Walsh  wrote:
>>>>>> I assume that since I am getting no build or linker errors that there
>>>>>> is something amiss in my code?
>>>>>> 
>>>>>> On 11 April 2014 01:51, Rory Walsh  wrote:
>>>>>>> No. None at all?
>>>>>>> 
>>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera"  wrote:
>>>>>>>> 
>>>>>>>> Are you getting build errors?
>>>>>>>> 
>>>>>>>> Cheers,
>>>>>>>> Andrés
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>>>>>>> 
>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> Did you checkout the csdebugger branch for csound and run cmake with
>>>>>>>>> -DBUILD_DEBUGGER=1?
>>>>>>>>> 
>>>>>>>>> Cheers,
>>>>>>>>> Andrés
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh  wrote:
>>>>>>>>>> 
>>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>>>>>>>>> 
>>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera 
>>>>>>>>>> wrote:
>>>>>>>>>>> easier to do:
>>>>>>>>>>> 
>>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>>>>>>>>>>> 
>>>>>>>>>>> Cheers,
>>>>>>>>>>> Andrés
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh 
>>>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> I'm probably adding the wrong lines to cmakelists.txt?
>>>>>>>>>>>> 
>>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>>>>>>>>>>>> 
>>>>>>>>>>>> Is that right?
>>>>>>>>>>>> 
>>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera 
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> Yes it would :)
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh 
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> It would help if I built with the debugger enabled :)
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh  wrote:
>>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs and scores,
>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>> allowed? My breakpoint callback is never being hit. What am
>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>> missing?
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr, void
>>>>>>>>>>>>>>> *userdata);
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> int main(int argc, char *argv[])
>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>    int break_count = 0;
>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>>>>>>>>>>>>>>>    csoundStart(csound);
>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>>>>>>>>>>>>>>> &break_count);
>>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> //this never gets called.
>>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr, void
>>>>>>>>>>>>>>> *userdata)
>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>    int *count = (int *) userdata;
>>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line, instr);
>>>>>>>>>>>>>>>    *count = *count + 1;
>>>>>>>>>>>>>>> };
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh  wrote:
>>>>>>>>>>>>>>>> That's great. Thanks.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Currently only instrument breakpoints are implemented...
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head around this I
>>>>>>>>>>>>>>>>>> might
>>>>>>>>>>>>>>>>>> try
>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>> write a simple command line app that passes a breakpoint
>>>>>>>>>>>>>>>>>> line
>>>>>>>>>>>>>>>>>> number
>>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it will print out
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>> values
>>>>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>> each variable in that instrument. That would be a start.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>> Not exactly.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> the function:
>>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active instrument
>>>>>>>>>>>>>>>>>>> (where
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> debugger
>>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>>>>>>>>>>>>>>>>>>> information
>>>>>>>>>>>>>>>>>>> about
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> instrument instance (variables and time counters,
>>>>>>>>>>>>>>>>>>> p-fields,
>>>>>>>>>>>>>>>>>>> etc.)
>>>>>>>>>>>>>>>>>>> from
>>>>>>>>>>>>>>>>>>> it.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> The callback function is only called if a breakpoint is
>>>>>>>>>>>>>>>>>>> reached,
>>>>>>>>>>>>>>>>>>> which
>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> checked inside csound's kperf function. There is a
>>>>>>>>>>>>>>>>>>> linked
>>>>>>>>>>>>>>>>>>> list
>>>>>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a thread-safe way),
>>>>>>>>>>>>>>>>>>> which
>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> traversed
>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>> check if the current instrument matches a breakpoint.
>>>>>>>>>>>>>>>>>>> For
>>>>>>>>>>>>>>>>>>> line
>>>>>>>>>>>>>>>>>>> breakpoints,
>>>>>>>>>>>>>>>>>>> what will need to happen is that for every opcode that
>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> executed,
>>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint line.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> So you grab the values for all the variables in a
>>>>>>>>>>>>>>>>>>>> particular
>>>>>>>>>>>>>>>>>>>> line
>>>>>>>>>>>>>>>>>>>> each
>>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I reading that
>>>>>>>>>>>>>>>>>>>> right?
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> void CsoundEngine::breakpointCallback(CSOUND
>>>>>>>>>>>>>>>>>>>>> *csound,
>>>>>>>>>>>>>>>>>>>>> int
>>>>>>>>>>>>>>>>>>>>> line,
>>>>>>>>>>>>>>>>>>>>> double
>>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>>>>>>>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " << line <<
>>>>>>>>>>>>>>>>>>>>> instr;
>>>>>>>>>>>>>>>>>>>>>    INSDS *insds = csoundDebugGetInstrument(csound);
>>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *) udata;
>>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp = insds->instr->varPool->head;
>>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>>>>>>>>>>>>>>>>>>>>>    while (vp) {
>>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>>>>>>>>>>>>>>>>>>>>>            if (strcmp(vp->varType->varTypeName,
>>>>>>>>>>>>>>>>>>>>> "i") ==
>>>>>>>>>>>>>>>>>>>>> 0
>>>>>>>>>>>>>>>>>>>>>                    ||
>>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>>>>>>>>>>>>>>>>>>>>> "k")
>>>>>>>>>>>>>>>>>>>>> ==
>>>>>>>>>>>>>>>>>>>>> 0) {
>>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>>>>>>>>>>>>>>>>>>>>                } else {
>>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas +
>>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(*varmem);
>>>>>>>>>>>>>>>>>>>>>                }
>>>>>>>>>>>>>>>>>>>>>            } else
>>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>>>>>>>>>>>>>>>>>>>>> "S")
>>>>>>>>>>>>>>>>>>>>> ==
>>>>>>>>>>>>>>>>>>>>> 0) {
>>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>>>>>>>>>>>>>>>>>>>>                } else {
>>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(varmem);
>>>>>>>>>>>>>>>>>>>>>                }
>>>>>>>>>>>>>>>>>>>>>            } else if
>>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>>>>>>>>>>>>>>>>>>>> "a")
>>>>>>>>>>>>>>>>>>>>> ==
>>>>>>>>>>>>>>>>>>>>> 0) {
>>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>>>>>>>>>>>>>>>>>>>>> 2)<<
>>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>>>>>>>>>>>>>>>>>>>>>                } else {
>>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas +
>>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(*varmem);
>>>>>>>>>>>>>>>>>>>>>                }
>>>>>>>>>>>>>>>>>>>>>            } else {
>>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>>>>>>>>>>>>>>>>>>>>>            }
>>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varType->varTypeName;
>>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>>>>>>>>>>>>>>>>>>>>>        }
>>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>>>>>>>>>>>>>>>>>>>>>    }
>>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>>>>>>>>>>>>>>>>>>>>>    }
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>    while (in) {
>>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>>>>>>>>>>>>>>>>>>>>>    }
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause button and
>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>> debugger
>>>>>>>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>>>>>>> stop
>>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is no
>>>>>>>>>>>>>>>>>>>>> breakpoint
>>>>>>>>>>>>>>>>>>>>> there.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value of a
>>>>>>>>>>>>>>>>>>>>>> variable
>>>>>>>>>>>>>>>>>>>>>> once
>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access that
>>>>>>>>>>>>>>>>>>>>>> information
>>>>>>>>>>>>>>>>>>>>>> from
>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger interface in
>>>>>>>>>>>>>>>>>>>>>> CsounsQT
>>>>>>>>>>>>>>>>>>>>>> looks
>>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to implement
>>>>>>>>>>>>>>>>>>>>>> anything as
>>>>>>>>>>>>>>>>>>>>>> professional
>>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being able to stop
>>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>> query
>>>>>>>>>>>>>>>>>>>>>> variables
>>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your screen-shot
>>>>>>>>>>>>>>>>>>>>>> seems to
>>>>>>>>>>>>>>>>>>>>>> indicate
>>>>>>>>>>>>>>>>>>>>>> so?
>>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets the
>>>>>>>>>>>>>>>>>>>>>>> CSOUND
>>>>>>>>>>>>>>>>>>>>>>> structure, it
>>>>>>>>>>>>>>>>>>>>>>> can
>>>>>>>>>>>>>>>>>>>>>>> get
>>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do something
>>>>>>>>>>>>>>>>>>>>>>>> like:
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr 1\nasig
>>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0   1
>>>>>>>>>>>>>>>>>>>>>>>> 440");
>>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>>>>>>>>>>>>>>>>>>>>>>>> (void
>>>>>>>>>>>>>>>>>>>>>>>> *)
>>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>>>>>>>>>>>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1.1,
>>>>>>>>>>>>>>>>>>>>>>>> 0);
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>>>>>>>>>>>>>>>>>>>>>>>>    }
>>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>>>>>>>>>>>>>>>>>>>>>>>> callback
>>>>>>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>>>>> called.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>>>>>>>>>>>>>>>>>>>>>>> implemented
>>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>> debugger
>>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active), but I also
>>>>>>>>>>>>>>>>>>>>>>>> want to
>>>>>>>>>>>>>>>>>>>>>>>> add
>>>>>>>>>>>>>>>>>>>>>>>> line
>>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm just
>>>>>>>>>>>>>>>>>>>>>>>>> looking
>>>>>>>>>>>>>>>>>>>>>>>>> through
>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>> code
>>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of setting
>>>>>>>>>>>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>>>>>>>>>> up?
>>>>>>>>>>>>>>>>>>>>>>>>> The
>>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>>>>>>>>>>>>>>>>>>>>>>>>> stuff
>>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted is
>>>>>>>>>>>>>>>>>>>>>>>>> confusing
>>>>>>>>>>>>>>>>>>>>>>>>> me.
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>>>>>>>>>>>>>>>>>>>>>>>>>> finally
>>>>>>>>>>>>>>>>>>>>>>>>>> getting
>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>> useful
>>>>>>>>>>>>>>>>>>>>>>>>>> testing
>>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the csdebugger
>>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>>>>>>>>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>>>>>>>> time,
>>>>>>>>>>>>>>>>>>>>>>>>>> please
>>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need to add
>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of the API
>>>>>>>>>>>>>>>>>>>>>>>>>> here:
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end within
>>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>>>>>>>>>>>>>>>>>>>>>>>>>> which
>>>>>>>>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are part of
>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> API,
>>>>>>>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as they are
>>>>>>>>>>>>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>> compile
>>>>>>>>>>>>>>>>>>>>>>>>>> time
>>>>>>>>>>>>>>>>>>>>>>>>>> option.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat invasive, I
>>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>>>>>>>>>>>>>>>>>>>>>>>>>> make
>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND struct
>>>>>>>>>>>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>>>>>>>>>>>>>>>>>>>>>>>>>> When
>>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>>>>>>>>>>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>>>>>>> switched
>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when the
>>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a callback
>>>>>>>>>>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>>>>>>>>>>> has
>>>>>>>>>>>>>>>>>>>>>>>>>> been
>>>>>>>>>>>>>>>>>>>>>>>>>> registered
>>>>>>>>>>>>>>>>>>>>>>>>>> with csoundSetBreakpointCallback(CSOUND
>>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after the
>>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>>>>>>> called,
>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>>>>>>>>>>>>>>>>>>>>>>>>>> providing
>>>>>>>>>>>>>>>>>>>>>>>>>> empty
>>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> audio
>>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the time
>>>>>>>>>>>>>>>>>>>>>>>>>> counters
>>>>>>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>>>>>>>>>>>>>>>>>>>>>>>>>> When
>>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>> continue
>>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing continues
>>>>>>>>>>>>>>>>>>>>>>>>>> where
>>>>>>>>>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>>>>>>>> left
>>>>>>>>>>>>>>>>>>>>>>>>>> off.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs, but
>>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>>>>>>>>>>>>>>>>>>>>>>>>> now
>>>>>>>>>>>>>>>>>>>>>>>>>> working on
>>>>>>>>>>>>>>>>>>>>>>>>>> my
>>>>>>>>>>>>>>>>>>>>>>>>>> simple
>>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions are very
>>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>> Put Bad Developers to Shame
>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>> _______________________________________________
>>>>>>>> Csound-devel mailing list
>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>> 
>>>>>>> 
>>>>> 
>>>>> 
>>>>> ------------------------------------------------------------------------------
>>>>> Put Bad Developers to Shame
>>>>> Dominate Development with Jenkins Continuous Integration
>>>>> Continuously Automate Build, Test & Deployment
>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>> _______________________________________________
>>>>> Csound-devel mailing list
>>>>> Csound-devel@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> 
>>>> 
>>>> 
>>>> ------------------------------------------------------------------------------
>>>> Put Bad Developers to Shame
>>>> Dominate Development with Jenkins Continuous Integration
>>>> Continuously Automate Build, Test & Deployment
>>>> Start a new project now. Try Jenkins in the cloud.
>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> _______________________________________________
>>>> Csound-devel mailing list
>>>> Csound-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> 
> 
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment 
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
> 



------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-13 10:54
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  

That's easy. Nice one.

On 13 Apr 2014 09:44, "Victor Lazzarini" <Victor.Lazzarini@nuim.ie> wrote:
csound->GetKcounter( )

http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
========================
Dr Victor Lazzarini
Senior Lecturer
NUI Maynooth, Ireland
victor dot lazzarini at nuim dot ie




On 12 Apr 2014, at 18:36, Rory Walsh <rorywalsh@ear.ie> wrote:

> Finally, how can one query the current k-pass, as in how many k-cycles
> have passed? I can put in a counter in my own processing thread, but I
> thought it might be simple to grab from Csound?
>
> On 12 April 2014 13:20, Rory Walsh <rorywalsh@ear.ie> wrote:
>> Hi Andres. All going good here. I just wanted to ask you something
>> about the implementation. Am I right in saying that whenever
>> csoundDebuggerInit() is called the CSOUND structure that is passed to
>> it gets appended with some csdebug_data_t data? This data block is
>> then zeroed and removed when one calls csoundDebuggerClean()? One
>> little issue I have is that I seem to have to call
>> csoundDebuggerInit() before I set my breakpoints, that is every time I
>> set a breakpoint or call any of the debugger methods I have to call
>> csoundDebuggerInit() first. Otherwise I get an assert in the
>> breakpoint functions because csound->csdebug_data_t is no longer
>> valid. I guess there is no harm in calling csoundDebuggerInit() each
>> time one updates or removes a breakpoint if all it does it
>> add/overwrite a data block in the underlying Csound object? I'd love
>> to see this in the next release. It would be nice to ship a command
>> line app in all packages that would work like the gdb debugger.
>>
>> On 11 April 2014 22:51, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> This is really great Andres. I threw together a simple command line
>>> application that perhaps you could add to the test suite? I just
>>> robbed what I could understand from yours and slotted it into as basic
>>> an example as I could think off.
>>>
>>> Usage:
>>>
>>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>>>
>>> Once the breakpoint at the given k-cycle is hit the debugger will
>>> print the values of each of the variables in the chosen instrument ala
>>>
>>> ==============================================
>>> Breakpoint at instr 1
>>> Number of k-cycles into performance: 100
>>> ------------------------------------------------------
>>> VarName:Schannel    value = hello         varType[S]
>>> VarName:k1    value = 0.580499     varType[k]
>>> VarName:aout    value = 0.0823895     varType[a]
>>> VarName:ksmps     varType[r]
>>>
>>> I have to say hats off. This is very clever. I can't wait to add
>>> something like this to Cabbage.
>>>
>>>
>>> On 11 April 2014 22:08, Andres Cabrera <mantaraya36@gmail.com> wrote:
>>>> Hi,
>>>>
>>>> Good to hear you've got it going. The only performance penalty if you don't
>>>> call csoundDebuggerInit is that kperf is a function pointer rather than a
>>>> function. If you have called csoundDebuggerInit, then you will be running a
>>>> slightly heavier kperf_debug function, which needs to check whether there
>>>> are new debug commands (like break, continue, or new breakpoints), and which
>>>> needs to check on every new instrument in the chain whether it matches one
>>>> of the existing breakpoints. It's not too much, since it's done at control
>>>> rate, but there is a penalty. Performance during debugging will also get a
>>>> little worse once line breakpoints are implemented because there will have
>>>> to be a check for every ugen called within an instrument. But still I think
>>>> the difference in performance between debug and no debug will not be as
>>>> large as it is for C.
>>>>
>>>> Cheers,
>>>> Andrés
>>>>
>>>>
>>>>
>>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>>
>>>>> Sorry for the noise! I'm properly checked out now and enjoying the
>>>>> ride! This is great. Are there any performance costs if no breakpoint
>>>>> is set?
>>>>>
>>>>> On 11 April 2014 09:05, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>>> I assume that since I am getting no build or linker errors that there
>>>>>> is something amiss in my code?
>>>>>>
>>>>>> On 11 April 2014 01:51, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>>>> No. None at all?
>>>>>>>
>>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera" <mantaraya36@gmail.com> wrote:
>>>>>>>>
>>>>>>>> Are you getting build errors?
>>>>>>>>
>>>>>>>> Cheers,
>>>>>>>> Andrés
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>>>>>>> <mantaraya36@gmail.com>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> Did you checkout the csdebugger branch for csound and run cmake with
>>>>>>>>> -DBUILD_DEBUGGER=1?
>>>>>>>>>
>>>>>>>>> Cheers,
>>>>>>>>> Andrés
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>>>>>>>
>>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>>>>>>>>>
>>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera <mantaraya36@gmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>>> easier to do:
>>>>>>>>>>>
>>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>>>>>>>>>>>
>>>>>>>>>>> Cheers,
>>>>>>>>>>> Andrés
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh <rorywalsh@ear.ie>
>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> I'm probably adding the wrong lines to cmakelists.txt?
>>>>>>>>>>>>
>>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>>>>>>>>>>>>
>>>>>>>>>>>> Is that right?
>>>>>>>>>>>>
>>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera <mantaraya36@gmail.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> Yes it would :)
>>>>>>>>>>>>>
>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh <rorywalsh@ear.ie>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> It would help if I built with the debugger enabled :)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs and scores,
>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>> allowed? My breakpoint callback is never being hit. What am
>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>> missing?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr, void
>>>>>>>>>>>>>>> *userdata);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> int main(int argc, char *argv[])
>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>    int break_count = 0;
>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>>>>>>>>>>>>>>>    csoundStart(csound);
>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>>>>>>>>>>>>>>> &break_count);
>>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> //this never gets called.
>>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr, void
>>>>>>>>>>>>>>> *userdata)
>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>    int *count = (int *) userdata;
>>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line, instr);
>>>>>>>>>>>>>>>    *count = *count + 1;
>>>>>>>>>>>>>>> };
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>>>>>>>>>>>>> That's great. Thanks.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Currently only instrument breakpoints are implemented...
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head around this I
>>>>>>>>>>>>>>>>>> might
>>>>>>>>>>>>>>>>>> try
>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>> write a simple command line app that passes a breakpoint
>>>>>>>>>>>>>>>>>> line
>>>>>>>>>>>>>>>>>> number
>>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it will print out
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>> values
>>>>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>> each variable in that instrument. That would be a start.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>> Not exactly.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> the function:
>>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active instrument
>>>>>>>>>>>>>>>>>>> (where
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> debugger
>>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>>>>>>>>>>>>>>>>>>> information
>>>>>>>>>>>>>>>>>>> about
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> instrument instance (variables and time counters,
>>>>>>>>>>>>>>>>>>> p-fields,
>>>>>>>>>>>>>>>>>>> etc.)
>>>>>>>>>>>>>>>>>>> from
>>>>>>>>>>>>>>>>>>> it.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> The callback function is only called if a breakpoint is
>>>>>>>>>>>>>>>>>>> reached,
>>>>>>>>>>>>>>>>>>> which
>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> checked inside csound's kperf function. There is a
>>>>>>>>>>>>>>>>>>> linked
>>>>>>>>>>>>>>>>>>> list
>>>>>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a thread-safe way),
>>>>>>>>>>>>>>>>>>> which
>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> traversed
>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>> check if the current instrument matches a breakpoint.
>>>>>>>>>>>>>>>>>>> For
>>>>>>>>>>>>>>>>>>> line
>>>>>>>>>>>>>>>>>>> breakpoints,
>>>>>>>>>>>>>>>>>>> what will need to happen is that for every opcode that
>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> executed,
>>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint line.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> So you grab the values for all the variables in a
>>>>>>>>>>>>>>>>>>>> particular
>>>>>>>>>>>>>>>>>>>> line
>>>>>>>>>>>>>>>>>>>> each
>>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I reading that
>>>>>>>>>>>>>>>>>>>> right?
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> void CsoundEngine::breakpointCallback(CSOUND
>>>>>>>>>>>>>>>>>>>>> *csound,
>>>>>>>>>>>>>>>>>>>>> int
>>>>>>>>>>>>>>>>>>>>> line,
>>>>>>>>>>>>>>>>>>>>> double
>>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>>>>>>>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " << line <<
>>>>>>>>>>>>>>>>>>>>> instr;
>>>>>>>>>>>>>>>>>>>>>    INSDS *insds = csoundDebugGetInstrument(csound);
>>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *) udata;
>>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp = insds->instr->varPool->head;
>>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>>>>>>>>>>>>>>>>>>>>>    while (vp) {
>>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>>>>>>>>>>>>>>>>>>>>>            if (strcmp(vp->varType->varTypeName,
>>>>>>>>>>>>>>>>>>>>> "i") ==
>>>>>>>>>>>>>>>>>>>>> 0
>>>>>>>>>>>>>>>>>>>>>                    ||
>>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>>>>>>>>>>>>>>>>>>>>> "k")
>>>>>>>>>>>>>>>>>>>>> ==
>>>>>>>>>>>>>>>>>>>>> 0) {
>>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>>>>>>>>>>>>>>>>>>>>                } else {
>>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas +
>>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(*varmem);
>>>>>>>>>>>>>>>>>>>>>                }
>>>>>>>>>>>>>>>>>>>>>            } else
>>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>>>>>>>>>>>>>>>>>>>>> "S")
>>>>>>>>>>>>>>>>>>>>> ==
>>>>>>>>>>>>>>>>>>>>> 0) {
>>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>>>>>>>>>>>>>>>>>>>>                } else {
>>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(varmem);
>>>>>>>>>>>>>>>>>>>>>                }
>>>>>>>>>>>>>>>>>>>>>            } else if
>>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>>>>>>>>>>>>>>>>>>>> "a")
>>>>>>>>>>>>>>>>>>>>> ==
>>>>>>>>>>>>>>>>>>>>> 0) {
>>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>>>>>>>>>>>>>>>>>>>>> 2)<<
>>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>>>>>>>>>>>>>>>>>>>>>                } else {
>>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas +
>>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(*varmem);
>>>>>>>>>>>>>>>>>>>>>                }
>>>>>>>>>>>>>>>>>>>>>            } else {
>>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>>>>>>>>>>>>>>>>>>>>>            }
>>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varType->varTypeName;
>>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>>>>>>>>>>>>>>>>>>>>>        }
>>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>>>>>>>>>>>>>>>>>>>>>    }
>>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>>>>>>>>>>>>>>>>>>>>>    }
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>    while (in) {
>>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>>>>>>>>>>>>>>>>>>>>>    }
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause button and
>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>> debugger
>>>>>>>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>>>>>>> stop
>>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is no
>>>>>>>>>>>>>>>>>>>>> breakpoint
>>>>>>>>>>>>>>>>>>>>> there.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>>>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value of a
>>>>>>>>>>>>>>>>>>>>>> variable
>>>>>>>>>>>>>>>>>>>>>> once
>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access that
>>>>>>>>>>>>>>>>>>>>>> information
>>>>>>>>>>>>>>>>>>>>>> from
>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger interface in
>>>>>>>>>>>>>>>>>>>>>> CsounsQT
>>>>>>>>>>>>>>>>>>>>>> looks
>>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to implement
>>>>>>>>>>>>>>>>>>>>>> anything as
>>>>>>>>>>>>>>>>>>>>>> professional
>>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being able to stop
>>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>> query
>>>>>>>>>>>>>>>>>>>>>> variables
>>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your screen-shot
>>>>>>>>>>>>>>>>>>>>>> seems to
>>>>>>>>>>>>>>>>>>>>>> indicate
>>>>>>>>>>>>>>>>>>>>>> so?
>>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets the
>>>>>>>>>>>>>>>>>>>>>>> CSOUND
>>>>>>>>>>>>>>>>>>>>>>> structure, it
>>>>>>>>>>>>>>>>>>>>>>> can
>>>>>>>>>>>>>>>>>>>>>>> get
>>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>>>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do something
>>>>>>>>>>>>>>>>>>>>>>>> like:
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr 1\nasig
>>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0   1
>>>>>>>>>>>>>>>>>>>>>>>> 440");
>>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>>>>>>>>>>>>>>>>>>>>>>>> (void
>>>>>>>>>>>>>>>>>>>>>>>> *)
>>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>>>>>>>>>>>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1.1,
>>>>>>>>>>>>>>>>>>>>>>>> 0);
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>>>>>>>>>>>>>>>>>>>>>>>>    }
>>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>>>>>>>>>>>>>>>>>>>>>>>> callback
>>>>>>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>>>>> called.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>>>>>>>>>>>>>>>>>>>>>>> implemented
>>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>> debugger
>>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active), but I also
>>>>>>>>>>>>>>>>>>>>>>>> want to
>>>>>>>>>>>>>>>>>>>>>>>> add
>>>>>>>>>>>>>>>>>>>>>>>> line
>>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>>>>>>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm just
>>>>>>>>>>>>>>>>>>>>>>>>> looking
>>>>>>>>>>>>>>>>>>>>>>>>> through
>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>> code
>>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of setting
>>>>>>>>>>>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>>>>>>>>>> up?
>>>>>>>>>>>>>>>>>>>>>>>>> The
>>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>>>>>>>>>>>>>>>>>>>>>>>>> stuff
>>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted is
>>>>>>>>>>>>>>>>>>>>>>>>> confusing
>>>>>>>>>>>>>>>>>>>>>>>>> me.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>>>>>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>>>>>>>>>>>>>>>>>>>>>>>>>> finally
>>>>>>>>>>>>>>>>>>>>>>>>>> getting
>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>> useful
>>>>>>>>>>>>>>>>>>>>>>>>>> testing
>>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the csdebugger
>>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>>>>>>>>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>>>>>>>> time,
>>>>>>>>>>>>>>>>>>>>>>>>>> please
>>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need to add
>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of the API
>>>>>>>>>>>>>>>>>>>>>>>>>> here:
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end within
>>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>>>>>>>>>>>>>>>>>>>>>>>>>> which
>>>>>>>>>>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are part of
>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> API,
>>>>>>>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as they are
>>>>>>>>>>>>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>> compile
>>>>>>>>>>>>>>>>>>>>>>>>>> time
>>>>>>>>>>>>>>>>>>>>>>>>>> option.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat invasive, I
>>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>>>>>>>>>>>>>>>>>>>>>>>>>> make
>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND struct
>>>>>>>>>>>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>>>>>>>>>>>>>>>>>>>>>>>>>> When
>>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>>>>>>>>>>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>>>>>>> switched
>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when the
>>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a callback
>>>>>>>>>>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>>>>>>>>>>> has
>>>>>>>>>>>>>>>>>>>>>>>>>> been
>>>>>>>>>>>>>>>>>>>>>>>>>> registered
>>>>>>>>>>>>>>>>>>>>>>>>>> with csoundSetBreakpointCallback(CSOUND
>>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after the
>>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>>>>>>> called,
>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>>>>>>>>>>>>>>>>>>>>>>>>>> providing
>>>>>>>>>>>>>>>>>>>>>>>>>> empty
>>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> audio
>>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the time
>>>>>>>>>>>>>>>>>>>>>>>>>> counters
>>>>>>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>>>>>>>>>>>>>>>>>>>>>>>>>> When
>>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>> continue
>>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing continues
>>>>>>>>>>>>>>>>>>>>>>>>>> where
>>>>>>>>>>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>>>>>>>> left
>>>>>>>>>>>>>>>>>>>>>>>>>> off.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs, but
>>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>>>>>>>>>>>>>>>>>>>>>>>>> now
>>>>>>>>>>>>>>>>>>>>>>>>>> working on
>>>>>>>>>>>>>>>>>>>>>>>>>> my
>>>>>>>>>>>>>>>>>>>>>>>>>> simple
>>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions are very
>>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>>>>>>>>>>>>>>>>> Integration
>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>> Put Bad Developers to Shame
>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Csound-devel mailing list
>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>> Put Bad Developers to Shame
>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>>>>>> Continuously Automate Build, Test & Deployment
>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>>>>> _______________________________________________
>>>>>>>> Csound-devel mailing list
>>>>>>>> Csound-devel@lists.sourceforge.net
>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> Put Bad Developers to Shame
>>>>> Dominate Development with Jenkins Continuous Integration
>>>>> Continuously Automate Build, Test & Deployment
>>>>> Start a new project now. Try Jenkins in the cloud.
>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>>> _______________________________________________
>>>>> Csound-devel mailing list
>>>>> Csound-devel@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Put Bad Developers to Shame
>>>> Dominate Development with Jenkins Continuous Integration
>>>> Continuously Automate Build, Test & Deployment
>>>> Start a new project now. Try Jenkins in the cloud.
>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> _______________________________________________
>>>> Csound-devel mailing list
>>>> Csound-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>



------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel

Date2014-04-13 11:46
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Actually, I can't seem to find that? It's not a member of CSOUND?

On 13 April 2014 10:54, Rory Walsh  wrote:
> That's easy. Nice one.
>
> On 13 Apr 2014 09:44, "Victor Lazzarini"  wrote:
>>
>> csound->GetKcounter( )
>>
>>
>> http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
>> ========================
>> Dr Victor Lazzarini
>> Senior Lecturer
>> NUI Maynooth, Ireland
>> victor dot lazzarini at nuim dot ie
>>
>>
>>
>>
>> On 12 Apr 2014, at 18:36, Rory Walsh  wrote:
>>
>> > Finally, how can one query the current k-pass, as in how many k-cycles
>> > have passed? I can put in a counter in my own processing thread, but I
>> > thought it might be simple to grab from Csound?
>> >
>> > On 12 April 2014 13:20, Rory Walsh  wrote:
>> >> Hi Andres. All going good here. I just wanted to ask you something
>> >> about the implementation. Am I right in saying that whenever
>> >> csoundDebuggerInit() is called the CSOUND structure that is passed to
>> >> it gets appended with some csdebug_data_t data? This data block is
>> >> then zeroed and removed when one calls csoundDebuggerClean()? One
>> >> little issue I have is that I seem to have to call
>> >> csoundDebuggerInit() before I set my breakpoints, that is every time I
>> >> set a breakpoint or call any of the debugger methods I have to call
>> >> csoundDebuggerInit() first. Otherwise I get an assert in the
>> >> breakpoint functions because csound->csdebug_data_t is no longer
>> >> valid. I guess there is no harm in calling csoundDebuggerInit() each
>> >> time one updates or removes a breakpoint if all it does it
>> >> add/overwrite a data block in the underlying Csound object? I'd love
>> >> to see this in the next release. It would be nice to ship a command
>> >> line app in all packages that would work like the gdb debugger.
>> >>
>> >> On 11 April 2014 22:51, Rory Walsh  wrote:
>> >>> This is really great Andres. I threw together a simple command line
>> >>> application that perhaps you could add to the test suite? I just
>> >>> robbed what I could understand from yours and slotted it into as basic
>> >>> an example as I could think off.
>> >>>
>> >>> Usage:
>> >>>
>> >>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>> >>>
>> >>> Once the breakpoint at the given k-cycle is hit the debugger will
>> >>> print the values of each of the variables in the chosen instrument ala
>> >>>
>> >>> ==============================================
>> >>> Breakpoint at instr 1
>> >>> Number of k-cycles into performance: 100
>> >>> ------------------------------------------------------
>> >>> VarName:Schannel    value = hello         varType[S]
>> >>> VarName:k1    value = 0.580499     varType[k]
>> >>> VarName:aout    value = 0.0823895     varType[a]
>> >>> VarName:ksmps     varType[r]
>> >>>
>> >>> I have to say hats off. This is very clever. I can't wait to add
>> >>> something like this to Cabbage.
>> >>>
>> >>>
>> >>> On 11 April 2014 22:08, Andres Cabrera  wrote:
>> >>>> Hi,
>> >>>>
>> >>>> Good to hear you've got it going. The only performance penalty if you
>> >>>> don't
>> >>>> call csoundDebuggerInit is that kperf is a function pointer rather
>> >>>> than a
>> >>>> function. If you have called csoundDebuggerInit, then you will be
>> >>>> running a
>> >>>> slightly heavier kperf_debug function, which needs to check whether
>> >>>> there
>> >>>> are new debug commands (like break, continue, or new breakpoints),
>> >>>> and which
>> >>>> needs to check on every new instrument in the chain whether it
>> >>>> matches one
>> >>>> of the existing breakpoints. It's not too much, since it's done at
>> >>>> control
>> >>>> rate, but there is a penalty. Performance during debugging will also
>> >>>> get a
>> >>>> little worse once line breakpoints are implemented because there will
>> >>>> have
>> >>>> to be a check for every ugen called within an instrument. But still I
>> >>>> think
>> >>>> the difference in performance between debug and no debug will not be
>> >>>> as
>> >>>> large as it is for C.
>> >>>>
>> >>>> Cheers,
>> >>>> Andrés
>> >>>>
>> >>>>
>> >>>>
>> >>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh  wrote:
>> >>>>>
>> >>>>> Sorry for the noise! I'm properly checked out now and enjoying the
>> >>>>> ride! This is great. Are there any performance costs if no
>> >>>>> breakpoint
>> >>>>> is set?
>> >>>>>
>> >>>>> On 11 April 2014 09:05, Rory Walsh  wrote:
>> >>>>>> I assume that since I am getting no build or linker errors that
>> >>>>>> there
>> >>>>>> is something amiss in my code?
>> >>>>>>
>> >>>>>> On 11 April 2014 01:51, Rory Walsh  wrote:
>> >>>>>>> No. None at all?
>> >>>>>>>
>> >>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera" 
>> >>>>>>> wrote:
>> >>>>>>>>
>> >>>>>>>> Are you getting build errors?
>> >>>>>>>>
>> >>>>>>>> Cheers,
>> >>>>>>>> Andrés
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>> >>>>>>>> 
>> >>>>>>>> wrote:
>> >>>>>>>>>
>> >>>>>>>>> Did you checkout the csdebugger branch for csound and run cmake
>> >>>>>>>>> with
>> >>>>>>>>> -DBUILD_DEBUGGER=1?
>> >>>>>>>>>
>> >>>>>>>>> Cheers,
>> >>>>>>>>> Andrés
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh 
>> >>>>>>>>> wrote:
>> >>>>>>>>>>
>> >>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>> >>>>>>>>>>
>> >>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera 
>> >>>>>>>>>> wrote:
>> >>>>>>>>>>> easier to do:
>> >>>>>>>>>>>
>> >>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>> >>>>>>>>>>>
>> >>>>>>>>>>> Cheers,
>> >>>>>>>>>>> Andrés
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh 
>> >>>>>>>>>>> wrote:
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> I'm probably adding the wrong lines to cmakelists.txt?
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> Is that right?
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera
>> >>>>>>>>>>>> 
>> >>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>> Yes it would :)
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> Cheers,
>> >>>>>>>>>>>>> Andrés
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh
>> >>>>>>>>>>>>> 
>> >>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> It would help if I built with the debugger enabled :)
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh 
>> >>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs and scores,
>> >>>>>>>>>>>>>>> is
>> >>>>>>>>>>>>>>> this
>> >>>>>>>>>>>>>>> allowed? My breakpoint callback is never being hit. What
>> >>>>>>>>>>>>>>> am
>> >>>>>>>>>>>>>>> I
>> >>>>>>>>>>>>>>> missing?
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr, void
>> >>>>>>>>>>>>>>> *userdata);
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> int main(int argc, char *argv[])
>> >>>>>>>>>>>>>>> {
>> >>>>>>>>>>>>>>>    int break_count = 0;
>> >>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>> >>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>> >>>>>>>>>>>>>>>    csoundStart(csound);
>> >>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>> >>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>> >>>>>>>>>>>>>>> &break_count);
>> >>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>> >>>>>>>>>>>>>>>    csoundDestroy(csound);
>> >>>>>>>>>>>>>>> }
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> //this never gets called.
>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr, void
>> >>>>>>>>>>>>>>> *userdata)
>> >>>>>>>>>>>>>>> {
>> >>>>>>>>>>>>>>>    int *count = (int *) userdata;
>> >>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line, instr);
>> >>>>>>>>>>>>>>>    *count = *count + 1;
>> >>>>>>>>>>>>>>> };
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh 
>> >>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>> That's great. Thanks.
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>> >>>>>>>>>>>>>>>> 
>> >>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Currently only instrument breakpoints are implemented...
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Cheers,
>> >>>>>>>>>>>>>>>>> Andrés
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>> >>>>>>>>>>>>>>>>> 
>> >>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head around this I
>> >>>>>>>>>>>>>>>>>> might
>> >>>>>>>>>>>>>>>>>> try
>> >>>>>>>>>>>>>>>>>> to
>> >>>>>>>>>>>>>>>>>> write a simple command line app that passes a
>> >>>>>>>>>>>>>>>>>> breakpoint
>> >>>>>>>>>>>>>>>>>> line
>> >>>>>>>>>>>>>>>>>> number
>> >>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it will print
>> >>>>>>>>>>>>>>>>>> out
>> >>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>> values
>> >>>>>>>>>>>>>>>>>> of
>> >>>>>>>>>>>>>>>>>> each variable in that instrument. That would be a
>> >>>>>>>>>>>>>>>>>> start.
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>> >>>>>>>>>>>>>>>>>> 
>> >>>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>> Not exactly.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> the function:
>> >>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active instrument
>> >>>>>>>>>>>>>>>>>>> (where
>> >>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>> debugger
>> >>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>> >>>>>>>>>>>>>>>>>>> information
>> >>>>>>>>>>>>>>>>>>> about
>> >>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>> instrument instance (variables and time counters,
>> >>>>>>>>>>>>>>>>>>> p-fields,
>> >>>>>>>>>>>>>>>>>>> etc.)
>> >>>>>>>>>>>>>>>>>>> from
>> >>>>>>>>>>>>>>>>>>> it.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> The callback function is only called if a breakpoint
>> >>>>>>>>>>>>>>>>>>> is
>> >>>>>>>>>>>>>>>>>>> reached,
>> >>>>>>>>>>>>>>>>>>> which
>> >>>>>>>>>>>>>>>>>>> is
>> >>>>>>>>>>>>>>>>>>> checked inside csound's kperf function. There is a
>> >>>>>>>>>>>>>>>>>>> linked
>> >>>>>>>>>>>>>>>>>>> list
>> >>>>>>>>>>>>>>>>>>> of
>> >>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a thread-safe way),
>> >>>>>>>>>>>>>>>>>>> which
>> >>>>>>>>>>>>>>>>>>> is
>> >>>>>>>>>>>>>>>>>>> traversed
>> >>>>>>>>>>>>>>>>>>> to
>> >>>>>>>>>>>>>>>>>>> check if the current instrument matches a breakpoint.
>> >>>>>>>>>>>>>>>>>>> For
>> >>>>>>>>>>>>>>>>>>> line
>> >>>>>>>>>>>>>>>>>>> breakpoints,
>> >>>>>>>>>>>>>>>>>>> what will need to happen is that for every opcode that
>> >>>>>>>>>>>>>>>>>>> is
>> >>>>>>>>>>>>>>>>>>> executed,
>> >>>>>>>>>>>>>>>>>>> it
>> >>>>>>>>>>>>>>>>>>> is
>> >>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint line.
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> Cheers,
>> >>>>>>>>>>>>>>>>>>> Andrés
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>> >>>>>>>>>>>>>>>>>>> 
>> >>>>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> So you grab the values for all the variables in a
>> >>>>>>>>>>>>>>>>>>>> particular
>> >>>>>>>>>>>>>>>>>>>> line
>> >>>>>>>>>>>>>>>>>>>> each
>> >>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I reading that
>> >>>>>>>>>>>>>>>>>>>> right?
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>> >>>>>>>>>>>>>>>>>>>> 
>> >>>>>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>>>> Hi,
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> void CsoundEngine::breakpointCallback(CSOUND
>> >>>>>>>>>>>>>>>>>>>>> *csound,
>> >>>>>>>>>>>>>>>>>>>>> int
>> >>>>>>>>>>>>>>>>>>>>> line,
>> >>>>>>>>>>>>>>>>>>>>> double
>> >>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>> >>>>>>>>>>>>>>>>>>>>> {
>> >>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " << line <<
>> >>>>>>>>>>>>>>>>>>>>> instr;
>> >>>>>>>>>>>>>>>>>>>>>    INSDS *insds = csoundDebugGetInstrument(csound);
>> >>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *) udata;
>> >>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>> >>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp = insds->instr->varPool->head;
>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>> >>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>> >>>>>>>>>>>>>>>>>>>>>    while (vp) {
>> >>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>> >>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>> >>>>>>>>>>>>>>>>>>>>>            if (strcmp(vp->varType->varTypeName,
>> >>>>>>>>>>>>>>>>>>>>> "i") ==
>> >>>>>>>>>>>>>>>>>>>>> 0
>> >>>>>>>>>>>>>>>>>>>>>                    ||
>> >>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>> >>>>>>>>>>>>>>>>>>>>> "k")
>> >>>>>>>>>>>>>>>>>>>>> ==
>> >>>>>>>>>>>>>>>>>>>>> 0) {
>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>> >>>>>>>>>>>>>>>>>>>>>                } else {
>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas +
>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(*varmem);
>> >>>>>>>>>>>>>>>>>>>>>                }
>> >>>>>>>>>>>>>>>>>>>>>            } else
>> >>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>> >>>>>>>>>>>>>>>>>>>>> "S")
>> >>>>>>>>>>>>>>>>>>>>> ==
>> >>>>>>>>>>>>>>>>>>>>> 0) {
>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>> >>>>>>>>>>>>>>>>>>>>>                } else {
>> >>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>> >>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(varmem);
>> >>>>>>>>>>>>>>>>>>>>>                }
>> >>>>>>>>>>>>>>>>>>>>>            } else if
>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>> >>>>>>>>>>>>>>>>>>>>> "a")
>> >>>>>>>>>>>>>>>>>>>>> ==
>> >>>>>>>>>>>>>>>>>>>>> 0) {
>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>> >>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>> >>>>>>>>>>>>>>>>>>>>> 2)<<
>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>> >>>>>>>>>>>>>>>>>>>>>                } else {
>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas +
>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(*varmem);
>> >>>>>>>>>>>>>>>>>>>>>                }
>> >>>>>>>>>>>>>>>>>>>>>            } else {
>> >>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>> >>>>>>>>>>>>>>>>>>>>>            }
>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varType->varTypeName;
>> >>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>> >>>>>>>>>>>>>>>>>>>>>        }
>> >>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>> >>>>>>>>>>>>>>>>>>>>>    }
>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>> >>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>> >>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>> >>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>> >>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>> >>>>>>>>>>>>>>>>>>>>>    }
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>    while (in) {
>> >>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>> >>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>> >>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>> >>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>> >>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>> >>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>> >>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>> >>>>>>>>>>>>>>>>>>>>>    }
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>> >>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>> >>>>>>>>>>>>>>>>>>>>> }
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause button and
>> >>>>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>> debugger
>> >>>>>>>>>>>>>>>>>>>>> will
>> >>>>>>>>>>>>>>>>>>>>> stop
>> >>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is no
>> >>>>>>>>>>>>>>>>>>>>> breakpoint
>> >>>>>>>>>>>>>>>>>>>>> there.
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> Cheers,
>> >>>>>>>>>>>>>>>>>>>>> Andrés
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>> >>>>>>>>>>>>>>>>>>>>> 
>> >>>>>>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value of a
>> >>>>>>>>>>>>>>>>>>>>>> variable
>> >>>>>>>>>>>>>>>>>>>>>> once
>> >>>>>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access that
>> >>>>>>>>>>>>>>>>>>>>>> information
>> >>>>>>>>>>>>>>>>>>>>>> from
>> >>>>>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger interface in
>> >>>>>>>>>>>>>>>>>>>>>> CsounsQT
>> >>>>>>>>>>>>>>>>>>>>>> looks
>> >>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to implement
>> >>>>>>>>>>>>>>>>>>>>>> anything as
>> >>>>>>>>>>>>>>>>>>>>>> professional
>> >>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being able to stop
>> >>>>>>>>>>>>>>>>>>>>>> and
>> >>>>>>>>>>>>>>>>>>>>>> query
>> >>>>>>>>>>>>>>>>>>>>>> variables
>> >>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your screen-shot
>> >>>>>>>>>>>>>>>>>>>>>> seems to
>> >>>>>>>>>>>>>>>>>>>>>> indicate
>> >>>>>>>>>>>>>>>>>>>>>> so?
>> >>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>> >>>>>>>>>>>>>>>>>>>>>> 
>> >>>>>>>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets the
>> >>>>>>>>>>>>>>>>>>>>>>> CSOUND
>> >>>>>>>>>>>>>>>>>>>>>>> structure, it
>> >>>>>>>>>>>>>>>>>>>>>>> can
>> >>>>>>>>>>>>>>>>>>>>>>> get
>> >>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>> Cheers,
>> >>>>>>>>>>>>>>>>>>>>>>> Andrés
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>> >>>>>>>>>>>>>>>>>>>>>>> 
>> >>>>>>>>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do something
>> >>>>>>>>>>>>>>>>>>>>>>>> like:
>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>> >>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr 1\nasig
>> >>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>> >>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0   1
>> >>>>>>>>>>>>>>>>>>>>>>>> 440");
>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>> >>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>> >>>>>>>>>>>>>>>>>>>>>>>> (void
>> >>>>>>>>>>>>>>>>>>>>>>>> *)
>> >>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1.1,
>> >>>>>>>>>>>>>>>>>>>>>>>> 0);
>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>> >>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>> >>>>>>>>>>>>>>>>>>>>>>>>    }
>> >>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>> >>>>>>>>>>>>>>>>>>>>>>>> callback
>> >>>>>>>>>>>>>>>>>>>>>>>> is
>> >>>>>>>>>>>>>>>>>>>>>>>> called.
>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>> >>>>>>>>>>>>>>>>>>>>>>>> implemented
>> >>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>> >>>>>>>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>>>>> debugger
>> >>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active), but I also
>> >>>>>>>>>>>>>>>>>>>>>>>> want to
>> >>>>>>>>>>>>>>>>>>>>>>>> add
>> >>>>>>>>>>>>>>>>>>>>>>>> line
>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>> >>>>>>>>>>>>>>>>>>>>>>>> Andrés
>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>> >>>>>>>>>>>>>>>>>>>>>>>> 
>> >>>>>>>>>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm just
>> >>>>>>>>>>>>>>>>>>>>>>>>> looking
>> >>>>>>>>>>>>>>>>>>>>>>>>> through
>> >>>>>>>>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>>>>>> code
>> >>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of setting
>> >>>>>>>>>>>>>>>>>>>>>>>>> this
>> >>>>>>>>>>>>>>>>>>>>>>>>> up?
>> >>>>>>>>>>>>>>>>>>>>>>>>> The
>> >>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>> >>>>>>>>>>>>>>>>>>>>>>>>> stuff
>> >>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted is
>> >>>>>>>>>>>>>>>>>>>>>>>>> confusing
>> >>>>>>>>>>>>>>>>>>>>>>>>> me.
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>> >>>>>>>>>>>>>>>>>>>>>>>>> 
>> >>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>> >>>>>>>>>>>>>>>>>>>>>>>>>> finally
>> >>>>>>>>>>>>>>>>>>>>>>>>>> getting
>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>> >>>>>>>>>>>>>>>>>>>>>>>>>> useful
>> >>>>>>>>>>>>>>>>>>>>>>>>>> testing
>> >>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the csdebugger
>> >>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>> >>>>>>>>>>>>>>>>>>>>>>>>>> have
>> >>>>>>>>>>>>>>>>>>>>>>>>>> time,
>> >>>>>>>>>>>>>>>>>>>>>>>>>> please
>> >>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need to add
>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>> >>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>> >>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of the API
>> >>>>>>>>>>>>>>>>>>>>>>>>>> here:
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end within
>> >>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>> >>>>>>>>>>>>>>>>>>>>>>>>>> which
>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>> >>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>> >>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are part of
>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>>>>>>> API,
>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>> >>>>>>>>>>>>>>>>>>>>>>>>>> think
>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>> >>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>> >>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as they are
>> >>>>>>>>>>>>>>>>>>>>>>>>>> also
>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>> >>>>>>>>>>>>>>>>>>>>>>>>>> compile
>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>> >>>>>>>>>>>>>>>>>>>>>>>>>> option.
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat invasive, I
>> >>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>> >>>>>>>>>>>>>>>>>>>>>>>>>> make
>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>> >>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND struct
>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>> >>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>> >>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>> >>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>> >>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>> >>>>>>>>>>>>>>>>>>>>>>>>>> switched
>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when the
>> >>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>> >>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>> >>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a callback
>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>> >>>>>>>>>>>>>>>>>>>>>>>>>> has
>> >>>>>>>>>>>>>>>>>>>>>>>>>> been
>> >>>>>>>>>>>>>>>>>>>>>>>>>> registered
>> >>>>>>>>>>>>>>>>>>>>>>>>>> with csoundSetBreakpointCallback(CSOUND
>> >>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>> >>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>> >>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>> >>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after the
>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>> >>>>>>>>>>>>>>>>>>>>>>>>>> called,
>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>> >>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>> >>>>>>>>>>>>>>>>>>>>>>>>>> providing
>> >>>>>>>>>>>>>>>>>>>>>>>>>> empty
>> >>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>> >>>>>>>>>>>>>>>>>>>>>>>>>> audio
>> >>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the time
>> >>>>>>>>>>>>>>>>>>>>>>>>>> counters
>> >>>>>>>>>>>>>>>>>>>>>>>>>> in
>> >>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>> >>>>>>>>>>>>>>>>>>>>>>>>>> continue
>> >>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing continues
>> >>>>>>>>>>>>>>>>>>>>>>>>>> where
>> >>>>>>>>>>>>>>>>>>>>>>>>>> it
>> >>>>>>>>>>>>>>>>>>>>>>>>>> left
>> >>>>>>>>>>>>>>>>>>>>>>>>>> off.
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs, but
>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>> >>>>>>>>>>>>>>>>>>>>>>>>>> now
>> >>>>>>>>>>>>>>>>>>>>>>>>>> working on
>> >>>>>>>>>>>>>>>>>>>>>>>>>> my
>> >>>>>>>>>>>>>>>>>>>>>>>>>> simple
>> >>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions are very
>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>> >>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>>>>>>>>>>>>>>>>>>>>>>>> Integration
>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>> >>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>> >>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>>>>>>>>>>>>>>>>>>>>>> Integration
>> >>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>> >>>>>>>>>>>>>>>>>>>>>>> cloud.
>> >>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>>>>>>>>>>>>>>>>>>>>> Integration
>> >>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>>>>>>>>>>>>>>>>>>>> Integration
>> >>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>>>>>>>>>>>>>>>>>>> Integration
>> >>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>>>>>>>>>>>>>>>>>> Integration
>> >>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>>>>>>>>>>>>>>>>> Integration
>> >>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>> >>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>> >>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>> >>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>> >>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>> >>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>>> _______________________________________________
>> >>>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>>>> Put Bad Developers to Shame
>> >>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>> >>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>>>> _______________________________________________
>> >>>>>>>>>> Csound-devel mailing list
>> >>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>>
>> >>>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>> ------------------------------------------------------------------------------
>> >>>>>>>> Put Bad Developers to Shame
>> >>>>>>>> Dominate Development with Jenkins Continuous Integration
>> >>>>>>>> Continuously Automate Build, Test & Deployment
>> >>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>>>>> _______________________________________________
>> >>>>>>>> Csound-devel mailing list
>> >>>>>>>> Csound-devel@lists.sourceforge.net
>> >>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>>>>>
>> >>>>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> ------------------------------------------------------------------------------
>> >>>>> Put Bad Developers to Shame
>> >>>>> Dominate Development with Jenkins Continuous Integration
>> >>>>> Continuously Automate Build, Test & Deployment
>> >>>>> Start a new project now. Try Jenkins in the cloud.
>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>>> _______________________________________________
>> >>>>> Csound-devel mailing list
>> >>>>> Csound-devel@lists.sourceforge.net
>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>> ------------------------------------------------------------------------------
>> >>>> Put Bad Developers to Shame
>> >>>> Dominate Development with Jenkins Continuous Integration
>> >>>> Continuously Automate Build, Test & Deployment
>> >>>> Start a new project now. Try Jenkins in the cloud.
>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>>> _______________________________________________
>> >>>> Csound-devel mailing list
>> >>>> Csound-devel@lists.sourceforge.net
>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>>>
>> >
>> >
>> > ------------------------------------------------------------------------------
>> > Put Bad Developers to Shame
>> > Dominate Development with Jenkins Continuous Integration
>> > Continuously Automate Build, Test & Deployment
>> > Start a new project now. Try Jenkins in the cloud.
>> > http://p.sf.net/sfu/13600_Cloudbees
>> > _______________________________________________
>> > Csound-devel mailing list
>> > Csound-devel@lists.sourceforge.net
>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-13 16:15
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Found it!

On 13 April 2014 11:46, Rory Walsh  wrote:
> Actually, I can't seem to find that? It's not a member of CSOUND?
>
> On 13 April 2014 10:54, Rory Walsh  wrote:
>> That's easy. Nice one.
>>
>> On 13 Apr 2014 09:44, "Victor Lazzarini"  wrote:
>>>
>>> csound->GetKcounter( )
>>>
>>>
>>> http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
>>> ========================
>>> Dr Victor Lazzarini
>>> Senior Lecturer
>>> NUI Maynooth, Ireland
>>> victor dot lazzarini at nuim dot ie
>>>
>>>
>>>
>>>
>>> On 12 Apr 2014, at 18:36, Rory Walsh  wrote:
>>>
>>> > Finally, how can one query the current k-pass, as in how many k-cycles
>>> > have passed? I can put in a counter in my own processing thread, but I
>>> > thought it might be simple to grab from Csound?
>>> >
>>> > On 12 April 2014 13:20, Rory Walsh  wrote:
>>> >> Hi Andres. All going good here. I just wanted to ask you something
>>> >> about the implementation. Am I right in saying that whenever
>>> >> csoundDebuggerInit() is called the CSOUND structure that is passed to
>>> >> it gets appended with some csdebug_data_t data? This data block is
>>> >> then zeroed and removed when one calls csoundDebuggerClean()? One
>>> >> little issue I have is that I seem to have to call
>>> >> csoundDebuggerInit() before I set my breakpoints, that is every time I
>>> >> set a breakpoint or call any of the debugger methods I have to call
>>> >> csoundDebuggerInit() first. Otherwise I get an assert in the
>>> >> breakpoint functions because csound->csdebug_data_t is no longer
>>> >> valid. I guess there is no harm in calling csoundDebuggerInit() each
>>> >> time one updates or removes a breakpoint if all it does it
>>> >> add/overwrite a data block in the underlying Csound object? I'd love
>>> >> to see this in the next release. It would be nice to ship a command
>>> >> line app in all packages that would work like the gdb debugger.
>>> >>
>>> >> On 11 April 2014 22:51, Rory Walsh  wrote:
>>> >>> This is really great Andres. I threw together a simple command line
>>> >>> application that perhaps you could add to the test suite? I just
>>> >>> robbed what I could understand from yours and slotted it into as basic
>>> >>> an example as I could think off.
>>> >>>
>>> >>> Usage:
>>> >>>
>>> >>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>>> >>>
>>> >>> Once the breakpoint at the given k-cycle is hit the debugger will
>>> >>> print the values of each of the variables in the chosen instrument ala
>>> >>>
>>> >>> ==============================================
>>> >>> Breakpoint at instr 1
>>> >>> Number of k-cycles into performance: 100
>>> >>> ------------------------------------------------------
>>> >>> VarName:Schannel    value = hello         varType[S]
>>> >>> VarName:k1    value = 0.580499     varType[k]
>>> >>> VarName:aout    value = 0.0823895     varType[a]
>>> >>> VarName:ksmps     varType[r]
>>> >>>
>>> >>> I have to say hats off. This is very clever. I can't wait to add
>>> >>> something like this to Cabbage.
>>> >>>
>>> >>>
>>> >>> On 11 April 2014 22:08, Andres Cabrera  wrote:
>>> >>>> Hi,
>>> >>>>
>>> >>>> Good to hear you've got it going. The only performance penalty if you
>>> >>>> don't
>>> >>>> call csoundDebuggerInit is that kperf is a function pointer rather
>>> >>>> than a
>>> >>>> function. If you have called csoundDebuggerInit, then you will be
>>> >>>> running a
>>> >>>> slightly heavier kperf_debug function, which needs to check whether
>>> >>>> there
>>> >>>> are new debug commands (like break, continue, or new breakpoints),
>>> >>>> and which
>>> >>>> needs to check on every new instrument in the chain whether it
>>> >>>> matches one
>>> >>>> of the existing breakpoints. It's not too much, since it's done at
>>> >>>> control
>>> >>>> rate, but there is a penalty. Performance during debugging will also
>>> >>>> get a
>>> >>>> little worse once line breakpoints are implemented because there will
>>> >>>> have
>>> >>>> to be a check for every ugen called within an instrument. But still I
>>> >>>> think
>>> >>>> the difference in performance between debug and no debug will not be
>>> >>>> as
>>> >>>> large as it is for C.
>>> >>>>
>>> >>>> Cheers,
>>> >>>> Andrés
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh  wrote:
>>> >>>>>
>>> >>>>> Sorry for the noise! I'm properly checked out now and enjoying the
>>> >>>>> ride! This is great. Are there any performance costs if no
>>> >>>>> breakpoint
>>> >>>>> is set?
>>> >>>>>
>>> >>>>> On 11 April 2014 09:05, Rory Walsh  wrote:
>>> >>>>>> I assume that since I am getting no build or linker errors that
>>> >>>>>> there
>>> >>>>>> is something amiss in my code?
>>> >>>>>>
>>> >>>>>> On 11 April 2014 01:51, Rory Walsh  wrote:
>>> >>>>>>> No. None at all?
>>> >>>>>>>
>>> >>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera" 
>>> >>>>>>> wrote:
>>> >>>>>>>>
>>> >>>>>>>> Are you getting build errors?
>>> >>>>>>>>
>>> >>>>>>>> Cheers,
>>> >>>>>>>> Andrés
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>> >>>>>>>> 
>>> >>>>>>>> wrote:
>>> >>>>>>>>>
>>> >>>>>>>>> Did you checkout the csdebugger branch for csound and run cmake
>>> >>>>>>>>> with
>>> >>>>>>>>> -DBUILD_DEBUGGER=1?
>>> >>>>>>>>>
>>> >>>>>>>>> Cheers,
>>> >>>>>>>>> Andrés
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh 
>>> >>>>>>>>> wrote:
>>> >>>>>>>>>>
>>> >>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>> >>>>>>>>>>
>>> >>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera 
>>> >>>>>>>>>> wrote:
>>> >>>>>>>>>>> easier to do:
>>> >>>>>>>>>>>
>>> >>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>>> >>>>>>>>>>>
>>> >>>>>>>>>>> Cheers,
>>> >>>>>>>>>>> Andrés
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh 
>>> >>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> I'm probably adding the wrong lines to cmakelists.txt?
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> Is that right?
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera
>>> >>>>>>>>>>>> 
>>> >>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>> Yes it would :)
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh
>>> >>>>>>>>>>>>> 
>>> >>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> It would help if I built with the debugger enabled :)
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh 
>>> >>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs and scores,
>>> >>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>> this
>>> >>>>>>>>>>>>>>> allowed? My breakpoint callback is never being hit. What
>>> >>>>>>>>>>>>>>> am
>>> >>>>>>>>>>>>>>> I
>>> >>>>>>>>>>>>>>> missing?
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr, void
>>> >>>>>>>>>>>>>>> *userdata);
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>> int main(int argc, char *argv[])
>>> >>>>>>>>>>>>>>> {
>>> >>>>>>>>>>>>>>>    int break_count = 0;
>>> >>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>> >>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>>> >>>>>>>>>>>>>>>    csoundStart(csound);
>>> >>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>> >>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>>> >>>>>>>>>>>>>>> &break_count);
>>> >>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>> >>>>>>>>>>>>>>>    csoundDestroy(csound);
>>> >>>>>>>>>>>>>>> }
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>> //this never gets called.
>>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr, void
>>> >>>>>>>>>>>>>>> *userdata)
>>> >>>>>>>>>>>>>>> {
>>> >>>>>>>>>>>>>>>    int *count = (int *) userdata;
>>> >>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line, instr);
>>> >>>>>>>>>>>>>>>    *count = *count + 1;
>>> >>>>>>>>>>>>>>> };
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh 
>>> >>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>> That's great. Thanks.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>>> >>>>>>>>>>>>>>>> 
>>> >>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>> Currently only instrument breakpoints are implemented...
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>> >>>>>>>>>>>>>>>>> 
>>> >>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head around this I
>>> >>>>>>>>>>>>>>>>>> might
>>> >>>>>>>>>>>>>>>>>> try
>>> >>>>>>>>>>>>>>>>>> to
>>> >>>>>>>>>>>>>>>>>> write a simple command line app that passes a
>>> >>>>>>>>>>>>>>>>>> breakpoint
>>> >>>>>>>>>>>>>>>>>> line
>>> >>>>>>>>>>>>>>>>>> number
>>> >>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it will print
>>> >>>>>>>>>>>>>>>>>> out
>>> >>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>> values
>>> >>>>>>>>>>>>>>>>>> of
>>> >>>>>>>>>>>>>>>>>> each variable in that instrument. That would be a
>>> >>>>>>>>>>>>>>>>>> start.
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>>> >>>>>>>>>>>>>>>>>> 
>>> >>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>> Not exactly.
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> the function:
>>> >>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active instrument
>>> >>>>>>>>>>>>>>>>>>> (where
>>> >>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>> debugger
>>> >>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>>> >>>>>>>>>>>>>>>>>>> information
>>> >>>>>>>>>>>>>>>>>>> about
>>> >>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>> instrument instance (variables and time counters,
>>> >>>>>>>>>>>>>>>>>>> p-fields,
>>> >>>>>>>>>>>>>>>>>>> etc.)
>>> >>>>>>>>>>>>>>>>>>> from
>>> >>>>>>>>>>>>>>>>>>> it.
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> The callback function is only called if a breakpoint
>>> >>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>> reached,
>>> >>>>>>>>>>>>>>>>>>> which
>>> >>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>> checked inside csound's kperf function. There is a
>>> >>>>>>>>>>>>>>>>>>> linked
>>> >>>>>>>>>>>>>>>>>>> list
>>> >>>>>>>>>>>>>>>>>>> of
>>> >>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a thread-safe way),
>>> >>>>>>>>>>>>>>>>>>> which
>>> >>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>> traversed
>>> >>>>>>>>>>>>>>>>>>> to
>>> >>>>>>>>>>>>>>>>>>> check if the current instrument matches a breakpoint.
>>> >>>>>>>>>>>>>>>>>>> For
>>> >>>>>>>>>>>>>>>>>>> line
>>> >>>>>>>>>>>>>>>>>>> breakpoints,
>>> >>>>>>>>>>>>>>>>>>> what will need to happen is that for every opcode that
>>> >>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>> executed,
>>> >>>>>>>>>>>>>>>>>>> it
>>> >>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint line.
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>> >>>>>>>>>>>>>>>>>>> 
>>> >>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>> So you grab the values for all the variables in a
>>> >>>>>>>>>>>>>>>>>>>> particular
>>> >>>>>>>>>>>>>>>>>>>> line
>>> >>>>>>>>>>>>>>>>>>>> each
>>> >>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I reading that
>>> >>>>>>>>>>>>>>>>>>>> right?
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>>> >>>>>>>>>>>>>>>>>>>> 
>>> >>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>> Hi,
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> void CsoundEngine::breakpointCallback(CSOUND
>>> >>>>>>>>>>>>>>>>>>>>> *csound,
>>> >>>>>>>>>>>>>>>>>>>>> int
>>> >>>>>>>>>>>>>>>>>>>>> line,
>>> >>>>>>>>>>>>>>>>>>>>> double
>>> >>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>>> >>>>>>>>>>>>>>>>>>>>> {
>>> >>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " << line <<
>>> >>>>>>>>>>>>>>>>>>>>> instr;
>>> >>>>>>>>>>>>>>>>>>>>>    INSDS *insds = csoundDebugGetInstrument(csound);
>>> >>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *) udata;
>>> >>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>>> >>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp = insds->instr->varPool->head;
>>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>>> >>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>>> >>>>>>>>>>>>>>>>>>>>>    while (vp) {
>>> >>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>>> >>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>>> >>>>>>>>>>>>>>>>>>>>>            if (strcmp(vp->varType->varTypeName,
>>> >>>>>>>>>>>>>>>>>>>>> "i") ==
>>> >>>>>>>>>>>>>>>>>>>>> 0
>>> >>>>>>>>>>>>>>>>>>>>>                    ||
>>> >>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>>> >>>>>>>>>>>>>>>>>>>>> "k")
>>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas +
>>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(*varmem);
>>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>>>>>>>>>>>>>>>>>>>            } else
>>> >>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>>> >>>>>>>>>>>>>>>>>>>>> "S")
>>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>>> >>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(varmem);
>>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>>>>>>>>>>>>>>>>>>>            } else if
>>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>> >>>>>>>>>>>>>>>>>>>>> "a")
>>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>>> >>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>>> >>>>>>>>>>>>>>>>>>>>> 2)<<
>>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas +
>>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(*varmem);
>>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>>>>>>>>>>>>>>>>>>>            } else {
>>> >>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>>> >>>>>>>>>>>>>>>>>>>>>            }
>>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varType->varTypeName;
>>> >>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>>> >>>>>>>>>>>>>>>>>>>>>        }
>>> >>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>>> >>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>>> >>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>>> >>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>>> >>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>    while (in) {
>>> >>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>>> >>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>>> >>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>>> >>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>>> >>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>>> >>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>>> >>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>>> >>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>>> >>>>>>>>>>>>>>>>>>>>> }
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause button and
>>> >>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>> debugger
>>> >>>>>>>>>>>>>>>>>>>>> will
>>> >>>>>>>>>>>>>>>>>>>>> stop
>>> >>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is no
>>> >>>>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>>>>>>>>>>>>>>>>>>> there.
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>> >>>>>>>>>>>>>>>>>>>>> 
>>> >>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value of a
>>> >>>>>>>>>>>>>>>>>>>>>> variable
>>> >>>>>>>>>>>>>>>>>>>>>> once
>>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access that
>>> >>>>>>>>>>>>>>>>>>>>>> information
>>> >>>>>>>>>>>>>>>>>>>>>> from
>>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger interface in
>>> >>>>>>>>>>>>>>>>>>>>>> CsounsQT
>>> >>>>>>>>>>>>>>>>>>>>>> looks
>>> >>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to implement
>>> >>>>>>>>>>>>>>>>>>>>>> anything as
>>> >>>>>>>>>>>>>>>>>>>>>> professional
>>> >>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being able to stop
>>> >>>>>>>>>>>>>>>>>>>>>> and
>>> >>>>>>>>>>>>>>>>>>>>>> query
>>> >>>>>>>>>>>>>>>>>>>>>> variables
>>> >>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your screen-shot
>>> >>>>>>>>>>>>>>>>>>>>>> seems to
>>> >>>>>>>>>>>>>>>>>>>>>> indicate
>>> >>>>>>>>>>>>>>>>>>>>>> so?
>>> >>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>>> >>>>>>>>>>>>>>>>>>>>>> 
>>> >>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets the
>>> >>>>>>>>>>>>>>>>>>>>>>> CSOUND
>>> >>>>>>>>>>>>>>>>>>>>>>> structure, it
>>> >>>>>>>>>>>>>>>>>>>>>>> can
>>> >>>>>>>>>>>>>>>>>>>>>>> get
>>> >>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>>> >>>>>>>>>>>>>>>>>>>>>>> 
>>> >>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do something
>>> >>>>>>>>>>>>>>>>>>>>>>>> like:
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>>> >>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr 1\nasig
>>> >>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>>> >>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0   1
>>> >>>>>>>>>>>>>>>>>>>>>>>> 440");
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>>> >>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>>> >>>>>>>>>>>>>>>>>>>>>>>> (void
>>> >>>>>>>>>>>>>>>>>>>>>>>> *)
>>> >>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1.1,
>>> >>>>>>>>>>>>>>>>>>>>>>>> 0);
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>>> >>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>>> >>>>>>>>>>>>>>>>>>>>>>>>    }
>>> >>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>>>>>>> called.
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>> >>>>>>>>>>>>>>>>>>>>>>>> implemented
>>> >>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>>> >>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>> debugger
>>> >>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active), but I also
>>> >>>>>>>>>>>>>>>>>>>>>>>> want to
>>> >>>>>>>>>>>>>>>>>>>>>>>> add
>>> >>>>>>>>>>>>>>>>>>>>>>>> line
>>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>> >>>>>>>>>>>>>>>>>>>>>>>> 
>>> >>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm just
>>> >>>>>>>>>>>>>>>>>>>>>>>>> looking
>>> >>>>>>>>>>>>>>>>>>>>>>>>> through
>>> >>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>>> code
>>> >>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of setting
>>> >>>>>>>>>>>>>>>>>>>>>>>>> this
>>> >>>>>>>>>>>>>>>>>>>>>>>>> up?
>>> >>>>>>>>>>>>>>>>>>>>>>>>> The
>>> >>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>>> >>>>>>>>>>>>>>>>>>>>>>>>> stuff
>>> >>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted is
>>> >>>>>>>>>>>>>>>>>>>>>>>>> confusing
>>> >>>>>>>>>>>>>>>>>>>>>>>>> me.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>>> >>>>>>>>>>>>>>>>>>>>>>>>> 
>>> >>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> finally
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> getting
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> useful
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> testing
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the csdebugger
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> have
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> time,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> please
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need to add
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of the API
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> here:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end within
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> which
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are part of
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> API,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> think
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as they are
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> also
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> compile
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> option.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat invasive, I
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> make
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND struct
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> switched
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a callback
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> has
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> been
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> registered
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> with csoundSetBreakpointCallback(CSOUND
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> called,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> providing
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> empty
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> audio
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the time
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> counters
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> in
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> continue
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing continues
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> where
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> it
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> left
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> off.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs, but
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> now
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> working on
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> my
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> simple
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions are very
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>> _______________________________________________
>>> >>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>> _______________________________________________
>>> >>>>>>>> Csound-devel mailing list
>>> >>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>
>>> >>>>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>> ------------------------------------------------------------------------------
>>> >>>>> Put Bad Developers to Shame
>>> >>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>> Continuously Automate Build, Test & Deployment
>>> >>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> _______________________________________________
>>> >>>>> Csound-devel mailing list
>>> >>>>> Csound-devel@lists.sourceforge.net
>>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> ------------------------------------------------------------------------------
>>> >>>> Put Bad Developers to Shame
>>> >>>> Dominate Development with Jenkins Continuous Integration
>>> >>>> Continuously Automate Build, Test & Deployment
>>> >>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> _______________________________________________
>>> >>>> Csound-devel mailing list
>>> >>>> Csound-devel@lists.sourceforge.net
>>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>
>>> >
>>> >
>>> > ------------------------------------------------------------------------------
>>> > Put Bad Developers to Shame
>>> > Dominate Development with Jenkins Continuous Integration
>>> > Continuously Automate Build, Test & Deployment
>>> > Start a new project now. Try Jenkins in the cloud.
>>> > http://p.sf.net/sfu/13600_Cloudbees
>>> > _______________________________________________
>>> > Csound-devel mailing list
>>> > Csound-devel@lists.sourceforge.net
>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >
>>>
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-13 16:21
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
I'm thinking the debugger API could offer some facilties for common tasks like variable querying to remove that pointer uglyness.

I would also like to see this in mainline Csound, but I'd like some feedback from others first as to whether the way I've done it is the best possible.

Cheers,
Andrés


On Sun, Apr 13, 2014 at 8:15 AM, Rory Walsh <rorywalsh@ear.ie> wrote:
Found it!

On 13 April 2014 11:46, Rory Walsh <rorywalsh@ear.ie> wrote:
> Actually, I can't seem to find that? It's not a member of CSOUND?
>
> On 13 April 2014 10:54, Rory Walsh <rorywalsh@ear.ie> wrote:
>> That's easy. Nice one.
>>
>> On 13 Apr 2014 09:44, "Victor Lazzarini" <Victor.Lazzarini@nuim.ie> wrote:
>>>
>>> csound->GetKcounter( )
>>>
>>>
>>> http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
>>> ========================
>>> Dr Victor Lazzarini
>>> Senior Lecturer
>>> NUI Maynooth, Ireland
>>> victor dot lazzarini at nuim dot ie
>>>
>>>
>>>
>>>
>>> On 12 Apr 2014, at 18:36, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>
>>> > Finally, how can one query the current k-pass, as in how many k-cycles
>>> > have passed? I can put in a counter in my own processing thread, but I
>>> > thought it might be simple to grab from Csound?
>>> >
>>> > On 12 April 2014 13:20, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> >> Hi Andres. All going good here. I just wanted to ask you something
>>> >> about the implementation. Am I right in saying that whenever
>>> >> csoundDebuggerInit() is called the CSOUND structure that is passed to
>>> >> it gets appended with some csdebug_data_t data? This data block is
>>> >> then zeroed and removed when one calls csoundDebuggerClean()? One
>>> >> little issue I have is that I seem to have to call
>>> >> csoundDebuggerInit() before I set my breakpoints, that is every time I
>>> >> set a breakpoint or call any of the debugger methods I have to call
>>> >> csoundDebuggerInit() first. Otherwise I get an assert in the
>>> >> breakpoint functions because csound->csdebug_data_t is no longer
>>> >> valid. I guess there is no harm in calling csoundDebuggerInit() each
>>> >> time one updates or removes a breakpoint if all it does it
>>> >> add/overwrite a data block in the underlying Csound object? I'd love
>>> >> to see this in the next release. It would be nice to ship a command
>>> >> line app in all packages that would work like the gdb debugger.
>>> >>
>>> >> On 11 April 2014 22:51, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> >>> This is really great Andres. I threw together a simple command line
>>> >>> application that perhaps you could add to the test suite? I just
>>> >>> robbed what I could understand from yours and slotted it into as basic
>>> >>> an example as I could think off.
>>> >>>
>>> >>> Usage:
>>> >>>
>>> >>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>>> >>>
>>> >>> Once the breakpoint at the given k-cycle is hit the debugger will
>>> >>> print the values of each of the variables in the chosen instrument ala
>>> >>>
>>> >>> ==============================================
>>> >>> Breakpoint at instr 1
>>> >>> Number of k-cycles into performance: 100
>>> >>> ------------------------------------------------------
>>> >>> VarName:Schannel    value = hello         varType[S]
>>> >>> VarName:k1    value = 0.580499     varType[k]
>>> >>> VarName:aout    value = 0.0823895     varType[a]
>>> >>> VarName:ksmps     varType[r]
>>> >>>
>>> >>> I have to say hats off. This is very clever. I can't wait to add
>>> >>> something like this to Cabbage.
>>> >>>
>>> >>>
>>> >>> On 11 April 2014 22:08, Andres Cabrera <mantaraya36@gmail.com> wrote:
>>> >>>> Hi,
>>> >>>>
>>> >>>> Good to hear you've got it going. The only performance penalty if you
>>> >>>> don't
>>> >>>> call csoundDebuggerInit is that kperf is a function pointer rather
>>> >>>> than a
>>> >>>> function. If you have called csoundDebuggerInit, then you will be
>>> >>>> running a
>>> >>>> slightly heavier kperf_debug function, which needs to check whether
>>> >>>> there
>>> >>>> are new debug commands (like break, continue, or new breakpoints),
>>> >>>> and which
>>> >>>> needs to check on every new instrument in the chain whether it
>>> >>>> matches one
>>> >>>> of the existing breakpoints. It's not too much, since it's done at
>>> >>>> control
>>> >>>> rate, but there is a penalty. Performance during debugging will also
>>> >>>> get a
>>> >>>> little worse once line breakpoints are implemented because there will
>>> >>>> have
>>> >>>> to be a check for every ugen called within an instrument. But still I
>>> >>>> think
>>> >>>> the difference in performance between debug and no debug will not be
>>> >>>> as
>>> >>>> large as it is for C.
>>> >>>>
>>> >>>> Cheers,
>>> >>>> Andrés
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> >>>>>
>>> >>>>> Sorry for the noise! I'm properly checked out now and enjoying the
>>> >>>>> ride! This is great. Are there any performance costs if no
>>> >>>>> breakpoint
>>> >>>>> is set?
>>> >>>>>
>>> >>>>> On 11 April 2014 09:05, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> >>>>>> I assume that since I am getting no build or linker errors that
>>> >>>>>> there
>>> >>>>>> is something amiss in my code?
>>> >>>>>>
>>> >>>>>> On 11 April 2014 01:51, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> >>>>>>> No. None at all?
>>> >>>>>>>
>>> >>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera" <mantaraya36@gmail.com>
>>> >>>>>>> wrote:
>>> >>>>>>>>
>>> >>>>>>>> Are you getting build errors?
>>> >>>>>>>>
>>> >>>>>>>> Cheers,
>>> >>>>>>>> Andrés
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>> >>>>>>>> <mantaraya36@gmail.com>
>>> >>>>>>>> wrote:
>>> >>>>>>>>>
>>> >>>>>>>>> Did you checkout the csdebugger branch for csound and run cmake
>>> >>>>>>>>> with
>>> >>>>>>>>> -DBUILD_DEBUGGER=1?
>>> >>>>>>>>>
>>> >>>>>>>>> Cheers,
>>> >>>>>>>>> Andrés
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh <rorywalsh@ear.ie>
>>> >>>>>>>>> wrote:
>>> >>>>>>>>>>
>>> >>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>> >>>>>>>>>>
>>> >>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera <mantaraya36@gmail.com>
>>> >>>>>>>>>> wrote:
>>> >>>>>>>>>>> easier to do:
>>> >>>>>>>>>>>
>>> >>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>>> >>>>>>>>>>>
>>> >>>>>>>>>>> Cheers,
>>> >>>>>>>>>>> Andrés
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh <rorywalsh@ear.ie>
>>> >>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> I'm probably adding the wrong lines to cmakelists.txt?
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> Is that right?
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera
>>> >>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>> Yes it would :)
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh
>>> >>>>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> It would help if I built with the debugger enabled :)
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh <rorywalsh@ear.ie>
>>> >>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs and scores,
>>> >>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>> this
>>> >>>>>>>>>>>>>>> allowed? My breakpoint callback is never being hit. What
>>> >>>>>>>>>>>>>>> am
>>> >>>>>>>>>>>>>>> I
>>> >>>>>>>>>>>>>>> missing?
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr, void
>>> >>>>>>>>>>>>>>> *userdata);
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>> int main(int argc, char *argv[])
>>> >>>>>>>>>>>>>>> {
>>> >>>>>>>>>>>>>>>    int break_count = 0;
>>> >>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>> >>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>>> >>>>>>>>>>>>>>>    csoundStart(csound);
>>> >>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>> >>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb, (void *)
>>> >>>>>>>>>>>>>>> &break_count);
>>> >>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>> >>>>>>>>>>>>>>>    csoundDestroy(csound);
>>> >>>>>>>>>>>>>>> }
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>> //this never gets called.
>>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr, void
>>> >>>>>>>>>>>>>>> *userdata)
>>> >>>>>>>>>>>>>>> {
>>> >>>>>>>>>>>>>>>    int *count = (int *) userdata;
>>> >>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line, instr);
>>> >>>>>>>>>>>>>>>    *count = *count + 1;
>>> >>>>>>>>>>>>>>> };
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh <rorywalsh@ear.ie>
>>> >>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>> That's great. Thanks.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>>> >>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>> Currently only instrument breakpoints are implemented...
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>> >>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head around this I
>>> >>>>>>>>>>>>>>>>>> might
>>> >>>>>>>>>>>>>>>>>> try
>>> >>>>>>>>>>>>>>>>>> to
>>> >>>>>>>>>>>>>>>>>> write a simple command line app that passes a
>>> >>>>>>>>>>>>>>>>>> breakpoint
>>> >>>>>>>>>>>>>>>>>> line
>>> >>>>>>>>>>>>>>>>>> number
>>> >>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it will print
>>> >>>>>>>>>>>>>>>>>> out
>>> >>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>> values
>>> >>>>>>>>>>>>>>>>>> of
>>> >>>>>>>>>>>>>>>>>> each variable in that instrument. That would be a
>>> >>>>>>>>>>>>>>>>>> start.
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>>> >>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>> Not exactly.
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> the function:
>>> >>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active instrument
>>> >>>>>>>>>>>>>>>>>>> (where
>>> >>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>> debugger
>>> >>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>>> >>>>>>>>>>>>>>>>>>> information
>>> >>>>>>>>>>>>>>>>>>> about
>>> >>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>> instrument instance (variables and time counters,
>>> >>>>>>>>>>>>>>>>>>> p-fields,
>>> >>>>>>>>>>>>>>>>>>> etc.)
>>> >>>>>>>>>>>>>>>>>>> from
>>> >>>>>>>>>>>>>>>>>>> it.
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> The callback function is only called if a breakpoint
>>> >>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>> reached,
>>> >>>>>>>>>>>>>>>>>>> which
>>> >>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>> checked inside csound's kperf function. There is a
>>> >>>>>>>>>>>>>>>>>>> linked
>>> >>>>>>>>>>>>>>>>>>> list
>>> >>>>>>>>>>>>>>>>>>> of
>>> >>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a thread-safe way),
>>> >>>>>>>>>>>>>>>>>>> which
>>> >>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>> traversed
>>> >>>>>>>>>>>>>>>>>>> to
>>> >>>>>>>>>>>>>>>>>>> check if the current instrument matches a breakpoint.
>>> >>>>>>>>>>>>>>>>>>> For
>>> >>>>>>>>>>>>>>>>>>> line
>>> >>>>>>>>>>>>>>>>>>> breakpoints,
>>> >>>>>>>>>>>>>>>>>>> what will need to happen is that for every opcode that
>>> >>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>> executed,
>>> >>>>>>>>>>>>>>>>>>> it
>>> >>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint line.
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>> >>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>> So you grab the values for all the variables in a
>>> >>>>>>>>>>>>>>>>>>>> particular
>>> >>>>>>>>>>>>>>>>>>>> line
>>> >>>>>>>>>>>>>>>>>>>> each
>>> >>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I reading that
>>> >>>>>>>>>>>>>>>>>>>> right?
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>>> >>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>> Hi,
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> void CsoundEngine::breakpointCallback(CSOUND
>>> >>>>>>>>>>>>>>>>>>>>> *csound,
>>> >>>>>>>>>>>>>>>>>>>>> int
>>> >>>>>>>>>>>>>>>>>>>>> line,
>>> >>>>>>>>>>>>>>>>>>>>> double
>>> >>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>>> >>>>>>>>>>>>>>>>>>>>> {
>>> >>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " << line <<
>>> >>>>>>>>>>>>>>>>>>>>> instr;
>>> >>>>>>>>>>>>>>>>>>>>>    INSDS *insds = csoundDebugGetInstrument(csound);
>>> >>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *) udata;
>>> >>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>>> >>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp = insds->instr->varPool->head;
>>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>>> >>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>>> >>>>>>>>>>>>>>>>>>>>>    while (vp) {
>>> >>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>>> >>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>>> >>>>>>>>>>>>>>>>>>>>>            if (strcmp(vp->varType->varTypeName,
>>> >>>>>>>>>>>>>>>>>>>>> "i") ==
>>> >>>>>>>>>>>>>>>>>>>>> 0
>>> >>>>>>>>>>>>>>>>>>>>>                    ||
>>> >>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>>> >>>>>>>>>>>>>>>>>>>>> "k")
>>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas +
>>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(*varmem);
>>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>>>>>>>>>>>>>>>>>>>            } else
>>> >>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>>> >>>>>>>>>>>>>>>>>>>>> "S")
>>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>>> >>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(varmem);
>>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>>>>>>>>>>>>>>>>>>>            } else if
>>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>> >>>>>>>>>>>>>>>>>>>>> "a")
>>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>>> >>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>>> >>>>>>>>>>>>>>>>>>>>> 2)<<
>>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas +
>>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << QVariant(*varmem);
>>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>>>>>>>>>>>>>>>>>>>            } else {
>>> >>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>>> >>>>>>>>>>>>>>>>>>>>>            }
>>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varType->varTypeName;
>>> >>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>>> >>>>>>>>>>>>>>>>>>>>>        }
>>> >>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>>> >>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>>> >>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>>> >>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>>> >>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>    while (in) {
>>> >>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>>> >>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>>> >>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>>> >>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>>> >>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>>> >>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>>> >>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>>> >>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>>> >>>>>>>>>>>>>>>>>>>>> }
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause button and
>>> >>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>> debugger
>>> >>>>>>>>>>>>>>>>>>>>> will
>>> >>>>>>>>>>>>>>>>>>>>> stop
>>> >>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is no
>>> >>>>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>>>>>>>>>>>>>>>>>>> there.
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>> >>>>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value of a
>>> >>>>>>>>>>>>>>>>>>>>>> variable
>>> >>>>>>>>>>>>>>>>>>>>>> once
>>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access that
>>> >>>>>>>>>>>>>>>>>>>>>> information
>>> >>>>>>>>>>>>>>>>>>>>>> from
>>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger interface in
>>> >>>>>>>>>>>>>>>>>>>>>> CsounsQT
>>> >>>>>>>>>>>>>>>>>>>>>> looks
>>> >>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to implement
>>> >>>>>>>>>>>>>>>>>>>>>> anything as
>>> >>>>>>>>>>>>>>>>>>>>>> professional
>>> >>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being able to stop
>>> >>>>>>>>>>>>>>>>>>>>>> and
>>> >>>>>>>>>>>>>>>>>>>>>> query
>>> >>>>>>>>>>>>>>>>>>>>>> variables
>>> >>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your screen-shot
>>> >>>>>>>>>>>>>>>>>>>>>> seems to
>>> >>>>>>>>>>>>>>>>>>>>>> indicate
>>> >>>>>>>>>>>>>>>>>>>>>> so?
>>> >>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>>> >>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets the
>>> >>>>>>>>>>>>>>>>>>>>>>> CSOUND
>>> >>>>>>>>>>>>>>>>>>>>>>> structure, it
>>> >>>>>>>>>>>>>>>>>>>>>>> can
>>> >>>>>>>>>>>>>>>>>>>>>>> get
>>> >>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres Cabrera
>>> >>>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do something
>>> >>>>>>>>>>>>>>>>>>>>>>>> like:
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>>> >>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr 1\nasig
>>> >>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>>> >>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0   1
>>> >>>>>>>>>>>>>>>>>>>>>>>> 440");
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>>> >>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>>> >>>>>>>>>>>>>>>>>>>>>>>> (void
>>> >>>>>>>>>>>>>>>>>>>>>>>> *)
>>> >>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1.1,
>>> >>>>>>>>>>>>>>>>>>>>>>>> 0);
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>>> >>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>>> >>>>>>>>>>>>>>>>>>>>>>>>    }
>>> >>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>>>>>>> called.
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>> >>>>>>>>>>>>>>>>>>>>>>>> implemented
>>> >>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>>> >>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>> debugger
>>> >>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active), but I also
>>> >>>>>>>>>>>>>>>>>>>>>>>> want to
>>> >>>>>>>>>>>>>>>>>>>>>>>> add
>>> >>>>>>>>>>>>>>>>>>>>>>>> line
>>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>> >>>>>>>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm just
>>> >>>>>>>>>>>>>>>>>>>>>>>>> looking
>>> >>>>>>>>>>>>>>>>>>>>>>>>> through
>>> >>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>>> code
>>> >>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of setting
>>> >>>>>>>>>>>>>>>>>>>>>>>>> this
>>> >>>>>>>>>>>>>>>>>>>>>>>>> up?
>>> >>>>>>>>>>>>>>>>>>>>>>>>> The
>>> >>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>>> >>>>>>>>>>>>>>>>>>>>>>>>> stuff
>>> >>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted is
>>> >>>>>>>>>>>>>>>>>>>>>>>>> confusing
>>> >>>>>>>>>>>>>>>>>>>>>>>>> me.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>>> >>>>>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> finally
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> getting
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> useful
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> testing
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the csdebugger
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> have
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> time,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> please
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need to add
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of the API
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> here:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end within
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> which
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are part of
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> API,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> think
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as they are
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> also
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> compile
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> option.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat invasive, I
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> make
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND struct
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> switched
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a callback
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> has
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> been
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> registered
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> with csoundSetBreakpointCallback(CSOUND
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> called,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> providing
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> empty
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> audio
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the time
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> counters
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> in
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> continue
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing continues
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> where
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> it
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> left
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> off.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs, but
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> now
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> working on
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> my
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> simple
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions are very
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>>>>>>>>>>>>>>>> Integration
>>> >>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>>> _______________________________________________
>>> >>>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>>>> _______________________________________________
>>> >>>>>>>>>> Csound-devel mailing list
>>> >>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>> ------------------------------------------------------------------------------
>>> >>>>>>>> Put Bad Developers to Shame
>>> >>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>>>>> _______________________________________________
>>> >>>>>>>> Csound-devel mailing list
>>> >>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>>>>>
>>> >>>>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>> ------------------------------------------------------------------------------
>>> >>>>> Put Bad Developers to Shame
>>> >>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>>> Continuously Automate Build, Test & Deployment
>>> >>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>>> _______________________________________________
>>> >>>>> Csound-devel mailing list
>>> >>>>> Csound-devel@lists.sourceforge.net
>>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> ------------------------------------------------------------------------------
>>> >>>> Put Bad Developers to Shame
>>> >>>> Dominate Development with Jenkins Continuous Integration
>>> >>>> Continuously Automate Build, Test & Deployment
>>> >>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> _______________________________________________
>>> >>>> Csound-devel mailing list
>>> >>>> Csound-devel@lists.sourceforge.net
>>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>
>>> >
>>> >
>>> > ------------------------------------------------------------------------------
>>> > Put Bad Developers to Shame
>>> > Dominate Development with Jenkins Continuous Integration
>>> > Continuously Automate Build, Test & Deployment
>>> > Start a new project now. Try Jenkins in the cloud.
>>> > http://p.sf.net/sfu/13600_Cloudbees
>>> > _______________________________________________
>>> > Csound-devel mailing list
>>> > Csound-devel@lists.sourceforge.net
>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >
>>>
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-13 16:27
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
It looks pretty good from here. I guess so long as one is sure to
clean up the breakpoints there shouldn't be any issues. I am however
having a problem with csoundDebugNext(). Should this trigger the
breakpoint callback too? I'm not getting anything?

On 13 April 2014 16:21, Andres Cabrera  wrote:
> I'm thinking the debugger API could offer some facilties for common tasks
> like variable querying to remove that pointer uglyness.
>
> I would also like to see this in mainline Csound, but I'd like some feedback
> from others first as to whether the way I've done it is the best possible.
>
> Cheers,
> Andrés
>
>
> On Sun, Apr 13, 2014 at 8:15 AM, Rory Walsh  wrote:
>>
>> Found it!
>>
>> On 13 April 2014 11:46, Rory Walsh  wrote:
>> > Actually, I can't seem to find that? It's not a member of CSOUND?
>> >
>> > On 13 April 2014 10:54, Rory Walsh  wrote:
>> >> That's easy. Nice one.
>> >>
>> >> On 13 Apr 2014 09:44, "Victor Lazzarini" 
>> >> wrote:
>> >>>
>> >>> csound->GetKcounter( )
>> >>>
>> >>>
>> >>>
>> >>> http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
>> >>> ========================
>> >>> Dr Victor Lazzarini
>> >>> Senior Lecturer
>> >>> NUI Maynooth, Ireland
>> >>> victor dot lazzarini at nuim dot ie
>> >>>
>> >>>
>> >>>
>> >>>
>> >>> On 12 Apr 2014, at 18:36, Rory Walsh  wrote:
>> >>>
>> >>> > Finally, how can one query the current k-pass, as in how many
>> >>> > k-cycles
>> >>> > have passed? I can put in a counter in my own processing thread, but
>> >>> > I
>> >>> > thought it might be simple to grab from Csound?
>> >>> >
>> >>> > On 12 April 2014 13:20, Rory Walsh  wrote:
>> >>> >> Hi Andres. All going good here. I just wanted to ask you something
>> >>> >> about the implementation. Am I right in saying that whenever
>> >>> >> csoundDebuggerInit() is called the CSOUND structure that is passed
>> >>> >> to
>> >>> >> it gets appended with some csdebug_data_t data? This data block is
>> >>> >> then zeroed and removed when one calls csoundDebuggerClean()? One
>> >>> >> little issue I have is that I seem to have to call
>> >>> >> csoundDebuggerInit() before I set my breakpoints, that is every
>> >>> >> time I
>> >>> >> set a breakpoint or call any of the debugger methods I have to call
>> >>> >> csoundDebuggerInit() first. Otherwise I get an assert in the
>> >>> >> breakpoint functions because csound->csdebug_data_t is no longer
>> >>> >> valid. I guess there is no harm in calling csoundDebuggerInit()
>> >>> >> each
>> >>> >> time one updates or removes a breakpoint if all it does it
>> >>> >> add/overwrite a data block in the underlying Csound object? I'd
>> >>> >> love
>> >>> >> to see this in the next release. It would be nice to ship a command
>> >>> >> line app in all packages that would work like the gdb debugger.
>> >>> >>
>> >>> >> On 11 April 2014 22:51, Rory Walsh  wrote:
>> >>> >>> This is really great Andres. I threw together a simple command
>> >>> >>> line
>> >>> >>> application that perhaps you could add to the test suite? I just
>> >>> >>> robbed what I could understand from yours and slotted it into as
>> >>> >>> basic
>> >>> >>> an example as I could think off.
>> >>> >>>
>> >>> >>> Usage:
>> >>> >>>
>> >>> >>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>> >>> >>>
>> >>> >>> Once the breakpoint at the given k-cycle is hit the debugger will
>> >>> >>> print the values of each of the variables in the chosen instrument
>> >>> >>> ala
>> >>> >>>
>> >>> >>> ==============================================
>> >>> >>> Breakpoint at instr 1
>> >>> >>> Number of k-cycles into performance: 100
>> >>> >>> ------------------------------------------------------
>> >>> >>> VarName:Schannel    value = hello         varType[S]
>> >>> >>> VarName:k1    value = 0.580499     varType[k]
>> >>> >>> VarName:aout    value = 0.0823895     varType[a]
>> >>> >>> VarName:ksmps     varType[r]
>> >>> >>>
>> >>> >>> I have to say hats off. This is very clever. I can't wait to add
>> >>> >>> something like this to Cabbage.
>> >>> >>>
>> >>> >>>
>> >>> >>> On 11 April 2014 22:08, Andres Cabrera 
>> >>> >>> wrote:
>> >>> >>>> Hi,
>> >>> >>>>
>> >>> >>>> Good to hear you've got it going. The only performance penalty if
>> >>> >>>> you
>> >>> >>>> don't
>> >>> >>>> call csoundDebuggerInit is that kperf is a function pointer
>> >>> >>>> rather
>> >>> >>>> than a
>> >>> >>>> function. If you have called csoundDebuggerInit, then you will be
>> >>> >>>> running a
>> >>> >>>> slightly heavier kperf_debug function, which needs to check
>> >>> >>>> whether
>> >>> >>>> there
>> >>> >>>> are new debug commands (like break, continue, or new
>> >>> >>>> breakpoints),
>> >>> >>>> and which
>> >>> >>>> needs to check on every new instrument in the chain whether it
>> >>> >>>> matches one
>> >>> >>>> of the existing breakpoints. It's not too much, since it's done
>> >>> >>>> at
>> >>> >>>> control
>> >>> >>>> rate, but there is a penalty. Performance during debugging will
>> >>> >>>> also
>> >>> >>>> get a
>> >>> >>>> little worse once line breakpoints are implemented because there
>> >>> >>>> will
>> >>> >>>> have
>> >>> >>>> to be a check for every ugen called within an instrument. But
>> >>> >>>> still I
>> >>> >>>> think
>> >>> >>>> the difference in performance between debug and no debug will not
>> >>> >>>> be
>> >>> >>>> as
>> >>> >>>> large as it is for C.
>> >>> >>>>
>> >>> >>>> Cheers,
>> >>> >>>> Andrés
>> >>> >>>>
>> >>> >>>>
>> >>> >>>>
>> >>> >>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh 
>> >>> >>>> wrote:
>> >>> >>>>>
>> >>> >>>>> Sorry for the noise! I'm properly checked out now and enjoying
>> >>> >>>>> the
>> >>> >>>>> ride! This is great. Are there any performance costs if no
>> >>> >>>>> breakpoint
>> >>> >>>>> is set?
>> >>> >>>>>
>> >>> >>>>> On 11 April 2014 09:05, Rory Walsh  wrote:
>> >>> >>>>>> I assume that since I am getting no build or linker errors that
>> >>> >>>>>> there
>> >>> >>>>>> is something amiss in my code?
>> >>> >>>>>>
>> >>> >>>>>> On 11 April 2014 01:51, Rory Walsh  wrote:
>> >>> >>>>>>> No. None at all?
>> >>> >>>>>>>
>> >>> >>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera" 
>> >>> >>>>>>> wrote:
>> >>> >>>>>>>>
>> >>> >>>>>>>> Are you getting build errors?
>> >>> >>>>>>>>
>> >>> >>>>>>>> Cheers,
>> >>> >>>>>>>> Andrés
>> >>> >>>>>>>>
>> >>> >>>>>>>>
>> >>> >>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>> >>> >>>>>>>> 
>> >>> >>>>>>>> wrote:
>> >>> >>>>>>>>>
>> >>> >>>>>>>>> Did you checkout the csdebugger branch for csound and run
>> >>> >>>>>>>>> cmake
>> >>> >>>>>>>>> with
>> >>> >>>>>>>>> -DBUILD_DEBUGGER=1?
>> >>> >>>>>>>>>
>> >>> >>>>>>>>> Cheers,
>> >>> >>>>>>>>> Andrés
>> >>> >>>>>>>>>
>> >>> >>>>>>>>>
>> >>> >>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh
>> >>> >>>>>>>>> 
>> >>> >>>>>>>>> wrote:
>> >>> >>>>>>>>>>
>> >>> >>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>> >>> >>>>>>>>>>
>> >>> >>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera
>> >>> >>>>>>>>>> 
>> >>> >>>>>>>>>> wrote:
>> >>> >>>>>>>>>>> easier to do:
>> >>> >>>>>>>>>>>
>> >>> >>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>> >>> >>>>>>>>>>>
>> >>> >>>>>>>>>>> Cheers,
>> >>> >>>>>>>>>>> Andrés
>> >>> >>>>>>>>>>>
>> >>> >>>>>>>>>>>
>> >>> >>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh
>> >>> >>>>>>>>>>> 
>> >>> >>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>
>> >>> >>>>>>>>>>>> I'm probably adding the wrong lines to cmakelists.txt?
>> >>> >>>>>>>>>>>>
>> >>> >>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>> >>> >>>>>>>>>>>>
>> >>> >>>>>>>>>>>> Is that right?
>> >>> >>>>>>>>>>>>
>> >>> >>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera
>> >>> >>>>>>>>>>>> 
>> >>> >>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>> Yes it would :)
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>> Cheers,
>> >>> >>>>>>>>>>>>> Andrés
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh
>> >>> >>>>>>>>>>>>> 
>> >>> >>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>> It would help if I built with the debugger enabled :)
>> >>> >>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh 
>> >>> >>>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs and
>> >>> >>>>>>>>>>>>>>> scores,
>> >>> >>>>>>>>>>>>>>> is
>> >>> >>>>>>>>>>>>>>> this
>> >>> >>>>>>>>>>>>>>> allowed? My breakpoint callback is never being hit.
>> >>> >>>>>>>>>>>>>>> What
>> >>> >>>>>>>>>>>>>>> am
>> >>> >>>>>>>>>>>>>>> I
>> >>> >>>>>>>>>>>>>>> missing?
>> >>> >>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr,
>> >>> >>>>>>>>>>>>>>> void
>> >>> >>>>>>>>>>>>>>> *userdata);
>> >>> >>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>> int main(int argc, char *argv[])
>> >>> >>>>>>>>>>>>>>> {
>> >>> >>>>>>>>>>>>>>>    int break_count = 0;
>> >>> >>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>> >>> >>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>> >>> >>>>>>>>>>>>>>>    csoundStart(csound);
>> >>> >>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>> >>> >>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb, (void
>> >>> >>>>>>>>>>>>>>> *)
>> >>> >>>>>>>>>>>>>>> &break_count);
>> >>> >>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>> >>> >>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>> >>> >>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>> >>> >>>>>>>>>>>>>>>    csoundDestroy(csound);
>> >>> >>>>>>>>>>>>>>> }
>> >>> >>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>> //this never gets called.
>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr,
>> >>> >>>>>>>>>>>>>>> void
>> >>> >>>>>>>>>>>>>>> *userdata)
>> >>> >>>>>>>>>>>>>>> {
>> >>> >>>>>>>>>>>>>>>    int *count = (int *) userdata;
>> >>> >>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line, instr);
>> >>> >>>>>>>>>>>>>>>    *count = *count + 1;
>> >>> >>>>>>>>>>>>>>> };
>> >>> >>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh 
>> >>> >>>>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>>> That's great. Thanks.
>> >>> >>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>> >>> >>>>>>>>>>>>>>>> 
>> >>> >>>>>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>> >>> >>>>>>>>>>>>>>>>> implemented...
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>> Cheers,
>> >>> >>>>>>>>>>>>>>>>> Andrés
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>> >>> >>>>>>>>>>>>>>>>> 
>> >>> >>>>>>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head around
>> >>> >>>>>>>>>>>>>>>>>> this I
>> >>> >>>>>>>>>>>>>>>>>> might
>> >>> >>>>>>>>>>>>>>>>>> try
>> >>> >>>>>>>>>>>>>>>>>> to
>> >>> >>>>>>>>>>>>>>>>>> write a simple command line app that passes a
>> >>> >>>>>>>>>>>>>>>>>> breakpoint
>> >>> >>>>>>>>>>>>>>>>>> line
>> >>> >>>>>>>>>>>>>>>>>> number
>> >>> >>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it will
>> >>> >>>>>>>>>>>>>>>>>> print
>> >>> >>>>>>>>>>>>>>>>>> out
>> >>> >>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>> values
>> >>> >>>>>>>>>>>>>>>>>> of
>> >>> >>>>>>>>>>>>>>>>>> each variable in that instrument. That would be a
>> >>> >>>>>>>>>>>>>>>>>> start.
>> >>> >>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>> >>> >>>>>>>>>>>>>>>>>> 
>> >>> >>>>>>>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>>>>>> Not exactly.
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>> the function:
>> >>> >>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active
>> >>> >>>>>>>>>>>>>>>>>>> instrument
>> >>> >>>>>>>>>>>>>>>>>>> (where
>> >>> >>>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>>> debugger
>> >>> >>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>> >>> >>>>>>>>>>>>>>>>>>> information
>> >>> >>>>>>>>>>>>>>>>>>> about
>> >>> >>>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>>> instrument instance (variables and time counters,
>> >>> >>>>>>>>>>>>>>>>>>> p-fields,
>> >>> >>>>>>>>>>>>>>>>>>> etc.)
>> >>> >>>>>>>>>>>>>>>>>>> from
>> >>> >>>>>>>>>>>>>>>>>>> it.
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>> The callback function is only called if a
>> >>> >>>>>>>>>>>>>>>>>>> breakpoint
>> >>> >>>>>>>>>>>>>>>>>>> is
>> >>> >>>>>>>>>>>>>>>>>>> reached,
>> >>> >>>>>>>>>>>>>>>>>>> which
>> >>> >>>>>>>>>>>>>>>>>>> is
>> >>> >>>>>>>>>>>>>>>>>>> checked inside csound's kperf function. There is a
>> >>> >>>>>>>>>>>>>>>>>>> linked
>> >>> >>>>>>>>>>>>>>>>>>> list
>> >>> >>>>>>>>>>>>>>>>>>> of
>> >>> >>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a thread-safe
>> >>> >>>>>>>>>>>>>>>>>>> way),
>> >>> >>>>>>>>>>>>>>>>>>> which
>> >>> >>>>>>>>>>>>>>>>>>> is
>> >>> >>>>>>>>>>>>>>>>>>> traversed
>> >>> >>>>>>>>>>>>>>>>>>> to
>> >>> >>>>>>>>>>>>>>>>>>> check if the current instrument matches a
>> >>> >>>>>>>>>>>>>>>>>>> breakpoint.
>> >>> >>>>>>>>>>>>>>>>>>> For
>> >>> >>>>>>>>>>>>>>>>>>> line
>> >>> >>>>>>>>>>>>>>>>>>> breakpoints,
>> >>> >>>>>>>>>>>>>>>>>>> what will need to happen is that for every opcode
>> >>> >>>>>>>>>>>>>>>>>>> that
>> >>> >>>>>>>>>>>>>>>>>>> is
>> >>> >>>>>>>>>>>>>>>>>>> executed,
>> >>> >>>>>>>>>>>>>>>>>>> it
>> >>> >>>>>>>>>>>>>>>>>>> is
>> >>> >>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint line.
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>> Cheers,
>> >>> >>>>>>>>>>>>>>>>>>> Andrés
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>> >>> >>>>>>>>>>>>>>>>>>> 
>> >>> >>>>>>>>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>> So you grab the values for all the variables in a
>> >>> >>>>>>>>>>>>>>>>>>>> particular
>> >>> >>>>>>>>>>>>>>>>>>>> line
>> >>> >>>>>>>>>>>>>>>>>>>> each
>> >>> >>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I reading
>> >>> >>>>>>>>>>>>>>>>>>>> that
>> >>> >>>>>>>>>>>>>>>>>>>> right?
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>> >>> >>>>>>>>>>>>>>>>>>>> 
>> >>> >>>>>>>>>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>>>>>>>> Hi,
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>> void CsoundEngine::breakpointCallback(CSOUND
>> >>> >>>>>>>>>>>>>>>>>>>>> *csound,
>> >>> >>>>>>>>>>>>>>>>>>>>> int
>> >>> >>>>>>>>>>>>>>>>>>>>> line,
>> >>> >>>>>>>>>>>>>>>>>>>>> double
>> >>> >>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>> >>> >>>>>>>>>>>>>>>>>>>>> {
>> >>> >>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " << line <<
>> >>> >>>>>>>>>>>>>>>>>>>>> instr;
>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *insds =
>> >>> >>>>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>> >>> >>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *) udata;
>> >>> >>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>> >>> >>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp =
>> >>> >>>>>>>>>>>>>>>>>>>>> insds->instr->varPool->head;
>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>> >>> >>>>>>>>>>>>>>>>>>>>>    while (vp) {
>> >>> >>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>> >>> >>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>> >>> >>>>>>>>>>>>>>>>>>>>>            if (strcmp(vp->varType->varTypeName,
>> >>> >>>>>>>>>>>>>>>>>>>>> "i") ==
>> >>> >>>>>>>>>>>>>>>>>>>>> 0
>> >>> >>>>>>>>>>>>>>>>>>>>>                    ||
>> >>> >>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>> >>> >>>>>>>>>>>>>>>>>>>>> "k")
>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas
>> >>> >>>>>>>>>>>>>>>>>>>>> +
>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>> >>> >>>>>>>>>>>>>>>>>>>>>            } else
>> >>> >>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>> >>> >>>>>>>>>>>>>>>>>>>>> "S")
>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>> >>> >>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>> >>> >>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(varmem);
>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>> >>> >>>>>>>>>>>>>>>>>>>>>            } else if
>> >>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>> >>> >>>>>>>>>>>>>>>>>>>>> "a")
>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>> >>> >>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>> >>> >>>>>>>>>>>>>>>>>>>>> 2)<<
>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas
>> >>> >>>>>>>>>>>>>>>>>>>>> +
>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>> >>> >>>>>>>>>>>>>>>>>>>>>            } else {
>> >>> >>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>> >>> >>>>>>>>>>>>>>>>>>>>>            }
>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails <<
>> >>> >>>>>>>>>>>>>>>>>>>>> vp->varType->varTypeName;
>> >>> >>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>> >>> >>>>>>>>>>>>>>>>>>>>>        }
>> >>> >>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in) {
>> >>> >>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>> >>> >>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>> >>> >>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>> >>> >>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>> >>> >>>>>>>>>>>>>>>>>>>>> }
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause button
>> >>> >>>>>>>>>>>>>>>>>>>>> and
>> >>> >>>>>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>>>>> debugger
>> >>> >>>>>>>>>>>>>>>>>>>>> will
>> >>> >>>>>>>>>>>>>>>>>>>>> stop
>> >>> >>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is no
>> >>> >>>>>>>>>>>>>>>>>>>>> breakpoint
>> >>> >>>>>>>>>>>>>>>>>>>>> there.
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>> Cheers,
>> >>> >>>>>>>>>>>>>>>>>>>>> Andrés
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>> >>> >>>>>>>>>>>>>>>>>>>>> 
>> >>> >>>>>>>>>>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value of a
>> >>> >>>>>>>>>>>>>>>>>>>>>> variable
>> >>> >>>>>>>>>>>>>>>>>>>>>> once
>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access that
>> >>> >>>>>>>>>>>>>>>>>>>>>> information
>> >>> >>>>>>>>>>>>>>>>>>>>>> from
>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger interface
>> >>> >>>>>>>>>>>>>>>>>>>>>> in
>> >>> >>>>>>>>>>>>>>>>>>>>>> CsounsQT
>> >>> >>>>>>>>>>>>>>>>>>>>>> looks
>> >>> >>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to implement
>> >>> >>>>>>>>>>>>>>>>>>>>>> anything as
>> >>> >>>>>>>>>>>>>>>>>>>>>> professional
>> >>> >>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being able to
>> >>> >>>>>>>>>>>>>>>>>>>>>> stop
>> >>> >>>>>>>>>>>>>>>>>>>>>> and
>> >>> >>>>>>>>>>>>>>>>>>>>>> query
>> >>> >>>>>>>>>>>>>>>>>>>>>> variables
>> >>> >>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your screen-shot
>> >>> >>>>>>>>>>>>>>>>>>>>>> seems to
>> >>> >>>>>>>>>>>>>>>>>>>>>> indicate
>> >>> >>>>>>>>>>>>>>>>>>>>>> so?
>> >>> >>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>> >>> >>>>>>>>>>>>>>>>>>>>>> 
>> >>> >>>>>>>>>>>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets the
>> >>> >>>>>>>>>>>>>>>>>>>>>>> CSOUND
>> >>> >>>>>>>>>>>>>>>>>>>>>>> structure, it
>> >>> >>>>>>>>>>>>>>>>>>>>>>> can
>> >>> >>>>>>>>>>>>>>>>>>>>>>> get
>> >>> >>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cheers,
>> >>> >>>>>>>>>>>>>>>>>>>>>>> Andrés
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres
>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cabrera
>> >>> >>>>>>>>>>>>>>>>>>>>>>> 
>> >>> >>>>>>>>>>>>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> something
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> like:
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr 1\nasig
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0   1
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 440");
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (void
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> *)
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1.1,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 0);
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    }
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> callback
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> is
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> called.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> implemented
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> debugger
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active), but I
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> also
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> want to
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> add
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> line
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Andrés
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 
>> >>> >>>>>>>>>>>>>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm just
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> looking
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> through
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> code
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of setting
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> this
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> up?
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> The
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> stuff
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted is
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> confusing
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> me.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> 
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> finally
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> getting
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> useful
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> testing
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the csdebugger
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> please
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need to add
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of the API
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> here:
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end within
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> which
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are part of
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> API,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> think
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as they are
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> also
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> compile
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> option.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat invasive,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> make
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND struct
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> switched
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when the
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a callback
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> has
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> been
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> registered
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> with csoundSetBreakpointCallback(CSOUND
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after the
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> called,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> providing
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> empty
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> audio
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the time
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> counters
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> in
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> continue
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing continues
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> where
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> left
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> off.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs, but
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> now
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> working on
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> my
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> simple
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions are
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> very
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuous
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Integration
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>> >>>>>>>>>>>>>>>>>>>>>>> Integration
>> >>> >>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>> >>> >>>>>>>>>>>>>>>>>>>>>>> cloud.
>> >>> >>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>> >>>>>>>>>>>>>>>>>>>>>> Integration
>> >>> >>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>> >>> >>>>>>>>>>>>>>>>>>>>>> cloud.
>> >>> >>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>> >>>>>>>>>>>>>>>>>>>>> Integration
>> >>> >>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>> >>> >>>>>>>>>>>>>>>>>>>>> cloud.
>> >>> >>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>> >>>>>>>>>>>>>>>>>>>> Integration
>> >>> >>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>> >>> >>>>>>>>>>>>>>>>>>>> cloud.
>> >>> >>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>> >>>>>>>>>>>>>>>>>>> Integration
>> >>> >>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>> >>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>> >>>>>>>>>>>>>>>>>> Integration
>> >>> >>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>> >>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>> >>>>>>>>>>>>>>>>> Integration
>> >>> >>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>> >>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>> >>> >>>>>>>>>>>>>> Integration
>> >>> >>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>> >>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>> >>> >>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>> >>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>>>
>> >>> >>>>>>>>>>>>
>> >>> >>>>>>>>>>>>
>> >>> >>>>>>>>>>>>
>> >>> >>>>>>>>>>>>
>> >>> >>>>>>>>>>>>
>> >>> >>>>>>>>>>>>
>> >>> >>>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>> >>> >>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>> >>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>
>> >>> >>>>>>>>>>>
>> >>> >>>>>>>>>>>
>> >>> >>>>>>>>>>>
>> >>> >>>>>>>>>>>
>> >>> >>>>>>>>>>>
>> >>> >>>>>>>>>>>
>> >>> >>>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>> >>> >>>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>> >>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>>>
>> >>> >>>>>>>>>>
>> >>> >>>>>>>>>>
>> >>> >>>>>>>>>>
>> >>> >>>>>>>>>>
>> >>> >>>>>>>>>>
>> >>> >>>>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>> >>> >>>>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>> >>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>>>> _______________________________________________
>> >>> >>>>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>>
>> >>> >>>>>>>>>
>> >>> >>>>>>>>
>> >>> >>>>>>>>
>> >>> >>>>>>>>
>> >>> >>>>>>>>
>> >>> >>>>>>>>
>> >>> >>>>>>>>
>> >>> >>>>>>>> ------------------------------------------------------------------------------
>> >>> >>>>>>>> Put Bad Developers to Shame
>> >>> >>>>>>>> Dominate Development with Jenkins Continuous Integration
>> >>> >>>>>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>>>>> Start a new project now. Try Jenkins in the cloud.
>> >>> >>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>>>>> _______________________________________________
>> >>> >>>>>>>> Csound-devel mailing list
>> >>> >>>>>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>>>>>
>> >>> >>>>>>>
>> >>> >>>>>
>> >>> >>>>>
>> >>> >>>>>
>> >>> >>>>>
>> >>> >>>>> ------------------------------------------------------------------------------
>> >>> >>>>> Put Bad Developers to Shame
>> >>> >>>>> Dominate Development with Jenkins Continuous Integration
>> >>> >>>>> Continuously Automate Build, Test & Deployment
>> >>> >>>>> Start a new project now. Try Jenkins in the cloud.
>> >>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>>> _______________________________________________
>> >>> >>>>> Csound-devel mailing list
>> >>> >>>>> Csound-devel@lists.sourceforge.net
>> >>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>
>> >>> >>>>
>> >>> >>>>
>> >>> >>>>
>> >>> >>>>
>> >>> >>>> ------------------------------------------------------------------------------
>> >>> >>>> Put Bad Developers to Shame
>> >>> >>>> Dominate Development with Jenkins Continuous Integration
>> >>> >>>> Continuously Automate Build, Test & Deployment
>> >>> >>>> Start a new project now. Try Jenkins in the cloud.
>> >>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> >>>> _______________________________________________
>> >>> >>>> Csound-devel mailing list
>> >>> >>>> Csound-devel@lists.sourceforge.net
>> >>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >>>>
>> >>> >
>> >>> >
>> >>> >
>> >>> > ------------------------------------------------------------------------------
>> >>> > Put Bad Developers to Shame
>> >>> > Dominate Development with Jenkins Continuous Integration
>> >>> > Continuously Automate Build, Test & Deployment
>> >>> > Start a new project now. Try Jenkins in the cloud.
>> >>> > http://p.sf.net/sfu/13600_Cloudbees
>> >>> > _______________________________________________
>> >>> > Csound-devel mailing list
>> >>> > Csound-devel@lists.sourceforge.net
>> >>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>> >>> >
>> >>>
>> >>>
>> >>>
>> >>>
>> >>>
>> >>> ------------------------------------------------------------------------------
>> >>> Put Bad Developers to Shame
>> >>> Dominate Development with Jenkins Continuous Integration
>> >>> Continuously Automate Build, Test & Deployment
>> >>> Start a new project now. Try Jenkins in the cloud.
>> >>> http://p.sf.net/sfu/13600_Cloudbees
>> >>> _______________________________________________
>> >>> Csound-devel mailing list
>> >>> Csound-devel@lists.sourceforge.net
>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-13 16:38
FromSteven Yi
SubjectRe: [Cs-dev] Csound Debugger
I think Andres was talking about having a nice function to wrap the
pointer addition.  I'd suggest something like:

void* csoundGetVariableMem(CSOUND* csound, INSDS* instance, char* varName) {
      CS_VARIABLE* var = csoundFindVariableWithName(csound,
instance->instr->varPool, varName);

      if(var == NULL) return NULL;

      return insds->lclbas + var->memBlockIndex;
}

I don't know though if the API would be more often used though with
the calling code already having all of the var pool var's, i.e.
reading from the instance->insds->varPool->head first. If so, the
above could be simplified to take in the var and just remove the
csoundFindVariableWithName.  It'd probably be best to hide the
implementation details as it would give us flexibility to change
things in the future.

On Sun, Apr 13, 2014 at 11:27 AM, Rory Walsh  wrote:
> It looks pretty good from here. I guess so long as one is sure to
> clean up the breakpoints there shouldn't be any issues. I am however
> having a problem with csoundDebugNext(). Should this trigger the
> breakpoint callback too? I'm not getting anything?
>
> On 13 April 2014 16:21, Andres Cabrera  wrote:
>> I'm thinking the debugger API could offer some facilties for common tasks
>> like variable querying to remove that pointer uglyness.
>>
>> I would also like to see this in mainline Csound, but I'd like some feedback
>> from others first as to whether the way I've done it is the best possible.
>>
>> Cheers,
>> Andrés
>>
>>
>> On Sun, Apr 13, 2014 at 8:15 AM, Rory Walsh  wrote:
>>>
>>> Found it!
>>>
>>> On 13 April 2014 11:46, Rory Walsh  wrote:
>>> > Actually, I can't seem to find that? It's not a member of CSOUND?
>>> >
>>> > On 13 April 2014 10:54, Rory Walsh  wrote:
>>> >> That's easy. Nice one.
>>> >>
>>> >> On 13 Apr 2014 09:44, "Victor Lazzarini" 
>>> >> wrote:
>>> >>>
>>> >>> csound->GetKcounter( )
>>> >>>
>>> >>>
>>> >>>
>>> >>> http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
>>> >>> ========================
>>> >>> Dr Victor Lazzarini
>>> >>> Senior Lecturer
>>> >>> NUI Maynooth, Ireland
>>> >>> victor dot lazzarini at nuim dot ie
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>> On 12 Apr 2014, at 18:36, Rory Walsh  wrote:
>>> >>>
>>> >>> > Finally, how can one query the current k-pass, as in how many
>>> >>> > k-cycles
>>> >>> > have passed? I can put in a counter in my own processing thread, but
>>> >>> > I
>>> >>> > thought it might be simple to grab from Csound?
>>> >>> >
>>> >>> > On 12 April 2014 13:20, Rory Walsh  wrote:
>>> >>> >> Hi Andres. All going good here. I just wanted to ask you something
>>> >>> >> about the implementation. Am I right in saying that whenever
>>> >>> >> csoundDebuggerInit() is called the CSOUND structure that is passed
>>> >>> >> to
>>> >>> >> it gets appended with some csdebug_data_t data? This data block is
>>> >>> >> then zeroed and removed when one calls csoundDebuggerClean()? One
>>> >>> >> little issue I have is that I seem to have to call
>>> >>> >> csoundDebuggerInit() before I set my breakpoints, that is every
>>> >>> >> time I
>>> >>> >> set a breakpoint or call any of the debugger methods I have to call
>>> >>> >> csoundDebuggerInit() first. Otherwise I get an assert in the
>>> >>> >> breakpoint functions because csound->csdebug_data_t is no longer
>>> >>> >> valid. I guess there is no harm in calling csoundDebuggerInit()
>>> >>> >> each
>>> >>> >> time one updates or removes a breakpoint if all it does it
>>> >>> >> add/overwrite a data block in the underlying Csound object? I'd
>>> >>> >> love
>>> >>> >> to see this in the next release. It would be nice to ship a command
>>> >>> >> line app in all packages that would work like the gdb debugger.
>>> >>> >>
>>> >>> >> On 11 April 2014 22:51, Rory Walsh  wrote:
>>> >>> >>> This is really great Andres. I threw together a simple command
>>> >>> >>> line
>>> >>> >>> application that perhaps you could add to the test suite? I just
>>> >>> >>> robbed what I could understand from yours and slotted it into as
>>> >>> >>> basic
>>> >>> >>> an example as I could think off.
>>> >>> >>>
>>> >>> >>> Usage:
>>> >>> >>>
>>> >>> >>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>>> >>> >>>
>>> >>> >>> Once the breakpoint at the given k-cycle is hit the debugger will
>>> >>> >>> print the values of each of the variables in the chosen instrument
>>> >>> >>> ala
>>> >>> >>>
>>> >>> >>> ==============================================
>>> >>> >>> Breakpoint at instr 1
>>> >>> >>> Number of k-cycles into performance: 100
>>> >>> >>> ------------------------------------------------------
>>> >>> >>> VarName:Schannel    value = hello         varType[S]
>>> >>> >>> VarName:k1    value = 0.580499     varType[k]
>>> >>> >>> VarName:aout    value = 0.0823895     varType[a]
>>> >>> >>> VarName:ksmps     varType[r]
>>> >>> >>>
>>> >>> >>> I have to say hats off. This is very clever. I can't wait to add
>>> >>> >>> something like this to Cabbage.
>>> >>> >>>
>>> >>> >>>
>>> >>> >>> On 11 April 2014 22:08, Andres Cabrera 
>>> >>> >>> wrote:
>>> >>> >>>> Hi,
>>> >>> >>>>
>>> >>> >>>> Good to hear you've got it going. The only performance penalty if
>>> >>> >>>> you
>>> >>> >>>> don't
>>> >>> >>>> call csoundDebuggerInit is that kperf is a function pointer
>>> >>> >>>> rather
>>> >>> >>>> than a
>>> >>> >>>> function. If you have called csoundDebuggerInit, then you will be
>>> >>> >>>> running a
>>> >>> >>>> slightly heavier kperf_debug function, which needs to check
>>> >>> >>>> whether
>>> >>> >>>> there
>>> >>> >>>> are new debug commands (like break, continue, or new
>>> >>> >>>> breakpoints),
>>> >>> >>>> and which
>>> >>> >>>> needs to check on every new instrument in the chain whether it
>>> >>> >>>> matches one
>>> >>> >>>> of the existing breakpoints. It's not too much, since it's done
>>> >>> >>>> at
>>> >>> >>>> control
>>> >>> >>>> rate, but there is a penalty. Performance during debugging will
>>> >>> >>>> also
>>> >>> >>>> get a
>>> >>> >>>> little worse once line breakpoints are implemented because there
>>> >>> >>>> will
>>> >>> >>>> have
>>> >>> >>>> to be a check for every ugen called within an instrument. But
>>> >>> >>>> still I
>>> >>> >>>> think
>>> >>> >>>> the difference in performance between debug and no debug will not
>>> >>> >>>> be
>>> >>> >>>> as
>>> >>> >>>> large as it is for C.
>>> >>> >>>>
>>> >>> >>>> Cheers,
>>> >>> >>>> Andrés
>>> >>> >>>>
>>> >>> >>>>
>>> >>> >>>>
>>> >>> >>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh 
>>> >>> >>>> wrote:
>>> >>> >>>>>
>>> >>> >>>>> Sorry for the noise! I'm properly checked out now and enjoying
>>> >>> >>>>> the
>>> >>> >>>>> ride! This is great. Are there any performance costs if no
>>> >>> >>>>> breakpoint
>>> >>> >>>>> is set?
>>> >>> >>>>>
>>> >>> >>>>> On 11 April 2014 09:05, Rory Walsh  wrote:
>>> >>> >>>>>> I assume that since I am getting no build or linker errors that
>>> >>> >>>>>> there
>>> >>> >>>>>> is something amiss in my code?
>>> >>> >>>>>>
>>> >>> >>>>>> On 11 April 2014 01:51, Rory Walsh  wrote:
>>> >>> >>>>>>> No. None at all?
>>> >>> >>>>>>>
>>> >>> >>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera" 
>>> >>> >>>>>>> wrote:
>>> >>> >>>>>>>>
>>> >>> >>>>>>>> Are you getting build errors?
>>> >>> >>>>>>>>
>>> >>> >>>>>>>> Cheers,
>>> >>> >>>>>>>> Andrés
>>> >>> >>>>>>>>
>>> >>> >>>>>>>>
>>> >>> >>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>> >>> >>>>>>>> 
>>> >>> >>>>>>>> wrote:
>>> >>> >>>>>>>>>
>>> >>> >>>>>>>>> Did you checkout the csdebugger branch for csound and run
>>> >>> >>>>>>>>> cmake
>>> >>> >>>>>>>>> with
>>> >>> >>>>>>>>> -DBUILD_DEBUGGER=1?
>>> >>> >>>>>>>>>
>>> >>> >>>>>>>>> Cheers,
>>> >>> >>>>>>>>> Andrés
>>> >>> >>>>>>>>>
>>> >>> >>>>>>>>>
>>> >>> >>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh
>>> >>> >>>>>>>>> 
>>> >>> >>>>>>>>> wrote:
>>> >>> >>>>>>>>>>
>>> >>> >>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>> >>> >>>>>>>>>>
>>> >>> >>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera
>>> >>> >>>>>>>>>> 
>>> >>> >>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>> easier to do:
>>> >>> >>>>>>>>>>>
>>> >>> >>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>>> >>> >>>>>>>>>>>
>>> >>> >>>>>>>>>>> Cheers,
>>> >>> >>>>>>>>>>> Andrés
>>> >>> >>>>>>>>>>>
>>> >>> >>>>>>>>>>>
>>> >>> >>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh
>>> >>> >>>>>>>>>>> 
>>> >>> >>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>
>>> >>> >>>>>>>>>>>> I'm probably adding the wrong lines to cmakelists.txt?
>>> >>> >>>>>>>>>>>>
>>> >>> >>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>>> >>> >>>>>>>>>>>>
>>> >>> >>>>>>>>>>>> Is that right?
>>> >>> >>>>>>>>>>>>
>>> >>> >>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera
>>> >>> >>>>>>>>>>>> 
>>> >>> >>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>> Yes it would :)
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>> Cheers,
>>> >>> >>>>>>>>>>>>> Andrés
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh
>>> >>> >>>>>>>>>>>>> 
>>> >>> >>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>> It would help if I built with the debugger enabled :)
>>> >>> >>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh 
>>> >>> >>>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs and
>>> >>> >>>>>>>>>>>>>>> scores,
>>> >>> >>>>>>>>>>>>>>> is
>>> >>> >>>>>>>>>>>>>>> this
>>> >>> >>>>>>>>>>>>>>> allowed? My breakpoint callback is never being hit.
>>> >>> >>>>>>>>>>>>>>> What
>>> >>> >>>>>>>>>>>>>>> am
>>> >>> >>>>>>>>>>>>>>> I
>>> >>> >>>>>>>>>>>>>>> missing?
>>> >>> >>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr,
>>> >>> >>>>>>>>>>>>>>> void
>>> >>> >>>>>>>>>>>>>>> *userdata);
>>> >>> >>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>> int main(int argc, char *argv[])
>>> >>> >>>>>>>>>>>>>>> {
>>> >>> >>>>>>>>>>>>>>>    int break_count = 0;
>>> >>> >>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>> >>> >>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>>> >>> >>>>>>>>>>>>>>>    csoundStart(csound);
>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>> >>> >>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb, (void
>>> >>> >>>>>>>>>>>>>>> *)
>>> >>> >>>>>>>>>>>>>>> &break_count);
>>> >>> >>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>>> >>> >>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>>> >>> >>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>> >>> >>>>>>>>>>>>>>>    csoundDestroy(csound);
>>> >>> >>>>>>>>>>>>>>> }
>>> >>> >>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>> //this never gets called.
>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr,
>>> >>> >>>>>>>>>>>>>>> void
>>> >>> >>>>>>>>>>>>>>> *userdata)
>>> >>> >>>>>>>>>>>>>>> {
>>> >>> >>>>>>>>>>>>>>>    int *count = (int *) userdata;
>>> >>> >>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line, instr);
>>> >>> >>>>>>>>>>>>>>>    *count = *count + 1;
>>> >>> >>>>>>>>>>>>>>> };
>>> >>> >>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh 
>>> >>> >>>>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>>> That's great. Thanks.
>>> >>> >>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>>> >>> >>>>>>>>>>>>>>>> 
>>> >>> >>>>>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>> >>> >>>>>>>>>>>>>>>>> implemented...
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>> Cheers,
>>> >>> >>>>>>>>>>>>>>>>> Andrés
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>> >>> >>>>>>>>>>>>>>>>> 
>>> >>> >>>>>>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head around
>>> >>> >>>>>>>>>>>>>>>>>> this I
>>> >>> >>>>>>>>>>>>>>>>>> might
>>> >>> >>>>>>>>>>>>>>>>>> try
>>> >>> >>>>>>>>>>>>>>>>>> to
>>> >>> >>>>>>>>>>>>>>>>>> write a simple command line app that passes a
>>> >>> >>>>>>>>>>>>>>>>>> breakpoint
>>> >>> >>>>>>>>>>>>>>>>>> line
>>> >>> >>>>>>>>>>>>>>>>>> number
>>> >>> >>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it will
>>> >>> >>>>>>>>>>>>>>>>>> print
>>> >>> >>>>>>>>>>>>>>>>>> out
>>> >>> >>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>> values
>>> >>> >>>>>>>>>>>>>>>>>> of
>>> >>> >>>>>>>>>>>>>>>>>> each variable in that instrument. That would be a
>>> >>> >>>>>>>>>>>>>>>>>> start.
>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>>> >>> >>>>>>>>>>>>>>>>>> 
>>> >>> >>>>>>>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>>>>>> Not exactly.
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>> the function:
>>> >>> >>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active
>>> >>> >>>>>>>>>>>>>>>>>>> instrument
>>> >>> >>>>>>>>>>>>>>>>>>> (where
>>> >>> >>>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>>> debugger
>>> >>> >>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>>> >>> >>>>>>>>>>>>>>>>>>> information
>>> >>> >>>>>>>>>>>>>>>>>>> about
>>> >>> >>>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>>> instrument instance (variables and time counters,
>>> >>> >>>>>>>>>>>>>>>>>>> p-fields,
>>> >>> >>>>>>>>>>>>>>>>>>> etc.)
>>> >>> >>>>>>>>>>>>>>>>>>> from
>>> >>> >>>>>>>>>>>>>>>>>>> it.
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>> The callback function is only called if a
>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint
>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>> >>>>>>>>>>>>>>>>>>> reached,
>>> >>> >>>>>>>>>>>>>>>>>>> which
>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>> >>>>>>>>>>>>>>>>>>> checked inside csound's kperf function. There is a
>>> >>> >>>>>>>>>>>>>>>>>>> linked
>>> >>> >>>>>>>>>>>>>>>>>>> list
>>> >>> >>>>>>>>>>>>>>>>>>> of
>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a thread-safe
>>> >>> >>>>>>>>>>>>>>>>>>> way),
>>> >>> >>>>>>>>>>>>>>>>>>> which
>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>> >>>>>>>>>>>>>>>>>>> traversed
>>> >>> >>>>>>>>>>>>>>>>>>> to
>>> >>> >>>>>>>>>>>>>>>>>>> check if the current instrument matches a
>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint.
>>> >>> >>>>>>>>>>>>>>>>>>> For
>>> >>> >>>>>>>>>>>>>>>>>>> line
>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints,
>>> >>> >>>>>>>>>>>>>>>>>>> what will need to happen is that for every opcode
>>> >>> >>>>>>>>>>>>>>>>>>> that
>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>> >>>>>>>>>>>>>>>>>>> executed,
>>> >>> >>>>>>>>>>>>>>>>>>> it
>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>> >>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint line.
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>> Cheers,
>>> >>> >>>>>>>>>>>>>>>>>>> Andrés
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>> >>> >>>>>>>>>>>>>>>>>>> 
>>> >>> >>>>>>>>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>> So you grab the values for all the variables in a
>>> >>> >>>>>>>>>>>>>>>>>>>> particular
>>> >>> >>>>>>>>>>>>>>>>>>>> line
>>> >>> >>>>>>>>>>>>>>>>>>>> each
>>> >>> >>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I reading
>>> >>> >>>>>>>>>>>>>>>>>>>> that
>>> >>> >>>>>>>>>>>>>>>>>>>> right?
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>>> >>> >>>>>>>>>>>>>>>>>>>> 
>>> >>> >>>>>>>>>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>>>>>>>> Hi,
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>> void CsoundEngine::breakpointCallback(CSOUND
>>> >>> >>>>>>>>>>>>>>>>>>>>> *csound,
>>> >>> >>>>>>>>>>>>>>>>>>>>> int
>>> >>> >>>>>>>>>>>>>>>>>>>>> line,
>>> >>> >>>>>>>>>>>>>>>>>>>>> double
>>> >>> >>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>>> >>> >>>>>>>>>>>>>>>>>>>>> {
>>> >>> >>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " << line <<
>>> >>> >>>>>>>>>>>>>>>>>>>>> instr;
>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *insds =
>>> >>> >>>>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>> >>> >>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *) udata;
>>> >>> >>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>>> >>> >>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp =
>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->instr->varPool->head;
>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (vp) {
>>> >>> >>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>>> >>> >>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>>> >>> >>>>>>>>>>>>>>>>>>>>>            if (strcmp(vp->varType->varTypeName,
>>> >>> >>>>>>>>>>>>>>>>>>>>> "i") ==
>>> >>> >>>>>>>>>>>>>>>>>>>>> 0
>>> >>> >>>>>>>>>>>>>>>>>>>>>                    ||
>>> >>> >>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>>> >>> >>>>>>>>>>>>>>>>>>>>> "k")
>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas
>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else
>>> >>> >>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>>> >>> >>>>>>>>>>>>>>>>>>>>> "S")
>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>> >>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>>> >>> >>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(varmem);
>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else if
>>> >>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>> >>> >>>>>>>>>>>>>>>>>>>>> "a")
>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>>> >>> >>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>>> >>> >>>>>>>>>>>>>>>>>>>>> 2)<<
>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas
>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else {
>>> >>> >>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>>> >>> >>>>>>>>>>>>>>>>>>>>>            }
>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails <<
>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->varType->varTypeName;
>>> >>> >>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>>> >>> >>>>>>>>>>>>>>>>>>>>>        }
>>> >>> >>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in) {
>>> >>> >>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>>> >>> >>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>>> >>> >>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>>> >>> >>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>>> >>> >>>>>>>>>>>>>>>>>>>>> }
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause button
>>> >>> >>>>>>>>>>>>>>>>>>>>> and
>>> >>> >>>>>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>>>>> debugger
>>> >>> >>>>>>>>>>>>>>>>>>>>> will
>>> >>> >>>>>>>>>>>>>>>>>>>>> stop
>>> >>> >>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is no
>>> >>> >>>>>>>>>>>>>>>>>>>>> breakpoint
>>> >>> >>>>>>>>>>>>>>>>>>>>> there.
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>> >>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>> >>> >>>>>>>>>>>>>>>>>>>>> 
>>> >>> >>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value of a
>>> >>> >>>>>>>>>>>>>>>>>>>>>> variable
>>> >>> >>>>>>>>>>>>>>>>>>>>>> once
>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access that
>>> >>> >>>>>>>>>>>>>>>>>>>>>> information
>>> >>> >>>>>>>>>>>>>>>>>>>>>> from
>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger interface
>>> >>> >>>>>>>>>>>>>>>>>>>>>> in
>>> >>> >>>>>>>>>>>>>>>>>>>>>> CsounsQT
>>> >>> >>>>>>>>>>>>>>>>>>>>>> looks
>>> >>> >>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to implement
>>> >>> >>>>>>>>>>>>>>>>>>>>>> anything as
>>> >>> >>>>>>>>>>>>>>>>>>>>>> professional
>>> >>> >>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being able to
>>> >>> >>>>>>>>>>>>>>>>>>>>>> stop
>>> >>> >>>>>>>>>>>>>>>>>>>>>> and
>>> >>> >>>>>>>>>>>>>>>>>>>>>> query
>>> >>> >>>>>>>>>>>>>>>>>>>>>> variables
>>> >>> >>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your screen-shot
>>> >>> >>>>>>>>>>>>>>>>>>>>>> seems to
>>> >>> >>>>>>>>>>>>>>>>>>>>>> indicate
>>> >>> >>>>>>>>>>>>>>>>>>>>>> so?
>>> >>> >>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>>> >>> >>>>>>>>>>>>>>>>>>>>>> 
>>> >>> >>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> CSOUND
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> structure, it
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> can
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> get
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cabrera
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> 
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> something
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> like:
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr 1\nasig
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0   1
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 440");
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (void
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> *)
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1.1,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 0);
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    }
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> called.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> implemented
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> debugger
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active), but I
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> also
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> want to
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> add
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> line
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm just
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> looking
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> through
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> code
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of setting
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> this
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> up?
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> The
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> stuff
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted is
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> confusing
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> me.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> 
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> finally
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> getting
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> useful
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> testing
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the csdebugger
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> please
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need to add
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of the API
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> here:
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end within
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> which
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are part of
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> API,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> think
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as they are
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> also
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> compile
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> option.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat invasive,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> make
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND struct
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> switched
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a callback
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> has
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> been
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> registered
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> with csoundSetBreakpointCallback(CSOUND
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> called,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> providing
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> empty
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> audio
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the time
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> counters
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> in
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> continue
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing continues
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> where
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> left
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> off.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs, but
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> now
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> working on
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> my
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> simple
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions are
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> very
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>> >>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>> >>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>> >>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>> >>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>> >>>>>>>>>>>>>>>>>>>>> Integration
>>> >>> >>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>> >>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>> >>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>> >>>>>>>>>>>>>>>>>>>> Integration
>>> >>> >>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>> >>>>>>>>>>>>>>>>>>>> cloud.
>>> >>> >>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>> >>>>>>>>>>>>>>>>>>> Integration
>>> >>> >>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>> >>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>> >>>>>>>>>>>>>>>>>> Integration
>>> >>> >>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>> >>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>> >>>>>>>>>>>>>>>>> Integration
>>> >>> >>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>> >>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>> >>>>>>>>>>>>>> Integration
>>> >>> >>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>> >>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>> >>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>> >>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>
>>> >>> >>>>>>>>>>>>
>>> >>> >>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>> >>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>> >>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>
>>> >>> >>>>>>>>>>>
>>> >>> >>>>>>>>>>>
>>> >>> >>>>>>>>>>>
>>> >>> >>>>>>>>>>>
>>> >>> >>>>>>>>>>>
>>> >>> >>>>>>>>>>>
>>> >>> >>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>> >>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>> >>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>>>
>>> >>> >>>>>>>>>>
>>> >>> >>>>>>>>>>
>>> >>> >>>>>>>>>>
>>> >>> >>>>>>>>>>
>>> >>> >>>>>>>>>>
>>> >>> >>>>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>> >>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>> >>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>>>> _______________________________________________
>>> >>> >>>>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>>
>>> >>> >>>>>>>>>
>>> >>> >>>>>>>>
>>> >>> >>>>>>>>
>>> >>> >>>>>>>>
>>> >>> >>>>>>>>
>>> >>> >>>>>>>>
>>> >>> >>>>>>>>
>>> >>> >>>>>>>> ------------------------------------------------------------------------------
>>> >>> >>>>>>>> Put Bad Developers to Shame
>>> >>> >>>>>>>> Dominate Development with Jenkins Continuous Integration
>>> >>> >>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>> >>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>>>>> _______________________________________________
>>> >>> >>>>>>>> Csound-devel mailing list
>>> >>> >>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>>>>>
>>> >>> >>>>>>>
>>> >>> >>>>>
>>> >>> >>>>>
>>> >>> >>>>>
>>> >>> >>>>>
>>> >>> >>>>> ------------------------------------------------------------------------------
>>> >>> >>>>> Put Bad Developers to Shame
>>> >>> >>>>> Dominate Development with Jenkins Continuous Integration
>>> >>> >>>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>>> _______________________________________________
>>> >>> >>>>> Csound-devel mailing list
>>> >>> >>>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>
>>> >>> >>>>
>>> >>> >>>>
>>> >>> >>>>
>>> >>> >>>>
>>> >>> >>>> ------------------------------------------------------------------------------
>>> >>> >>>> Put Bad Developers to Shame
>>> >>> >>>> Dominate Development with Jenkins Continuous Integration
>>> >>> >>>> Continuously Automate Build, Test & Deployment
>>> >>> >>>> Start a new project now. Try Jenkins in the cloud.
>>> >>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> >>>> _______________________________________________
>>> >>> >>>> Csound-devel mailing list
>>> >>> >>>> Csound-devel@lists.sourceforge.net
>>> >>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >>>>
>>> >>> >
>>> >>> >
>>> >>> >
>>> >>> > ------------------------------------------------------------------------------
>>> >>> > Put Bad Developers to Shame
>>> >>> > Dominate Development with Jenkins Continuous Integration
>>> >>> > Continuously Automate Build, Test & Deployment
>>> >>> > Start a new project now. Try Jenkins in the cloud.
>>> >>> > http://p.sf.net/sfu/13600_Cloudbees
>>> >>> > _______________________________________________
>>> >>> > Csound-devel mailing list
>>> >>> > Csound-devel@lists.sourceforge.net
>>> >>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>> >
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>> ------------------------------------------------------------------------------
>>> >>> Put Bad Developers to Shame
>>> >>> Dominate Development with Jenkins Continuous Integration
>>> >>> Continuously Automate Build, Test & Deployment
>>> >>> Start a new project now. Try Jenkins in the cloud.
>>> >>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> _______________________________________________
>>> >>> Csound-devel mailing list
>>> >>> Csound-devel@lists.sourceforge.net
>>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-17 11:12
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Can I ask that support be added for named instruments? Or perhaps
there exists an API function that when passed an instrument name will
return the assigned number? That would work too.

On 13 April 2014 16:38, Steven Yi  wrote:
> I think Andres was talking about having a nice function to wrap the
> pointer addition.  I'd suggest something like:
>
> void* csoundGetVariableMem(CSOUND* csound, INSDS* instance, char* varName) {
>       CS_VARIABLE* var = csoundFindVariableWithName(csound,
> instance->instr->varPool, varName);
>
>       if(var == NULL) return NULL;
>
>       return insds->lclbas + var->memBlockIndex;
> }
>
> I don't know though if the API would be more often used though with
> the calling code already having all of the var pool var's, i.e.
> reading from the instance->insds->varPool->head first. If so, the
> above could be simplified to take in the var and just remove the
> csoundFindVariableWithName.  It'd probably be best to hide the
> implementation details as it would give us flexibility to change
> things in the future.
>
> On Sun, Apr 13, 2014 at 11:27 AM, Rory Walsh  wrote:
>> It looks pretty good from here. I guess so long as one is sure to
>> clean up the breakpoints there shouldn't be any issues. I am however
>> having a problem with csoundDebugNext(). Should this trigger the
>> breakpoint callback too? I'm not getting anything?
>>
>> On 13 April 2014 16:21, Andres Cabrera  wrote:
>>> I'm thinking the debugger API could offer some facilties for common tasks
>>> like variable querying to remove that pointer uglyness.
>>>
>>> I would also like to see this in mainline Csound, but I'd like some feedback
>>> from others first as to whether the way I've done it is the best possible.
>>>
>>> Cheers,
>>> Andrés
>>>
>>>
>>> On Sun, Apr 13, 2014 at 8:15 AM, Rory Walsh  wrote:
>>>>
>>>> Found it!
>>>>
>>>> On 13 April 2014 11:46, Rory Walsh  wrote:
>>>> > Actually, I can't seem to find that? It's not a member of CSOUND?
>>>> >
>>>> > On 13 April 2014 10:54, Rory Walsh  wrote:
>>>> >> That's easy. Nice one.
>>>> >>
>>>> >> On 13 Apr 2014 09:44, "Victor Lazzarini" 
>>>> >> wrote:
>>>> >>>
>>>> >>> csound->GetKcounter( )
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
>>>> >>> ========================
>>>> >>> Dr Victor Lazzarini
>>>> >>> Senior Lecturer
>>>> >>> NUI Maynooth, Ireland
>>>> >>> victor dot lazzarini at nuim dot ie
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> On 12 Apr 2014, at 18:36, Rory Walsh  wrote:
>>>> >>>
>>>> >>> > Finally, how can one query the current k-pass, as in how many
>>>> >>> > k-cycles
>>>> >>> > have passed? I can put in a counter in my own processing thread, but
>>>> >>> > I
>>>> >>> > thought it might be simple to grab from Csound?
>>>> >>> >
>>>> >>> > On 12 April 2014 13:20, Rory Walsh  wrote:
>>>> >>> >> Hi Andres. All going good here. I just wanted to ask you something
>>>> >>> >> about the implementation. Am I right in saying that whenever
>>>> >>> >> csoundDebuggerInit() is called the CSOUND structure that is passed
>>>> >>> >> to
>>>> >>> >> it gets appended with some csdebug_data_t data? This data block is
>>>> >>> >> then zeroed and removed when one calls csoundDebuggerClean()? One
>>>> >>> >> little issue I have is that I seem to have to call
>>>> >>> >> csoundDebuggerInit() before I set my breakpoints, that is every
>>>> >>> >> time I
>>>> >>> >> set a breakpoint or call any of the debugger methods I have to call
>>>> >>> >> csoundDebuggerInit() first. Otherwise I get an assert in the
>>>> >>> >> breakpoint functions because csound->csdebug_data_t is no longer
>>>> >>> >> valid. I guess there is no harm in calling csoundDebuggerInit()
>>>> >>> >> each
>>>> >>> >> time one updates or removes a breakpoint if all it does it
>>>> >>> >> add/overwrite a data block in the underlying Csound object? I'd
>>>> >>> >> love
>>>> >>> >> to see this in the next release. It would be nice to ship a command
>>>> >>> >> line app in all packages that would work like the gdb debugger.
>>>> >>> >>
>>>> >>> >> On 11 April 2014 22:51, Rory Walsh  wrote:
>>>> >>> >>> This is really great Andres. I threw together a simple command
>>>> >>> >>> line
>>>> >>> >>> application that perhaps you could add to the test suite? I just
>>>> >>> >>> robbed what I could understand from yours and slotted it into as
>>>> >>> >>> basic
>>>> >>> >>> an example as I could think off.
>>>> >>> >>>
>>>> >>> >>> Usage:
>>>> >>> >>>
>>>> >>> >>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>>>> >>> >>>
>>>> >>> >>> Once the breakpoint at the given k-cycle is hit the debugger will
>>>> >>> >>> print the values of each of the variables in the chosen instrument
>>>> >>> >>> ala
>>>> >>> >>>
>>>> >>> >>> ==============================================
>>>> >>> >>> Breakpoint at instr 1
>>>> >>> >>> Number of k-cycles into performance: 100
>>>> >>> >>> ------------------------------------------------------
>>>> >>> >>> VarName:Schannel    value = hello         varType[S]
>>>> >>> >>> VarName:k1    value = 0.580499     varType[k]
>>>> >>> >>> VarName:aout    value = 0.0823895     varType[a]
>>>> >>> >>> VarName:ksmps     varType[r]
>>>> >>> >>>
>>>> >>> >>> I have to say hats off. This is very clever. I can't wait to add
>>>> >>> >>> something like this to Cabbage.
>>>> >>> >>>
>>>> >>> >>>
>>>> >>> >>> On 11 April 2014 22:08, Andres Cabrera 
>>>> >>> >>> wrote:
>>>> >>> >>>> Hi,
>>>> >>> >>>>
>>>> >>> >>>> Good to hear you've got it going. The only performance penalty if
>>>> >>> >>>> you
>>>> >>> >>>> don't
>>>> >>> >>>> call csoundDebuggerInit is that kperf is a function pointer
>>>> >>> >>>> rather
>>>> >>> >>>> than a
>>>> >>> >>>> function. If you have called csoundDebuggerInit, then you will be
>>>> >>> >>>> running a
>>>> >>> >>>> slightly heavier kperf_debug function, which needs to check
>>>> >>> >>>> whether
>>>> >>> >>>> there
>>>> >>> >>>> are new debug commands (like break, continue, or new
>>>> >>> >>>> breakpoints),
>>>> >>> >>>> and which
>>>> >>> >>>> needs to check on every new instrument in the chain whether it
>>>> >>> >>>> matches one
>>>> >>> >>>> of the existing breakpoints. It's not too much, since it's done
>>>> >>> >>>> at
>>>> >>> >>>> control
>>>> >>> >>>> rate, but there is a penalty. Performance during debugging will
>>>> >>> >>>> also
>>>> >>> >>>> get a
>>>> >>> >>>> little worse once line breakpoints are implemented because there
>>>> >>> >>>> will
>>>> >>> >>>> have
>>>> >>> >>>> to be a check for every ugen called within an instrument. But
>>>> >>> >>>> still I
>>>> >>> >>>> think
>>>> >>> >>>> the difference in performance between debug and no debug will not
>>>> >>> >>>> be
>>>> >>> >>>> as
>>>> >>> >>>> large as it is for C.
>>>> >>> >>>>
>>>> >>> >>>> Cheers,
>>>> >>> >>>> Andrés
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh 
>>>> >>> >>>> wrote:
>>>> >>> >>>>>
>>>> >>> >>>>> Sorry for the noise! I'm properly checked out now and enjoying
>>>> >>> >>>>> the
>>>> >>> >>>>> ride! This is great. Are there any performance costs if no
>>>> >>> >>>>> breakpoint
>>>> >>> >>>>> is set?
>>>> >>> >>>>>
>>>> >>> >>>>> On 11 April 2014 09:05, Rory Walsh  wrote:
>>>> >>> >>>>>> I assume that since I am getting no build or linker errors that
>>>> >>> >>>>>> there
>>>> >>> >>>>>> is something amiss in my code?
>>>> >>> >>>>>>
>>>> >>> >>>>>> On 11 April 2014 01:51, Rory Walsh  wrote:
>>>> >>> >>>>>>> No. None at all?
>>>> >>> >>>>>>>
>>>> >>> >>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera" 
>>>> >>> >>>>>>> wrote:
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>> Are you getting build errors?
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>> Cheers,
>>>> >>> >>>>>>>> Andrés
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>>> >>> >>>>>>>> 
>>>> >>> >>>>>>>> wrote:
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>> Did you checkout the csdebugger branch for csound and run
>>>> >>> >>>>>>>>> cmake
>>>> >>> >>>>>>>>> with
>>>> >>> >>>>>>>>> -DBUILD_DEBUGGER=1?
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>> Cheers,
>>>> >>> >>>>>>>>> Andrés
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh
>>>> >>> >>>>>>>>> 
>>>> >>> >>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera
>>>> >>> >>>>>>>>>> 
>>>> >>> >>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>> easier to do:
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh
>>>> >>> >>>>>>>>>>> 
>>>> >>> >>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> I'm probably adding the wrong lines to cmakelists.txt?
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> Is that right?
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera
>>>> >>> >>>>>>>>>>>> 
>>>> >>> >>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>> Yes it would :)
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>> 
>>>> >>> >>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>> It would help if I built with the debugger enabled :)
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh 
>>>> >>> >>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs and
>>>> >>> >>>>>>>>>>>>>>> scores,
>>>> >>> >>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>> this
>>>> >>> >>>>>>>>>>>>>>> allowed? My breakpoint callback is never being hit.
>>>> >>> >>>>>>>>>>>>>>> What
>>>> >>> >>>>>>>>>>>>>>> am
>>>> >>> >>>>>>>>>>>>>>> I
>>>> >>> >>>>>>>>>>>>>>> missing?
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr,
>>>> >>> >>>>>>>>>>>>>>> void
>>>> >>> >>>>>>>>>>>>>>> *userdata);
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>> int main(int argc, char *argv[])
>>>> >>> >>>>>>>>>>>>>>> {
>>>> >>> >>>>>>>>>>>>>>>    int break_count = 0;
>>>> >>> >>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>>> >>> >>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>>>> >>> >>>>>>>>>>>>>>>    csoundStart(csound);
>>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>>> >>> >>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb, (void
>>>> >>> >>>>>>>>>>>>>>> *)
>>>> >>> >>>>>>>>>>>>>>> &break_count);
>>>> >>> >>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>>> >>> >>>>>>>>>>>>>>>    csoundDestroy(csound);
>>>> >>> >>>>>>>>>>>>>>> }
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>> //this never gets called.
>>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr,
>>>> >>> >>>>>>>>>>>>>>> void
>>>> >>> >>>>>>>>>>>>>>> *userdata)
>>>> >>> >>>>>>>>>>>>>>> {
>>>> >>> >>>>>>>>>>>>>>>    int *count = (int *) userdata;
>>>> >>> >>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line, instr);
>>>> >>> >>>>>>>>>>>>>>>    *count = *count + 1;
>>>> >>> >>>>>>>>>>>>>>> };
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh 
>>>> >>> >>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>> That's great. Thanks.
>>>> >>> >>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>>>> >>> >>>>>>>>>>>>>>>> 
>>>> >>> >>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>>> >>> >>>>>>>>>>>>>>>>> implemented...
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>>>>>> 
>>>> >>> >>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head around
>>>> >>> >>>>>>>>>>>>>>>>>> this I
>>>> >>> >>>>>>>>>>>>>>>>>> might
>>>> >>> >>>>>>>>>>>>>>>>>> try
>>>> >>> >>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>> write a simple command line app that passes a
>>>> >>> >>>>>>>>>>>>>>>>>> breakpoint
>>>> >>> >>>>>>>>>>>>>>>>>> line
>>>> >>> >>>>>>>>>>>>>>>>>> number
>>>> >>> >>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it will
>>>> >>> >>>>>>>>>>>>>>>>>> print
>>>> >>> >>>>>>>>>>>>>>>>>> out
>>>> >>> >>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>> values
>>>> >>> >>>>>>>>>>>>>>>>>> of
>>>> >>> >>>>>>>>>>>>>>>>>> each variable in that instrument. That would be a
>>>> >>> >>>>>>>>>>>>>>>>>> start.
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>> 
>>>> >>> >>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>> Not exactly.
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> the function:
>>>> >>> >>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active
>>>> >>> >>>>>>>>>>>>>>>>>>> instrument
>>>> >>> >>>>>>>>>>>>>>>>>>> (where
>>>> >>> >>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>> debugger
>>>> >>> >>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>>>> >>> >>>>>>>>>>>>>>>>>>> information
>>>> >>> >>>>>>>>>>>>>>>>>>> about
>>>> >>> >>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>> instrument instance (variables and time counters,
>>>> >>> >>>>>>>>>>>>>>>>>>> p-fields,
>>>> >>> >>>>>>>>>>>>>>>>>>> etc.)
>>>> >>> >>>>>>>>>>>>>>>>>>> from
>>>> >>> >>>>>>>>>>>>>>>>>>> it.
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> The callback function is only called if a
>>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> reached,
>>>> >>> >>>>>>>>>>>>>>>>>>> which
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> checked inside csound's kperf function. There is a
>>>> >>> >>>>>>>>>>>>>>>>>>> linked
>>>> >>> >>>>>>>>>>>>>>>>>>> list
>>>> >>> >>>>>>>>>>>>>>>>>>> of
>>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a thread-safe
>>>> >>> >>>>>>>>>>>>>>>>>>> way),
>>>> >>> >>>>>>>>>>>>>>>>>>> which
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> traversed
>>>> >>> >>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>> check if the current instrument matches a
>>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint.
>>>> >>> >>>>>>>>>>>>>>>>>>> For
>>>> >>> >>>>>>>>>>>>>>>>>>> line
>>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints,
>>>> >>> >>>>>>>>>>>>>>>>>>> what will need to happen is that for every opcode
>>>> >>> >>>>>>>>>>>>>>>>>>> that
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> executed,
>>>> >>> >>>>>>>>>>>>>>>>>>> it
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint line.
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>>>>>>>> 
>>>> >>> >>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>> So you grab the values for all the variables in a
>>>> >>> >>>>>>>>>>>>>>>>>>>> particular
>>>> >>> >>>>>>>>>>>>>>>>>>>> line
>>>> >>> >>>>>>>>>>>>>>>>>>>> each
>>>> >>> >>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I reading
>>>> >>> >>>>>>>>>>>>>>>>>>>> that
>>>> >>> >>>>>>>>>>>>>>>>>>>> right?
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>>>> 
>>>> >>> >>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Hi,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> void CsoundEngine::breakpointCallback(CSOUND
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *csound,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> int
>>>> >>> >>>>>>>>>>>>>>>>>>>>> line,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> double
>>>> >>> >>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>>>> >>> >>>>>>>>>>>>>>>>>>>>> {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " << line <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> instr;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *insds =
>>>> >>> >>>>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *) udata;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp =
>>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->instr->varPool->head;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (vp) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            if (strcmp(vp->varType->varTypeName,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> "i") ==
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 0
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    ||
>>>> >>> >>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> "k")
>>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas
>>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else
>>>> >>> >>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> "S")
>>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>>>> >>> >>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(varmem);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else if
>>>> >>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> "a")
>>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 2)<<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas
>>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->varType->varTypeName;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>>>> >>> >>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>>>> >>> >>>>>>>>>>>>>>>>>>>>> }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause button
>>>> >>> >>>>>>>>>>>>>>>>>>>>> and
>>>> >>> >>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>> debugger
>>>> >>> >>>>>>>>>>>>>>>>>>>>> will
>>>> >>> >>>>>>>>>>>>>>>>>>>>> stop
>>>> >>> >>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is no
>>>> >>> >>>>>>>>>>>>>>>>>>>>> breakpoint
>>>> >>> >>>>>>>>>>>>>>>>>>>>> there.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 
>>>> >>> >>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value of a
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> variable
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> once
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access that
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> information
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> from
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger interface
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> in
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> CsounsQT
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> looks
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to implement
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> anything as
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> professional
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being able to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> stop
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> and
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> query
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> variables
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your screen-shot
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> seems to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> indicate
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> so?
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> 
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> CSOUND
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> structure, it
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> can
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> get
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> 
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> something
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> like:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr 1\nasig
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0   1
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 440");
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (void
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> *)
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1.1,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 0);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> callback
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> called.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> implemented
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> debugger
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active), but I
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> also
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> want to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> add
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> line
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm just
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> looking
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> through
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> code
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of setting
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> this
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> up?
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> The
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> stuff
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> confusing
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> me.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> 
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> finally
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> getting
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> useful
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> testing
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the csdebugger
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> please
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need to add
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of the API
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> here:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end within
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> which
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are part of
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> API,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> think
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as they are
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> also
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> compile
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> option.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat invasive,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> make
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND struct
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> switched
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a callback
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> has
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> been
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> registered
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> with csoundSetBreakpointCallback(CSOUND
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> called,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> providing
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> empty
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> audio
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the time
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> counters
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> in
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> continue
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing continues
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> where
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> left
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> off.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs, but
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> now
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> working on
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> my
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> simple
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions are
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> very
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>> _______________________________________________
>>>> >>> >>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>
>>>> >>> >>>>>
>>>> >>> >>>>>
>>>> >>> >>>>>
>>>> >>> >>>>>
>>>> >>> >>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>> Put Bad Developers to Shame
>>>> >>> >>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>> _______________________________________________
>>>> >>> >>>>> Csound-devel mailing list
>>>> >>> >>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>> ------------------------------------------------------------------------------
>>>> >>> >>>> Put Bad Developers to Shame
>>>> >>> >>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>> _______________________________________________
>>>> >>> >>>> Csound-devel mailing list
>>>> >>> >>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>
>>>> >>> >
>>>> >>> >
>>>> >>> >
>>>> >>> > ------------------------------------------------------------------------------
>>>> >>> > Put Bad Developers to Shame
>>>> >>> > Dominate Development with Jenkins Continuous Integration
>>>> >>> > Continuously Automate Build, Test & Deployment
>>>> >>> > Start a new project now. Try Jenkins in the cloud.
>>>> >>> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> > _______________________________________________
>>>> >>> > Csound-devel mailing list
>>>> >>> > Csound-devel@lists.sourceforge.net
>>>> >>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> ------------------------------------------------------------------------------
>>>> >>> Put Bad Developers to Shame
>>>> >>> Dominate Development with Jenkins Continuous Integration
>>>> >>> Continuously Automate Build, Test & Deployment
>>>> >>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> _______________________________________________
>>>> >>> Csound-devel mailing list
>>>> >>> Csound-devel@lists.sourceforge.net
>>>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Put Bad Developers to Shame
>>>> Dominate Development with Jenkins Continuous Integration
>>>> Continuously Automate Build, Test & Deployment
>>>> Start a new project now. Try Jenkins in the cloud.
>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> _______________________________________________
>>>> Csound-devel mailing list
>>>> Csound-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/NeoTech
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-17 19:48
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
Hi Rory,

I've just added the little application you posted to the csound sources (csdebugger branch), so that it can be built and distributed with Csound, and to allow people to debug from the command line. Hopefully we'll get more of the core developers commenting now :)

I don't know if there's an API call for getting instrument numbers from names, is there?

Cheers,
Andrés


On Thu, Apr 17, 2014 at 3:12 AM, Rory Walsh <rorywalsh@ear.ie> wrote:
Can I ask that support be added for named instruments? Or perhaps
there exists an API function that when passed an instrument name will
return the assigned number? That would work too.

On 13 April 2014 16:38, Steven Yi <stevenyi@gmail.com> wrote:
> I think Andres was talking about having a nice function to wrap the
> pointer addition.  I'd suggest something like:
>
> void* csoundGetVariableMem(CSOUND* csound, INSDS* instance, char* varName) {
>       CS_VARIABLE* var = csoundFindVariableWithName(csound,
> instance->instr->varPool, varName);
>
>       if(var == NULL) return NULL;
>
>       return insds->lclbas + var->memBlockIndex;
> }
>
> I don't know though if the API would be more often used though with
> the calling code already having all of the var pool var's, i.e.
> reading from the instance->insds->varPool->head first. If so, the
> above could be simplified to take in the var and just remove the
> csoundFindVariableWithName.  It'd probably be best to hide the
> implementation details as it would give us flexibility to change
> things in the future.
>
> On Sun, Apr 13, 2014 at 11:27 AM, Rory Walsh <rorywalsh@ear.ie> wrote:
>> It looks pretty good from here. I guess so long as one is sure to
>> clean up the breakpoints there shouldn't be any issues. I am however
>> having a problem with csoundDebugNext(). Should this trigger the
>> breakpoint callback too? I'm not getting anything?
>>
>> On 13 April 2014 16:21, Andres Cabrera <mantaraya36@gmail.com> wrote:
>>> I'm thinking the debugger API could offer some facilties for common tasks
>>> like variable querying to remove that pointer uglyness.
>>>
>>> I would also like to see this in mainline Csound, but I'd like some feedback
>>> from others first as to whether the way I've done it is the best possible.
>>>
>>> Cheers,
>>> Andrés
>>>
>>>
>>> On Sun, Apr 13, 2014 at 8:15 AM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>
>>>> Found it!
>>>>
>>>> On 13 April 2014 11:46, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> > Actually, I can't seem to find that? It's not a member of CSOUND?
>>>> >
>>>> > On 13 April 2014 10:54, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >> That's easy. Nice one.
>>>> >>
>>>> >> On 13 Apr 2014 09:44, "Victor Lazzarini" <Victor.Lazzarini@nuim.ie>
>>>> >> wrote:
>>>> >>>
>>>> >>> csound->GetKcounter( )
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
>>>> >>> ========================
>>>> >>> Dr Victor Lazzarini
>>>> >>> Senior Lecturer
>>>> >>> NUI Maynooth, Ireland
>>>> >>> victor dot lazzarini at nuim dot ie
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> On 12 Apr 2014, at 18:36, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >>>
>>>> >>> > Finally, how can one query the current k-pass, as in how many
>>>> >>> > k-cycles
>>>> >>> > have passed? I can put in a counter in my own processing thread, but
>>>> >>> > I
>>>> >>> > thought it might be simple to grab from Csound?
>>>> >>> >
>>>> >>> > On 12 April 2014 13:20, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >>> >> Hi Andres. All going good here. I just wanted to ask you something
>>>> >>> >> about the implementation. Am I right in saying that whenever
>>>> >>> >> csoundDebuggerInit() is called the CSOUND structure that is passed
>>>> >>> >> to
>>>> >>> >> it gets appended with some csdebug_data_t data? This data block is
>>>> >>> >> then zeroed and removed when one calls csoundDebuggerClean()? One
>>>> >>> >> little issue I have is that I seem to have to call
>>>> >>> >> csoundDebuggerInit() before I set my breakpoints, that is every
>>>> >>> >> time I
>>>> >>> >> set a breakpoint or call any of the debugger methods I have to call
>>>> >>> >> csoundDebuggerInit() first. Otherwise I get an assert in the
>>>> >>> >> breakpoint functions because csound->csdebug_data_t is no longer
>>>> >>> >> valid. I guess there is no harm in calling csoundDebuggerInit()
>>>> >>> >> each
>>>> >>> >> time one updates or removes a breakpoint if all it does it
>>>> >>> >> add/overwrite a data block in the underlying Csound object? I'd
>>>> >>> >> love
>>>> >>> >> to see this in the next release. It would be nice to ship a command
>>>> >>> >> line app in all packages that would work like the gdb debugger.
>>>> >>> >>
>>>> >>> >> On 11 April 2014 22:51, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >>> >>> This is really great Andres. I threw together a simple command
>>>> >>> >>> line
>>>> >>> >>> application that perhaps you could add to the test suite? I just
>>>> >>> >>> robbed what I could understand from yours and slotted it into as
>>>> >>> >>> basic
>>>> >>> >>> an example as I could think off.
>>>> >>> >>>
>>>> >>> >>> Usage:
>>>> >>> >>>
>>>> >>> >>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>>>> >>> >>>
>>>> >>> >>> Once the breakpoint at the given k-cycle is hit the debugger will
>>>> >>> >>> print the values of each of the variables in the chosen instrument
>>>> >>> >>> ala
>>>> >>> >>>
>>>> >>> >>> ==============================================
>>>> >>> >>> Breakpoint at instr 1
>>>> >>> >>> Number of k-cycles into performance: 100
>>>> >>> >>> ------------------------------------------------------
>>>> >>> >>> VarName:Schannel    value = hello         varType[S]
>>>> >>> >>> VarName:k1    value = 0.580499     varType[k]
>>>> >>> >>> VarName:aout    value = 0.0823895     varType[a]
>>>> >>> >>> VarName:ksmps     varType[r]
>>>> >>> >>>
>>>> >>> >>> I have to say hats off. This is very clever. I can't wait to add
>>>> >>> >>> something like this to Cabbage.
>>>> >>> >>>
>>>> >>> >>>
>>>> >>> >>> On 11 April 2014 22:08, Andres Cabrera <mantaraya36@gmail.com>
>>>> >>> >>> wrote:
>>>> >>> >>>> Hi,
>>>> >>> >>>>
>>>> >>> >>>> Good to hear you've got it going. The only performance penalty if
>>>> >>> >>>> you
>>>> >>> >>>> don't
>>>> >>> >>>> call csoundDebuggerInit is that kperf is a function pointer
>>>> >>> >>>> rather
>>>> >>> >>>> than a
>>>> >>> >>>> function. If you have called csoundDebuggerInit, then you will be
>>>> >>> >>>> running a
>>>> >>> >>>> slightly heavier kperf_debug function, which needs to check
>>>> >>> >>>> whether
>>>> >>> >>>> there
>>>> >>> >>>> are new debug commands (like break, continue, or new
>>>> >>> >>>> breakpoints),
>>>> >>> >>>> and which
>>>> >>> >>>> needs to check on every new instrument in the chain whether it
>>>> >>> >>>> matches one
>>>> >>> >>>> of the existing breakpoints. It's not too much, since it's done
>>>> >>> >>>> at
>>>> >>> >>>> control
>>>> >>> >>>> rate, but there is a penalty. Performance during debugging will
>>>> >>> >>>> also
>>>> >>> >>>> get a
>>>> >>> >>>> little worse once line breakpoints are implemented because there
>>>> >>> >>>> will
>>>> >>> >>>> have
>>>> >>> >>>> to be a check for every ugen called within an instrument. But
>>>> >>> >>>> still I
>>>> >>> >>>> think
>>>> >>> >>>> the difference in performance between debug and no debug will not
>>>> >>> >>>> be
>>>> >>> >>>> as
>>>> >>> >>>> large as it is for C.
>>>> >>> >>>>
>>>> >>> >>>> Cheers,
>>>> >>> >>>> Andrés
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh <rorywalsh@ear.ie>
>>>> >>> >>>> wrote:
>>>> >>> >>>>>
>>>> >>> >>>>> Sorry for the noise! I'm properly checked out now and enjoying
>>>> >>> >>>>> the
>>>> >>> >>>>> ride! This is great. Are there any performance costs if no
>>>> >>> >>>>> breakpoint
>>>> >>> >>>>> is set?
>>>> >>> >>>>>
>>>> >>> >>>>> On 11 April 2014 09:05, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >>> >>>>>> I assume that since I am getting no build or linker errors that
>>>> >>> >>>>>> there
>>>> >>> >>>>>> is something amiss in my code?
>>>> >>> >>>>>>
>>>> >>> >>>>>> On 11 April 2014 01:51, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >>> >>>>>>> No. None at all?
>>>> >>> >>>>>>>
>>>> >>> >>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera" <mantaraya36@gmail.com>
>>>> >>> >>>>>>> wrote:
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>> Are you getting build errors?
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>> Cheers,
>>>> >>> >>>>>>>> Andrés
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>>> >>> >>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>> wrote:
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>> Did you checkout the csdebugger branch for csound and run
>>>> >>> >>>>>>>>> cmake
>>>> >>> >>>>>>>>> with
>>>> >>> >>>>>>>>> -DBUILD_DEBUGGER=1?
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>> Cheers,
>>>> >>> >>>>>>>>> Andrés
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh
>>>> >>> >>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera
>>>> >>> >>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>> easier to do:
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh
>>>> >>> >>>>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> I'm probably adding the wrong lines to cmakelists.txt?
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> Is that right?
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera
>>>> >>> >>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>> Yes it would :)
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>> It would help if I built with the debugger enabled :)
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs and
>>>> >>> >>>>>>>>>>>>>>> scores,
>>>> >>> >>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>> this
>>>> >>> >>>>>>>>>>>>>>> allowed? My breakpoint callback is never being hit.
>>>> >>> >>>>>>>>>>>>>>> What
>>>> >>> >>>>>>>>>>>>>>> am
>>>> >>> >>>>>>>>>>>>>>> I
>>>> >>> >>>>>>>>>>>>>>> missing?
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr,
>>>> >>> >>>>>>>>>>>>>>> void
>>>> >>> >>>>>>>>>>>>>>> *userdata);
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>> int main(int argc, char *argv[])
>>>> >>> >>>>>>>>>>>>>>> {
>>>> >>> >>>>>>>>>>>>>>>    int break_count = 0;
>>>> >>> >>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>>> >>> >>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>>>> >>> >>>>>>>>>>>>>>>    csoundStart(csound);
>>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>>> >>> >>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb, (void
>>>> >>> >>>>>>>>>>>>>>> *)
>>>> >>> >>>>>>>>>>>>>>> &break_count);
>>>> >>> >>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>>> >>> >>>>>>>>>>>>>>>    csoundDestroy(csound);
>>>> >>> >>>>>>>>>>>>>>> }
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>> //this never gets called.
>>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr,
>>>> >>> >>>>>>>>>>>>>>> void
>>>> >>> >>>>>>>>>>>>>>> *userdata)
>>>> >>> >>>>>>>>>>>>>>> {
>>>> >>> >>>>>>>>>>>>>>>    int *count = (int *) userdata;
>>>> >>> >>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line, instr);
>>>> >>> >>>>>>>>>>>>>>>    *count = *count + 1;
>>>> >>> >>>>>>>>>>>>>>> };
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>> That's great. Thanks.
>>>> >>> >>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>>>> >>> >>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>>> >>> >>>>>>>>>>>>>>>>> implemented...
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head around
>>>> >>> >>>>>>>>>>>>>>>>>> this I
>>>> >>> >>>>>>>>>>>>>>>>>> might
>>>> >>> >>>>>>>>>>>>>>>>>> try
>>>> >>> >>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>> write a simple command line app that passes a
>>>> >>> >>>>>>>>>>>>>>>>>> breakpoint
>>>> >>> >>>>>>>>>>>>>>>>>> line
>>>> >>> >>>>>>>>>>>>>>>>>> number
>>>> >>> >>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it will
>>>> >>> >>>>>>>>>>>>>>>>>> print
>>>> >>> >>>>>>>>>>>>>>>>>> out
>>>> >>> >>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>> values
>>>> >>> >>>>>>>>>>>>>>>>>> of
>>>> >>> >>>>>>>>>>>>>>>>>> each variable in that instrument. That would be a
>>>> >>> >>>>>>>>>>>>>>>>>> start.
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>> Not exactly.
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> the function:
>>>> >>> >>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active
>>>> >>> >>>>>>>>>>>>>>>>>>> instrument
>>>> >>> >>>>>>>>>>>>>>>>>>> (where
>>>> >>> >>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>> debugger
>>>> >>> >>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>>>> >>> >>>>>>>>>>>>>>>>>>> information
>>>> >>> >>>>>>>>>>>>>>>>>>> about
>>>> >>> >>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>> instrument instance (variables and time counters,
>>>> >>> >>>>>>>>>>>>>>>>>>> p-fields,
>>>> >>> >>>>>>>>>>>>>>>>>>> etc.)
>>>> >>> >>>>>>>>>>>>>>>>>>> from
>>>> >>> >>>>>>>>>>>>>>>>>>> it.
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> The callback function is only called if a
>>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> reached,
>>>> >>> >>>>>>>>>>>>>>>>>>> which
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> checked inside csound's kperf function. There is a
>>>> >>> >>>>>>>>>>>>>>>>>>> linked
>>>> >>> >>>>>>>>>>>>>>>>>>> list
>>>> >>> >>>>>>>>>>>>>>>>>>> of
>>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a thread-safe
>>>> >>> >>>>>>>>>>>>>>>>>>> way),
>>>> >>> >>>>>>>>>>>>>>>>>>> which
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> traversed
>>>> >>> >>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>> check if the current instrument matches a
>>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint.
>>>> >>> >>>>>>>>>>>>>>>>>>> For
>>>> >>> >>>>>>>>>>>>>>>>>>> line
>>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints,
>>>> >>> >>>>>>>>>>>>>>>>>>> what will need to happen is that for every opcode
>>>> >>> >>>>>>>>>>>>>>>>>>> that
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> executed,
>>>> >>> >>>>>>>>>>>>>>>>>>> it
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint line.
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>> So you grab the values for all the variables in a
>>>> >>> >>>>>>>>>>>>>>>>>>>> particular
>>>> >>> >>>>>>>>>>>>>>>>>>>> line
>>>> >>> >>>>>>>>>>>>>>>>>>>> each
>>>> >>> >>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I reading
>>>> >>> >>>>>>>>>>>>>>>>>>>> that
>>>> >>> >>>>>>>>>>>>>>>>>>>> right?
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Hi,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> void CsoundEngine::breakpointCallback(CSOUND
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *csound,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> int
>>>> >>> >>>>>>>>>>>>>>>>>>>>> line,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> double
>>>> >>> >>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>>>> >>> >>>>>>>>>>>>>>>>>>>>> {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " << line <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> instr;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *insds =
>>>> >>> >>>>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *) udata;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp =
>>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->instr->varPool->head;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (vp) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            if (strcmp(vp->varType->varTypeName,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> "i") ==
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 0
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    ||
>>>> >>> >>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> "k")
>>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas
>>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else
>>>> >>> >>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> "S")
>>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>>>> >>> >>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(varmem);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else if
>>>> >>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> "a")
>>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 2)<<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas
>>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->varType->varTypeName;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>>>> >>> >>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>>>> >>> >>>>>>>>>>>>>>>>>>>>> }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause button
>>>> >>> >>>>>>>>>>>>>>>>>>>>> and
>>>> >>> >>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>> debugger
>>>> >>> >>>>>>>>>>>>>>>>>>>>> will
>>>> >>> >>>>>>>>>>>>>>>>>>>>> stop
>>>> >>> >>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is no
>>>> >>> >>>>>>>>>>>>>>>>>>>>> breakpoint
>>>> >>> >>>>>>>>>>>>>>>>>>>>> there.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value of a
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> variable
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> once
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access that
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> information
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> from
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger interface
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> in
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> CsounsQT
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> looks
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to implement
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> anything as
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> professional
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being able to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> stop
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> and
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> query
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> variables
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your screen-shot
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> seems to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> indicate
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> so?
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> CSOUND
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> structure, it
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> can
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> get
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> something
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> like:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr 1\nasig
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0   1
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 440");
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (void
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> *)
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1.1,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 0);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> callback
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> called.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> implemented
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> debugger
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active), but I
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> also
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> want to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> add
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> line
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm just
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> looking
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> through
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> code
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of setting
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> this
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> up?
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> The
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> stuff
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> confusing
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> me.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> finally
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> getting
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> useful
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> testing
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the csdebugger
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> please
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need to add
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of the API
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> here:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end within
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> which
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are part of
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> API,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> think
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as they are
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> also
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> compile
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> option.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat invasive,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> make
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND struct
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> switched
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a callback
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> has
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> been
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> registered
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> with csoundSetBreakpointCallback(CSOUND
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> called,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> providing
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> empty
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> audio
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the time
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> counters
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> in
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> continue
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing continues
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> where
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> left
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> off.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs, but
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> now
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> working on
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> my
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> simple
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions are
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> very
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>> _______________________________________________
>>>> >>> >>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>
>>>> >>> >>>>>
>>>> >>> >>>>>
>>>> >>> >>>>>
>>>> >>> >>>>>
>>>> >>> >>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>> Put Bad Developers to Shame
>>>> >>> >>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>> _______________________________________________
>>>> >>> >>>>> Csound-devel mailing list
>>>> >>> >>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>> ------------------------------------------------------------------------------
>>>> >>> >>>> Put Bad Developers to Shame
>>>> >>> >>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>> _______________________________________________
>>>> >>> >>>> Csound-devel mailing list
>>>> >>> >>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>
>>>> >>> >
>>>> >>> >
>>>> >>> >
>>>> >>> > ------------------------------------------------------------------------------
>>>> >>> > Put Bad Developers to Shame
>>>> >>> > Dominate Development with Jenkins Continuous Integration
>>>> >>> > Continuously Automate Build, Test & Deployment
>>>> >>> > Start a new project now. Try Jenkins in the cloud.
>>>> >>> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> > _______________________________________________
>>>> >>> > Csound-devel mailing list
>>>> >>> > Csound-devel@lists.sourceforge.net
>>>> >>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> ------------------------------------------------------------------------------
>>>> >>> Put Bad Developers to Shame
>>>> >>> Dominate Development with Jenkins Continuous Integration
>>>> >>> Continuously Automate Build, Test & Deployment
>>>> >>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> _______________________________________________
>>>> >>> Csound-devel mailing list
>>>> >>> Csound-devel@lists.sourceforge.net
>>>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Put Bad Developers to Shame
>>>> Dominate Development with Jenkins Continuous Integration
>>>> Continuously Automate Build, Test & Deployment
>>>> Start a new project now. Try Jenkins in the cloud.
>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> _______________________________________________
>>>> Csound-devel mailing list
>>>> Csound-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/NeoTech
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-17 19:49
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
Also, since a release is coming up, can the csdebugger branch be considered for inclusion?

Cheers,
Andrés


On Thu, Apr 17, 2014 at 11:48 AM, Andres Cabrera <mantaraya36@gmail.com> wrote:
Hi Rory,

I've just added the little application you posted to the csound sources (csdebugger branch), so that it can be built and distributed with Csound, and to allow people to debug from the command line. Hopefully we'll get more of the core developers commenting now :)

I don't know if there's an API call for getting instrument numbers from names, is there?

Cheers,
Andrés


On Thu, Apr 17, 2014 at 3:12 AM, Rory Walsh <rorywalsh@ear.ie> wrote:
Can I ask that support be added for named instruments? Or perhaps
there exists an API function that when passed an instrument name will
return the assigned number? That would work too.

On 13 April 2014 16:38, Steven Yi <stevenyi@gmail.com> wrote:
> I think Andres was talking about having a nice function to wrap the
> pointer addition.  I'd suggest something like:
>
> void* csoundGetVariableMem(CSOUND* csound, INSDS* instance, char* varName) {
>       CS_VARIABLE* var = csoundFindVariableWithName(csound,
> instance->instr->varPool, varName);
>
>       if(var == NULL) return NULL;
>
>       return insds->lclbas + var->memBlockIndex;
> }
>
> I don't know though if the API would be more often used though with
> the calling code already having all of the var pool var's, i.e.
> reading from the instance->insds->varPool->head first. If so, the
> above could be simplified to take in the var and just remove the
> csoundFindVariableWithName.  It'd probably be best to hide the
> implementation details as it would give us flexibility to change
> things in the future.
>
> On Sun, Apr 13, 2014 at 11:27 AM, Rory Walsh <rorywalsh@ear.ie> wrote:
>> It looks pretty good from here. I guess so long as one is sure to
>> clean up the breakpoints there shouldn't be any issues. I am however
>> having a problem with csoundDebugNext(). Should this trigger the
>> breakpoint callback too? I'm not getting anything?
>>
>> On 13 April 2014 16:21, Andres Cabrera <mantaraya36@gmail.com> wrote:
>>> I'm thinking the debugger API could offer some facilties for common tasks
>>> like variable querying to remove that pointer uglyness.
>>>
>>> I would also like to see this in mainline Csound, but I'd like some feedback
>>> from others first as to whether the way I've done it is the best possible.
>>>
>>> Cheers,
>>> Andrés
>>>
>>>
>>> On Sun, Apr 13, 2014 at 8:15 AM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>>
>>>> Found it!
>>>>
>>>> On 13 April 2014 11:46, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> > Actually, I can't seem to find that? It's not a member of CSOUND?
>>>> >
>>>> > On 13 April 2014 10:54, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >> That's easy. Nice one.
>>>> >>
>>>> >> On 13 Apr 2014 09:44, "Victor Lazzarini" <Victor.Lazzarini@nuim.ie>
>>>> >> wrote:
>>>> >>>
>>>> >>> csound->GetKcounter( )
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
>>>> >>> ========================
>>>> >>> Dr Victor Lazzarini
>>>> >>> Senior Lecturer
>>>> >>> NUI Maynooth, Ireland
>>>> >>> victor dot lazzarini at nuim dot ie
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> On 12 Apr 2014, at 18:36, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >>>
>>>> >>> > Finally, how can one query the current k-pass, as in how many
>>>> >>> > k-cycles
>>>> >>> > have passed? I can put in a counter in my own processing thread, but
>>>> >>> > I
>>>> >>> > thought it might be simple to grab from Csound?
>>>> >>> >
>>>> >>> > On 12 April 2014 13:20, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >>> >> Hi Andres. All going good here. I just wanted to ask you something
>>>> >>> >> about the implementation. Am I right in saying that whenever
>>>> >>> >> csoundDebuggerInit() is called the CSOUND structure that is passed
>>>> >>> >> to
>>>> >>> >> it gets appended with some csdebug_data_t data? This data block is
>>>> >>> >> then zeroed and removed when one calls csoundDebuggerClean()? One
>>>> >>> >> little issue I have is that I seem to have to call
>>>> >>> >> csoundDebuggerInit() before I set my breakpoints, that is every
>>>> >>> >> time I
>>>> >>> >> set a breakpoint or call any of the debugger methods I have to call
>>>> >>> >> csoundDebuggerInit() first. Otherwise I get an assert in the
>>>> >>> >> breakpoint functions because csound->csdebug_data_t is no longer
>>>> >>> >> valid. I guess there is no harm in calling csoundDebuggerInit()
>>>> >>> >> each
>>>> >>> >> time one updates or removes a breakpoint if all it does it
>>>> >>> >> add/overwrite a data block in the underlying Csound object? I'd
>>>> >>> >> love
>>>> >>> >> to see this in the next release. It would be nice to ship a command
>>>> >>> >> line app in all packages that would work like the gdb debugger.
>>>> >>> >>
>>>> >>> >> On 11 April 2014 22:51, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >>> >>> This is really great Andres. I threw together a simple command
>>>> >>> >>> line
>>>> >>> >>> application that perhaps you could add to the test suite? I just
>>>> >>> >>> robbed what I could understand from yours and slotted it into as
>>>> >>> >>> basic
>>>> >>> >>> an example as I could think off.
>>>> >>> >>>
>>>> >>> >>> Usage:
>>>> >>> >>>
>>>> >>> >>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>>>> >>> >>>
>>>> >>> >>> Once the breakpoint at the given k-cycle is hit the debugger will
>>>> >>> >>> print the values of each of the variables in the chosen instrument
>>>> >>> >>> ala
>>>> >>> >>>
>>>> >>> >>> ==============================================
>>>> >>> >>> Breakpoint at instr 1
>>>> >>> >>> Number of k-cycles into performance: 100
>>>> >>> >>> ------------------------------------------------------
>>>> >>> >>> VarName:Schannel    value = hello         varType[S]
>>>> >>> >>> VarName:k1    value = 0.580499     varType[k]
>>>> >>> >>> VarName:aout    value = 0.0823895     varType[a]
>>>> >>> >>> VarName:ksmps     varType[r]
>>>> >>> >>>
>>>> >>> >>> I have to say hats off. This is very clever. I can't wait to add
>>>> >>> >>> something like this to Cabbage.
>>>> >>> >>>
>>>> >>> >>>
>>>> >>> >>> On 11 April 2014 22:08, Andres Cabrera <mantaraya36@gmail.com>
>>>> >>> >>> wrote:
>>>> >>> >>>> Hi,
>>>> >>> >>>>
>>>> >>> >>>> Good to hear you've got it going. The only performance penalty if
>>>> >>> >>>> you
>>>> >>> >>>> don't
>>>> >>> >>>> call csoundDebuggerInit is that kperf is a function pointer
>>>> >>> >>>> rather
>>>> >>> >>>> than a
>>>> >>> >>>> function. If you have called csoundDebuggerInit, then you will be
>>>> >>> >>>> running a
>>>> >>> >>>> slightly heavier kperf_debug function, which needs to check
>>>> >>> >>>> whether
>>>> >>> >>>> there
>>>> >>> >>>> are new debug commands (like break, continue, or new
>>>> >>> >>>> breakpoints),
>>>> >>> >>>> and which
>>>> >>> >>>> needs to check on every new instrument in the chain whether it
>>>> >>> >>>> matches one
>>>> >>> >>>> of the existing breakpoints. It's not too much, since it's done
>>>> >>> >>>> at
>>>> >>> >>>> control
>>>> >>> >>>> rate, but there is a penalty. Performance during debugging will
>>>> >>> >>>> also
>>>> >>> >>>> get a
>>>> >>> >>>> little worse once line breakpoints are implemented because there
>>>> >>> >>>> will
>>>> >>> >>>> have
>>>> >>> >>>> to be a check for every ugen called within an instrument. But
>>>> >>> >>>> still I
>>>> >>> >>>> think
>>>> >>> >>>> the difference in performance between debug and no debug will not
>>>> >>> >>>> be
>>>> >>> >>>> as
>>>> >>> >>>> large as it is for C.
>>>> >>> >>>>
>>>> >>> >>>> Cheers,
>>>> >>> >>>> Andrés
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh <rorywalsh@ear.ie>
>>>> >>> >>>> wrote:
>>>> >>> >>>>>
>>>> >>> >>>>> Sorry for the noise! I'm properly checked out now and enjoying
>>>> >>> >>>>> the
>>>> >>> >>>>> ride! This is great. Are there any performance costs if no
>>>> >>> >>>>> breakpoint
>>>> >>> >>>>> is set?
>>>> >>> >>>>>
>>>> >>> >>>>> On 11 April 2014 09:05, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >>> >>>>>> I assume that since I am getting no build or linker errors that
>>>> >>> >>>>>> there
>>>> >>> >>>>>> is something amiss in my code?
>>>> >>> >>>>>>
>>>> >>> >>>>>> On 11 April 2014 01:51, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>> >>> >>>>>>> No. None at all?
>>>> >>> >>>>>>>
>>>> >>> >>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera" <mantaraya36@gmail.com>
>>>> >>> >>>>>>> wrote:
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>> Are you getting build errors?
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>> Cheers,
>>>> >>> >>>>>>>> Andrés
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>>> >>> >>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>> wrote:
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>> Did you checkout the csdebugger branch for csound and run
>>>> >>> >>>>>>>>> cmake
>>>> >>> >>>>>>>>> with
>>>> >>> >>>>>>>>> -DBUILD_DEBUGGER=1?
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>> Cheers,
>>>> >>> >>>>>>>>> Andrés
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh
>>>> >>> >>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera
>>>> >>> >>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>> easier to do:
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh
>>>> >>> >>>>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> I'm probably adding the wrong lines to cmakelists.txt?
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> Is that right?
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera
>>>> >>> >>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>> Yes it would :)
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>> It would help if I built with the debugger enabled :)
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs and
>>>> >>> >>>>>>>>>>>>>>> scores,
>>>> >>> >>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>> this
>>>> >>> >>>>>>>>>>>>>>> allowed? My breakpoint callback is never being hit.
>>>> >>> >>>>>>>>>>>>>>> What
>>>> >>> >>>>>>>>>>>>>>> am
>>>> >>> >>>>>>>>>>>>>>> I
>>>> >>> >>>>>>>>>>>>>>> missing?
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr,
>>>> >>> >>>>>>>>>>>>>>> void
>>>> >>> >>>>>>>>>>>>>>> *userdata);
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>> int main(int argc, char *argv[])
>>>> >>> >>>>>>>>>>>>>>> {
>>>> >>> >>>>>>>>>>>>>>>    int break_count = 0;
>>>> >>> >>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>>> >>> >>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>>>> >>> >>>>>>>>>>>>>>>    csoundStart(csound);
>>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>>> >>> >>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb, (void
>>>> >>> >>>>>>>>>>>>>>> *)
>>>> >>> >>>>>>>>>>>>>>> &break_count);
>>>> >>> >>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>>> >>> >>>>>>>>>>>>>>>    csoundDestroy(csound);
>>>> >>> >>>>>>>>>>>>>>> }
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>> //this never gets called.
>>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double instr,
>>>> >>> >>>>>>>>>>>>>>> void
>>>> >>> >>>>>>>>>>>>>>> *userdata)
>>>> >>> >>>>>>>>>>>>>>> {
>>>> >>> >>>>>>>>>>>>>>>    int *count = (int *) userdata;
>>>> >>> >>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line, instr);
>>>> >>> >>>>>>>>>>>>>>>    *count = *count + 1;
>>>> >>> >>>>>>>>>>>>>>> };
>>>> >>> >>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>> That's great. Thanks.
>>>> >>> >>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>>>> >>> >>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>>> >>> >>>>>>>>>>>>>>>>> implemented...
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head around
>>>> >>> >>>>>>>>>>>>>>>>>> this I
>>>> >>> >>>>>>>>>>>>>>>>>> might
>>>> >>> >>>>>>>>>>>>>>>>>> try
>>>> >>> >>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>> write a simple command line app that passes a
>>>> >>> >>>>>>>>>>>>>>>>>> breakpoint
>>>> >>> >>>>>>>>>>>>>>>>>> line
>>>> >>> >>>>>>>>>>>>>>>>>> number
>>>> >>> >>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it will
>>>> >>> >>>>>>>>>>>>>>>>>> print
>>>> >>> >>>>>>>>>>>>>>>>>> out
>>>> >>> >>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>> values
>>>> >>> >>>>>>>>>>>>>>>>>> of
>>>> >>> >>>>>>>>>>>>>>>>>> each variable in that instrument. That would be a
>>>> >>> >>>>>>>>>>>>>>>>>> start.
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>> Not exactly.
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> the function:
>>>> >>> >>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active
>>>> >>> >>>>>>>>>>>>>>>>>>> instrument
>>>> >>> >>>>>>>>>>>>>>>>>>> (where
>>>> >>> >>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>> debugger
>>>> >>> >>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>>>> >>> >>>>>>>>>>>>>>>>>>> information
>>>> >>> >>>>>>>>>>>>>>>>>>> about
>>>> >>> >>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>> instrument instance (variables and time counters,
>>>> >>> >>>>>>>>>>>>>>>>>>> p-fields,
>>>> >>> >>>>>>>>>>>>>>>>>>> etc.)
>>>> >>> >>>>>>>>>>>>>>>>>>> from
>>>> >>> >>>>>>>>>>>>>>>>>>> it.
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> The callback function is only called if a
>>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> reached,
>>>> >>> >>>>>>>>>>>>>>>>>>> which
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> checked inside csound's kperf function. There is a
>>>> >>> >>>>>>>>>>>>>>>>>>> linked
>>>> >>> >>>>>>>>>>>>>>>>>>> list
>>>> >>> >>>>>>>>>>>>>>>>>>> of
>>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a thread-safe
>>>> >>> >>>>>>>>>>>>>>>>>>> way),
>>>> >>> >>>>>>>>>>>>>>>>>>> which
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> traversed
>>>> >>> >>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>> check if the current instrument matches a
>>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint.
>>>> >>> >>>>>>>>>>>>>>>>>>> For
>>>> >>> >>>>>>>>>>>>>>>>>>> line
>>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints,
>>>> >>> >>>>>>>>>>>>>>>>>>> what will need to happen is that for every opcode
>>>> >>> >>>>>>>>>>>>>>>>>>> that
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> executed,
>>>> >>> >>>>>>>>>>>>>>>>>>> it
>>>> >>> >>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint line.
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>> So you grab the values for all the variables in a
>>>> >>> >>>>>>>>>>>>>>>>>>>> particular
>>>> >>> >>>>>>>>>>>>>>>>>>>> line
>>>> >>> >>>>>>>>>>>>>>>>>>>> each
>>>> >>> >>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I reading
>>>> >>> >>>>>>>>>>>>>>>>>>>> that
>>>> >>> >>>>>>>>>>>>>>>>>>>> right?
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Hi,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> void CsoundEngine::breakpointCallback(CSOUND
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *csound,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> int
>>>> >>> >>>>>>>>>>>>>>>>>>>>> line,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> double
>>>> >>> >>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>>>> >>> >>>>>>>>>>>>>>>>>>>>> {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " << line <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> instr;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *insds =
>>>> >>> >>>>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *) udata;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp =
>>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->instr->varPool->head;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (vp) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            if (strcmp(vp->varType->varTypeName,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> "i") ==
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 0
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    ||
>>>> >>> >>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> "k")
>>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas
>>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else
>>>> >>> >>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> "S")
>>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>>>> >>> >>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(varmem);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else if
>>>> >>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> "a")
>>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>>>> >>> >>>>>>>>>>>>>>>>>>>>> 2)<<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem = insds->lclbas
>>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails <<
>>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->varType->varTypeName;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>>>> >>> >>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>>>> >>> >>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>>>> >>> >>>>>>>>>>>>>>>>>>>>> }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause button
>>>> >>> >>>>>>>>>>>>>>>>>>>>> and
>>>> >>> >>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>> debugger
>>>> >>> >>>>>>>>>>>>>>>>>>>>> will
>>>> >>> >>>>>>>>>>>>>>>>>>>>> stop
>>>> >>> >>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is no
>>>> >>> >>>>>>>>>>>>>>>>>>>>> breakpoint
>>>> >>> >>>>>>>>>>>>>>>>>>>>> there.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value of a
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> variable
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> once
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access that
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> information
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> from
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger interface
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> in
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> CsounsQT
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> looks
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to implement
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> anything as
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> professional
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being able to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> stop
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> and
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> query
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> variables
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your screen-shot
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> seems to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> indicate
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> so?
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> CSOUND
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> structure, it
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> can
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> get
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> something
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> like:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr 1\nasig
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0   1
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 440");
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (void
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> *)
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1.1,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 0);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    }
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> callback
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> called.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> implemented
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> debugger
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active), but I
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> also
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> want to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> add
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> line
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory Walsh
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm just
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> looking
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> through
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> code
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of setting
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> this
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> up?
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> The
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> stuff
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> confusing
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> me.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> finally
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> getting
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> useful
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> testing
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the csdebugger
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> please
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need to add
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of the API
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> here:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end within
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> which
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are part of
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> API,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> think
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as they are
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> also
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> compile
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> option.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat invasive,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> make
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND struct
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> switched
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a callback
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> has
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> been
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> registered
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> with csoundSetBreakpointCallback(CSOUND
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> called,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> providing
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> empty
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> audio
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the time
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> counters
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> in
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> continue
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing continues
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> where
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> left
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> off.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs, but
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> now
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> working on
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> my
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> simple
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions are
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> very
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>>> >>> >>>>>>>>>>>>>>>>>>>> cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>>> >>> >>>>>>>>>>>>>> Integration
>>>> >>> >>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>>
>>>> >>> >>>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>>
>>>> >>> >>>>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>>>> _______________________________________________
>>>> >>> >>>>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>>>>> Put Bad Developers to Shame
>>>> >>> >>>>>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>>>>> _______________________________________________
>>>> >>> >>>>>>>> Csound-devel mailing list
>>>> >>> >>>>>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>>>>>
>>>> >>> >>>>>>>
>>>> >>> >>>>>
>>>> >>> >>>>>
>>>> >>> >>>>>
>>>> >>> >>>>>
>>>> >>> >>>>> ------------------------------------------------------------------------------
>>>> >>> >>>>> Put Bad Developers to Shame
>>>> >>> >>>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>>> _______________________________________________
>>>> >>> >>>>> Csound-devel mailing list
>>>> >>> >>>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>>
>>>> >>> >>>> ------------------------------------------------------------------------------
>>>> >>> >>>> Put Bad Developers to Shame
>>>> >>> >>>> Dominate Development with Jenkins Continuous Integration
>>>> >>> >>>> Continuously Automate Build, Test & Deployment
>>>> >>> >>>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> >>>> _______________________________________________
>>>> >>> >>>> Csound-devel mailing list
>>>> >>> >>>> Csound-devel@lists.sourceforge.net
>>>> >>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >>>>
>>>> >>> >
>>>> >>> >
>>>> >>> >
>>>> >>> > ------------------------------------------------------------------------------
>>>> >>> > Put Bad Developers to Shame
>>>> >>> > Dominate Development with Jenkins Continuous Integration
>>>> >>> > Continuously Automate Build, Test & Deployment
>>>> >>> > Start a new project now. Try Jenkins in the cloud.
>>>> >>> > http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> > _______________________________________________
>>>> >>> > Csound-devel mailing list
>>>> >>> > Csound-devel@lists.sourceforge.net
>>>> >>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>> >>> >
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> ------------------------------------------------------------------------------
>>>> >>> Put Bad Developers to Shame
>>>> >>> Dominate Development with Jenkins Continuous Integration
>>>> >>> Continuously Automate Build, Test & Deployment
>>>> >>> Start a new project now. Try Jenkins in the cloud.
>>>> >>> http://p.sf.net/sfu/13600_Cloudbees
>>>> >>> _______________________________________________
>>>> >>> Csound-devel mailing list
>>>> >>> Csound-devel@lists.sourceforge.net
>>>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Put Bad Developers to Shame
>>>> Dominate Development with Jenkins Continuous Integration
>>>> Continuously Automate Build, Test & Deployment
>>>> Start a new project now. Try Jenkins in the cloud.
>>>> http://p.sf.net/sfu/13600_Cloudbees
>>>> _______________________________________________
>>>> Csound-devel mailing list
>>>> Csound-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Put Bad Developers to Shame
>>> Dominate Development with Jenkins Continuous Integration
>>> Continuously Automate Build, Test & Deployment
>>> Start a new project now. Try Jenkins in the cloud.
>>> http://p.sf.net/sfu/13600_Cloudbees
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>
>> ------------------------------------------------------------------------------
>> Put Bad Developers to Shame
>> Dominate Development with Jenkins Continuous Integration
>> Continuously Automate Build, Test & Deployment
>> Start a new project now. Try Jenkins in the cloud.
>> http://p.sf.net/sfu/13600_Cloudbees
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
> ------------------------------------------------------------------------------
> Put Bad Developers to Shame
> Dominate Development with Jenkins Continuous Integration
> Continuously Automate Build, Test & Deployment
> Start a new project now. Try Jenkins in the cloud.
> http://p.sf.net/sfu/13600_Cloudbees
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/NeoTech
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel



Date2014-04-17 20:10
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Given that two frontends are now supporting it, it would be nice to have it :)

On 17 April 2014 20:49, Andres Cabrera  wrote:
> Also, since a release is coming up, can the csdebugger branch be considered
> for inclusion?
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 17, 2014 at 11:48 AM, Andres Cabrera 
> wrote:
>>
>> Hi Rory,
>>
>> I've just added the little application you posted to the csound sources
>> (csdebugger branch), so that it can be built and distributed with Csound,
>> and to allow people to debug from the command line. Hopefully we'll get more
>> of the core developers commenting now :)
>>
>> I don't know if there's an API call for getting instrument numbers from
>> names, is there?
>>
>> Cheers,
>> Andrés
>>
>>
>> On Thu, Apr 17, 2014 at 3:12 AM, Rory Walsh  wrote:
>>>
>>> Can I ask that support be added for named instruments? Or perhaps
>>> there exists an API function that when passed an instrument name will
>>> return the assigned number? That would work too.
>>>
>>> On 13 April 2014 16:38, Steven Yi  wrote:
>>> > I think Andres was talking about having a nice function to wrap the
>>> > pointer addition.  I'd suggest something like:
>>> >
>>> > void* csoundGetVariableMem(CSOUND* csound, INSDS* instance, char*
>>> > varName) {
>>> >       CS_VARIABLE* var = csoundFindVariableWithName(csound,
>>> > instance->instr->varPool, varName);
>>> >
>>> >       if(var == NULL) return NULL;
>>> >
>>> >       return insds->lclbas + var->memBlockIndex;
>>> > }
>>> >
>>> > I don't know though if the API would be more often used though with
>>> > the calling code already having all of the var pool var's, i.e.
>>> > reading from the instance->insds->varPool->head first. If so, the
>>> > above could be simplified to take in the var and just remove the
>>> > csoundFindVariableWithName.  It'd probably be best to hide the
>>> > implementation details as it would give us flexibility to change
>>> > things in the future.
>>> >
>>> > On Sun, Apr 13, 2014 at 11:27 AM, Rory Walsh  wrote:
>>> >> It looks pretty good from here. I guess so long as one is sure to
>>> >> clean up the breakpoints there shouldn't be any issues. I am however
>>> >> having a problem with csoundDebugNext(). Should this trigger the
>>> >> breakpoint callback too? I'm not getting anything?
>>> >>
>>> >> On 13 April 2014 16:21, Andres Cabrera  wrote:
>>> >>> I'm thinking the debugger API could offer some facilties for common
>>> >>> tasks
>>> >>> like variable querying to remove that pointer uglyness.
>>> >>>
>>> >>> I would also like to see this in mainline Csound, but I'd like some
>>> >>> feedback
>>> >>> from others first as to whether the way I've done it is the best
>>> >>> possible.
>>> >>>
>>> >>> Cheers,
>>> >>> Andrés
>>> >>>
>>> >>>
>>> >>> On Sun, Apr 13, 2014 at 8:15 AM, Rory Walsh  wrote:
>>> >>>>
>>> >>>> Found it!
>>> >>>>
>>> >>>> On 13 April 2014 11:46, Rory Walsh  wrote:
>>> >>>> > Actually, I can't seem to find that? It's not a member of CSOUND?
>>> >>>> >
>>> >>>> > On 13 April 2014 10:54, Rory Walsh  wrote:
>>> >>>> >> That's easy. Nice one.
>>> >>>> >>
>>> >>>> >> On 13 Apr 2014 09:44, "Victor Lazzarini"
>>> >>>> >> 
>>> >>>> >> wrote:
>>> >>>> >>>
>>> >>>> >>> csound->GetKcounter( )
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>> http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
>>> >>>> >>> ========================
>>> >>>> >>> Dr Victor Lazzarini
>>> >>>> >>> Senior Lecturer
>>> >>>> >>> NUI Maynooth, Ireland
>>> >>>> >>> victor dot lazzarini at nuim dot ie
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>> On 12 Apr 2014, at 18:36, Rory Walsh  wrote:
>>> >>>> >>>
>>> >>>> >>> > Finally, how can one query the current k-pass, as in how many
>>> >>>> >>> > k-cycles
>>> >>>> >>> > have passed? I can put in a counter in my own processing
>>> >>>> >>> > thread, but
>>> >>>> >>> > I
>>> >>>> >>> > thought it might be simple to grab from Csound?
>>> >>>> >>> >
>>> >>>> >>> > On 12 April 2014 13:20, Rory Walsh  wrote:
>>> >>>> >>> >> Hi Andres. All going good here. I just wanted to ask you
>>> >>>> >>> >> something
>>> >>>> >>> >> about the implementation. Am I right in saying that whenever
>>> >>>> >>> >> csoundDebuggerInit() is called the CSOUND structure that is
>>> >>>> >>> >> passed
>>> >>>> >>> >> to
>>> >>>> >>> >> it gets appended with some csdebug_data_t data? This data
>>> >>>> >>> >> block is
>>> >>>> >>> >> then zeroed and removed when one calls csoundDebuggerClean()?
>>> >>>> >>> >> One
>>> >>>> >>> >> little issue I have is that I seem to have to call
>>> >>>> >>> >> csoundDebuggerInit() before I set my breakpoints, that is
>>> >>>> >>> >> every
>>> >>>> >>> >> time I
>>> >>>> >>> >> set a breakpoint or call any of the debugger methods I have
>>> >>>> >>> >> to call
>>> >>>> >>> >> csoundDebuggerInit() first. Otherwise I get an assert in the
>>> >>>> >>> >> breakpoint functions because csound->csdebug_data_t is no
>>> >>>> >>> >> longer
>>> >>>> >>> >> valid. I guess there is no harm in calling
>>> >>>> >>> >> csoundDebuggerInit()
>>> >>>> >>> >> each
>>> >>>> >>> >> time one updates or removes a breakpoint if all it does it
>>> >>>> >>> >> add/overwrite a data block in the underlying Csound object?
>>> >>>> >>> >> I'd
>>> >>>> >>> >> love
>>> >>>> >>> >> to see this in the next release. It would be nice to ship a
>>> >>>> >>> >> command
>>> >>>> >>> >> line app in all packages that would work like the gdb
>>> >>>> >>> >> debugger.
>>> >>>> >>> >>
>>> >>>> >>> >> On 11 April 2014 22:51, Rory Walsh  wrote:
>>> >>>> >>> >>> This is really great Andres. I threw together a simple
>>> >>>> >>> >>> command
>>> >>>> >>> >>> line
>>> >>>> >>> >>> application that perhaps you could add to the test suite? I
>>> >>>> >>> >>> just
>>> >>>> >>> >>> robbed what I could understand from yours and slotted it
>>> >>>> >>> >>> into as
>>> >>>> >>> >>> basic
>>> >>>> >>> >>> an example as I could think off.
>>> >>>> >>> >>>
>>> >>>> >>> >>> Usage:
>>> >>>> >>> >>>
>>> >>>> >>> >>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>>> >>>> >>> >>>
>>> >>>> >>> >>> Once the breakpoint at the given k-cycle is hit the debugger
>>> >>>> >>> >>> will
>>> >>>> >>> >>> print the values of each of the variables in the chosen
>>> >>>> >>> >>> instrument
>>> >>>> >>> >>> ala
>>> >>>> >>> >>>
>>> >>>> >>> >>> ==============================================
>>> >>>> >>> >>> Breakpoint at instr 1
>>> >>>> >>> >>> Number of k-cycles into performance: 100
>>> >>>> >>> >>> ------------------------------------------------------
>>> >>>> >>> >>> VarName:Schannel    value = hello         varType[S]
>>> >>>> >>> >>> VarName:k1    value = 0.580499     varType[k]
>>> >>>> >>> >>> VarName:aout    value = 0.0823895     varType[a]
>>> >>>> >>> >>> VarName:ksmps     varType[r]
>>> >>>> >>> >>>
>>> >>>> >>> >>> I have to say hats off. This is very clever. I can't wait to
>>> >>>> >>> >>> add
>>> >>>> >>> >>> something like this to Cabbage.
>>> >>>> >>> >>>
>>> >>>> >>> >>>
>>> >>>> >>> >>> On 11 April 2014 22:08, Andres Cabrera
>>> >>>> >>> >>> 
>>> >>>> >>> >>> wrote:
>>> >>>> >>> >>>> Hi,
>>> >>>> >>> >>>>
>>> >>>> >>> >>>> Good to hear you've got it going. The only performance
>>> >>>> >>> >>>> penalty if
>>> >>>> >>> >>>> you
>>> >>>> >>> >>>> don't
>>> >>>> >>> >>>> call csoundDebuggerInit is that kperf is a function pointer
>>> >>>> >>> >>>> rather
>>> >>>> >>> >>>> than a
>>> >>>> >>> >>>> function. If you have called csoundDebuggerInit, then you
>>> >>>> >>> >>>> will be
>>> >>>> >>> >>>> running a
>>> >>>> >>> >>>> slightly heavier kperf_debug function, which needs to check
>>> >>>> >>> >>>> whether
>>> >>>> >>> >>>> there
>>> >>>> >>> >>>> are new debug commands (like break, continue, or new
>>> >>>> >>> >>>> breakpoints),
>>> >>>> >>> >>>> and which
>>> >>>> >>> >>>> needs to check on every new instrument in the chain whether
>>> >>>> >>> >>>> it
>>> >>>> >>> >>>> matches one
>>> >>>> >>> >>>> of the existing breakpoints. It's not too much, since it's
>>> >>>> >>> >>>> done
>>> >>>> >>> >>>> at
>>> >>>> >>> >>>> control
>>> >>>> >>> >>>> rate, but there is a penalty. Performance during debugging
>>> >>>> >>> >>>> will
>>> >>>> >>> >>>> also
>>> >>>> >>> >>>> get a
>>> >>>> >>> >>>> little worse once line breakpoints are implemented because
>>> >>>> >>> >>>> there
>>> >>>> >>> >>>> will
>>> >>>> >>> >>>> have
>>> >>>> >>> >>>> to be a check for every ugen called within an instrument.
>>> >>>> >>> >>>> But
>>> >>>> >>> >>>> still I
>>> >>>> >>> >>>> think
>>> >>>> >>> >>>> the difference in performance between debug and no debug
>>> >>>> >>> >>>> will not
>>> >>>> >>> >>>> be
>>> >>>> >>> >>>> as
>>> >>>> >>> >>>> large as it is for C.
>>> >>>> >>> >>>>
>>> >>>> >>> >>>> Cheers,
>>> >>>> >>> >>>> Andrés
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh
>>> >>>> >>> >>>> 
>>> >>>> >>> >>>> wrote:
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>> Sorry for the noise! I'm properly checked out now and
>>> >>>> >>> >>>>> enjoying
>>> >>>> >>> >>>>> the
>>> >>>> >>> >>>>> ride! This is great. Are there any performance costs if no
>>> >>>> >>> >>>>> breakpoint
>>> >>>> >>> >>>>> is set?
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>> On 11 April 2014 09:05, Rory Walsh 
>>> >>>> >>> >>>>> wrote:
>>> >>>> >>> >>>>>> I assume that since I am getting no build or linker
>>> >>>> >>> >>>>>> errors that
>>> >>>> >>> >>>>>> there
>>> >>>> >>> >>>>>> is something amiss in my code?
>>> >>>> >>> >>>>>>
>>> >>>> >>> >>>>>> On 11 April 2014 01:51, Rory Walsh 
>>> >>>> >>> >>>>>> wrote:
>>> >>>> >>> >>>>>>> No. None at all?
>>> >>>> >>> >>>>>>>
>>> >>>> >>> >>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera"
>>> >>>> >>> >>>>>>> 
>>> >>>> >>> >>>>>>> wrote:
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> Are you getting build errors?
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>> >>>> >>> >>>>>>>> 
>>> >>>> >>> >>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>> Did you checkout the csdebugger branch for csound and
>>> >>>> >>> >>>>>>>>> run
>>> >>>> >>> >>>>>>>>> cmake
>>> >>>> >>> >>>>>>>>> with
>>> >>>> >>> >>>>>>>>> -DBUILD_DEBUGGER=1?
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>> 
>>> >>>> >>> >>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera
>>> >>>> >>> >>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>> easier to do:
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> I'm probably adding the wrong lines to
>>> >>>> >>> >>>>>>>>>>>> cmakelists.txt?
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> Is that right?
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>> Yes it would :)
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>> It would help if I built with the debugger
>>> >>>> >>> >>>>>>>>>>>>>> enabled :)
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs
>>> >>>> >>> >>>>>>>>>>>>>>> and
>>> >>>> >>> >>>>>>>>>>>>>>> scores,
>>> >>>> >>> >>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>> this
>>> >>>> >>> >>>>>>>>>>>>>>> allowed? My breakpoint callback is never being
>>> >>>> >>> >>>>>>>>>>>>>>> hit.
>>> >>>> >>> >>>>>>>>>>>>>>> What
>>> >>>> >>> >>>>>>>>>>>>>>> am
>>> >>>> >>> >>>>>>>>>>>>>>> I
>>> >>>> >>> >>>>>>>>>>>>>>> missing?
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double
>>> >>>> >>> >>>>>>>>>>>>>>> instr,
>>> >>>> >>> >>>>>>>>>>>>>>> void
>>> >>>> >>> >>>>>>>>>>>>>>> *userdata);
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>> int main(int argc, char *argv[])
>>> >>>> >>> >>>>>>>>>>>>>>> {
>>> >>>> >>> >>>>>>>>>>>>>>>    int break_count = 0;
>>> >>>> >>> >>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundStart(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb,
>>> >>>> >>> >>>>>>>>>>>>>>> (void
>>> >>>> >>> >>>>>>>>>>>>>>> *)
>>> >>>> >>> >>>>>>>>>>>>>>> &break_count);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundDestroy(csound);
>>> >>>> >>> >>>>>>>>>>>>>>> }
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>> //this never gets called.
>>> >>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double
>>> >>>> >>> >>>>>>>>>>>>>>> instr,
>>> >>>> >>> >>>>>>>>>>>>>>> void
>>> >>>> >>> >>>>>>>>>>>>>>> *userdata)
>>> >>>> >>> >>>>>>>>>>>>>>> {
>>> >>>> >>> >>>>>>>>>>>>>>>    int *count = (int *) userdata;
>>> >>>> >>> >>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line,
>>> >>>> >>> >>>>>>>>>>>>>>> instr);
>>> >>>> >>> >>>>>>>>>>>>>>>    *count = *count + 1;
>>> >>>> >>> >>>>>>>>>>>>>>> };
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>> That's great. Thanks.
>>> >>>> >>> >>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>>> >>>> >>> >>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>> >>>> >>> >>>>>>>>>>>>>>>>> implemented...
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head
>>> >>>> >>> >>>>>>>>>>>>>>>>>> around
>>> >>>> >>> >>>>>>>>>>>>>>>>>> this I
>>> >>>> >>> >>>>>>>>>>>>>>>>>> might
>>> >>>> >>> >>>>>>>>>>>>>>>>>> try
>>> >>>> >>> >>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>> write a simple command line app that passes a
>>> >>>> >>> >>>>>>>>>>>>>>>>>> breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>> line
>>> >>>> >>> >>>>>>>>>>>>>>>>>> number
>>> >>>> >>> >>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it
>>> >>>> >>> >>>>>>>>>>>>>>>>>> will
>>> >>>> >>> >>>>>>>>>>>>>>>>>> print
>>> >>>> >>> >>>>>>>>>>>>>>>>>> out
>>> >>>> >>> >>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>> values
>>> >>>> >>> >>>>>>>>>>>>>>>>>> of
>>> >>>> >>> >>>>>>>>>>>>>>>>>> each variable in that instrument. That would
>>> >>>> >>> >>>>>>>>>>>>>>>>>> be a
>>> >>>> >>> >>>>>>>>>>>>>>>>>> start.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Not exactly.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> the function:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> instrument
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> (where
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> debugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> information
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> about
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> instrument instance (variables and time
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> counters,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> p-fields,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> etc.)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> from
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> it.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> The callback function is only called if a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> reached,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> which
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> checked inside csound's kperf function.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> There is a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> linked
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> of
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> thread-safe
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> way),
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> which
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> traversed
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> check if the current instrument matches a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> For
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> line
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> what will need to happen is that for every
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> opcode
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> executed,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> it
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> line.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> So you grab the values for all the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> variables in a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> particular
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> line
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> each
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> reading
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> right?
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Hi,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> void
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> CsoundEngine::breakpointCallback(CSOUND
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *csound,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> int
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> line,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> double
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> line <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> instr;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *insds =
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> udata;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp =
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->instr->varPool->head;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (vp) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            if
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> "i") ==
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 0
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    ||
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> "k")
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem =
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->lclbas
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> "S")
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(varmem);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else if
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> "a")
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 2)<<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem =
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->lclbas
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->varType->varTypeName;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> button
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> and
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> debugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> will
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> stop
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> no
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> there.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Walsh
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> of a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> variable
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> once
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> information
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> from
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> interface
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> CsounsQT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> looks
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> implement
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> anything as
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> professional
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> able to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> stop
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> and
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> query
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> variables
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> screen-shot
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> seems to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> indicate
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> so?
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> CSOUND
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> structure, it
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> can
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> get
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> something
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> like:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 1\nasig
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 1
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 440");
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (void
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> *)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> csoundSetInstrumentBreakpoint(csound, 1.1,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 0);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> called.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> implemented
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> debugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active),
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> but I
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> also
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> want to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> add
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> line
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Walsh
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> just
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> looking
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> through
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> code
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> setting
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> this
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> up?
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> The
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> stuff
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> confusing
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> me.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> finally
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> getting
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> useful
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> testing
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csdebugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> please
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to add
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the API
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> here:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> within
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> which
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> part of
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> API,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> think
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> they are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> also
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> compile
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> option.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> invasive,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> make
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> struct
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> switched
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> has
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> been
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> registered
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> with
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundSetBreakpointCallback(CSOUND
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> called,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> providing
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> empty
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> audio
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> counters
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> continue
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> continues
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> where
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> left
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> off.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> but
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> now
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> working on
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> my
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> simple
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> very
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>> Integration
>>> >>>> >>> >>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>> >>> >>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>> _______________________________________________
>>> >>>> >>> >>>>> Csound-devel mailing list
>>> >>>> >>> >>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>> Put Bad Developers to Shame
>>> >>>> >>> >>>> Dominate Development with Jenkins Continuous Integration
>>> >>>> >>> >>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>> _______________________________________________
>>> >>>> >>> >>>> Csound-devel mailing list
>>> >>>> >>> >>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>
>>> >>>> >>> >
>>> >>>> >>> >
>>> >>>> >>> >
>>> >>>> >>> >
>>> >>>> >>> > ------------------------------------------------------------------------------
>>> >>>> >>> > Put Bad Developers to Shame
>>> >>>> >>> > Dominate Development with Jenkins Continuous Integration
>>> >>>> >>> > Continuously Automate Build, Test & Deployment
>>> >>>> >>> > Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> > http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> > _______________________________________________
>>> >>>> >>> > Csound-devel mailing list
>>> >>>> >>> > Csound-devel@lists.sourceforge.net
>>> >>>> >>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>> ------------------------------------------------------------------------------
>>> >>>> >>> Put Bad Developers to Shame
>>> >>>> >>> Dominate Development with Jenkins Continuous Integration
>>> >>>> >>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> _______________________________________________
>>> >>>> >>> Csound-devel mailing list
>>> >>>> >>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> ------------------------------------------------------------------------------
>>> >>>> Put Bad Developers to Shame
>>> >>>> Dominate Development with Jenkins Continuous Integration
>>> >>>> Continuously Automate Build, Test & Deployment
>>> >>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> _______________________________________________
>>> >>>> Csound-devel mailing list
>>> >>>> Csound-devel@lists.sourceforge.net
>>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>> ------------------------------------------------------------------------------
>>> >>> Put Bad Developers to Shame
>>> >>> Dominate Development with Jenkins Continuous Integration
>>> >>> Continuously Automate Build, Test & Deployment
>>> >>> Start a new project now. Try Jenkins in the cloud.
>>> >>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> _______________________________________________
>>> >>> Csound-devel mailing list
>>> >>> Csound-devel@lists.sourceforge.net
>>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>
>>> >>
>>> >>
>>> >> ------------------------------------------------------------------------------
>>> >> Put Bad Developers to Shame
>>> >> Dominate Development with Jenkins Continuous Integration
>>> >> Continuously Automate Build, Test & Deployment
>>> >> Start a new project now. Try Jenkins in the cloud.
>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>> >> _______________________________________________
>>> >> Csound-devel mailing list
>>> >> Csound-devel@lists.sourceforge.net
>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >
>>> >
>>> > ------------------------------------------------------------------------------
>>> > Put Bad Developers to Shame
>>> > Dominate Development with Jenkins Continuous Integration
>>> > Continuously Automate Build, Test & Deployment
>>> > Start a new project now. Try Jenkins in the cloud.
>>> > http://p.sf.net/sfu/13600_Cloudbees
>>> > _______________________________________________
>>> > Csound-devel mailing list
>>> > Csound-devel@lists.sourceforge.net
>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Learn Graph Databases - Download FREE O'Reilly Book
>>> "Graph Databases" is the definitive new guide to graph databases and
>>> their
>>> applications. Written by three acclaimed leaders in the field,
>>> this first edition is now available. Download your free book today!
>>> http://p.sf.net/sfu/NeoTech
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>
>>
>
>
> ------------------------------------------------------------------------------
> Learn Graph Databases - Download FREE O'Reilly Book
> "Graph Databases" is the definitive new guide to graph databases and their
> applications. Written by three acclaimed leaders in the field,
> this first edition is now available. Download your free book today!
> http://p.sf.net/sfu/NeoTech
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/NeoTech
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-17 20:40
FromSteven Yi
SubjectRe: [Cs-dev] Csound Debugger
I took a very brief look at the csdebugger branch. The one thing I saw
that looked odd was that kperf_nodebug and kperf_debug were set on the
csound struct.  It seems to me that those can be removed and just use
the function pointer directly, i.e. csound->kperf = kperf  or
csound->kperf = kperf_debug.

There seems to be a few other changes but I'm having a hard time
isolating them as some were recent and others from much further in the
past.  I'm wondering though about if this should be a build time
option or not.  If it's not built by default, then
packagers/individuals might not turn it on to build, then host apps
might or might not run if that is enabled or not.  (I guess one could
always query the csound version first, then do not call debug related
functions if it is < 6.03.0.

I don't have any big objections to this stuff going in except that
that above should be resolved.  We had set a target of "around this
time" to do a release.  I'd be up for waiting to get this
incorporated.




On Thu, Apr 17, 2014 at 2:49 PM, Andres Cabrera  wrote:
> Also, since a release is coming up, can the csdebugger branch be considered
> for inclusion?
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 17, 2014 at 11:48 AM, Andres Cabrera 
> wrote:
>>
>> Hi Rory,
>>
>> I've just added the little application you posted to the csound sources
>> (csdebugger branch), so that it can be built and distributed with Csound,
>> and to allow people to debug from the command line. Hopefully we'll get more
>> of the core developers commenting now :)
>>
>> I don't know if there's an API call for getting instrument numbers from
>> names, is there?
>>
>> Cheers,
>> Andrés
>>
>>
>> On Thu, Apr 17, 2014 at 3:12 AM, Rory Walsh  wrote:
>>>
>>> Can I ask that support be added for named instruments? Or perhaps
>>> there exists an API function that when passed an instrument name will
>>> return the assigned number? That would work too.
>>>
>>> On 13 April 2014 16:38, Steven Yi  wrote:
>>> > I think Andres was talking about having a nice function to wrap the
>>> > pointer addition.  I'd suggest something like:
>>> >
>>> > void* csoundGetVariableMem(CSOUND* csound, INSDS* instance, char*
>>> > varName) {
>>> >       CS_VARIABLE* var = csoundFindVariableWithName(csound,
>>> > instance->instr->varPool, varName);
>>> >
>>> >       if(var == NULL) return NULL;
>>> >
>>> >       return insds->lclbas + var->memBlockIndex;
>>> > }
>>> >
>>> > I don't know though if the API would be more often used though with
>>> > the calling code already having all of the var pool var's, i.e.
>>> > reading from the instance->insds->varPool->head first. If so, the
>>> > above could be simplified to take in the var and just remove the
>>> > csoundFindVariableWithName.  It'd probably be best to hide the
>>> > implementation details as it would give us flexibility to change
>>> > things in the future.
>>> >
>>> > On Sun, Apr 13, 2014 at 11:27 AM, Rory Walsh  wrote:
>>> >> It looks pretty good from here. I guess so long as one is sure to
>>> >> clean up the breakpoints there shouldn't be any issues. I am however
>>> >> having a problem with csoundDebugNext(). Should this trigger the
>>> >> breakpoint callback too? I'm not getting anything?
>>> >>
>>> >> On 13 April 2014 16:21, Andres Cabrera  wrote:
>>> >>> I'm thinking the debugger API could offer some facilties for common
>>> >>> tasks
>>> >>> like variable querying to remove that pointer uglyness.
>>> >>>
>>> >>> I would also like to see this in mainline Csound, but I'd like some
>>> >>> feedback
>>> >>> from others first as to whether the way I've done it is the best
>>> >>> possible.
>>> >>>
>>> >>> Cheers,
>>> >>> Andrés
>>> >>>
>>> >>>
>>> >>> On Sun, Apr 13, 2014 at 8:15 AM, Rory Walsh  wrote:
>>> >>>>
>>> >>>> Found it!
>>> >>>>
>>> >>>> On 13 April 2014 11:46, Rory Walsh  wrote:
>>> >>>> > Actually, I can't seem to find that? It's not a member of CSOUND?
>>> >>>> >
>>> >>>> > On 13 April 2014 10:54, Rory Walsh  wrote:
>>> >>>> >> That's easy. Nice one.
>>> >>>> >>
>>> >>>> >> On 13 Apr 2014 09:44, "Victor Lazzarini"
>>> >>>> >> 
>>> >>>> >> wrote:
>>> >>>> >>>
>>> >>>> >>> csound->GetKcounter( )
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>> http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
>>> >>>> >>> ========================
>>> >>>> >>> Dr Victor Lazzarini
>>> >>>> >>> Senior Lecturer
>>> >>>> >>> NUI Maynooth, Ireland
>>> >>>> >>> victor dot lazzarini at nuim dot ie
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>> On 12 Apr 2014, at 18:36, Rory Walsh  wrote:
>>> >>>> >>>
>>> >>>> >>> > Finally, how can one query the current k-pass, as in how many
>>> >>>> >>> > k-cycles
>>> >>>> >>> > have passed? I can put in a counter in my own processing
>>> >>>> >>> > thread, but
>>> >>>> >>> > I
>>> >>>> >>> > thought it might be simple to grab from Csound?
>>> >>>> >>> >
>>> >>>> >>> > On 12 April 2014 13:20, Rory Walsh  wrote:
>>> >>>> >>> >> Hi Andres. All going good here. I just wanted to ask you
>>> >>>> >>> >> something
>>> >>>> >>> >> about the implementation. Am I right in saying that whenever
>>> >>>> >>> >> csoundDebuggerInit() is called the CSOUND structure that is
>>> >>>> >>> >> passed
>>> >>>> >>> >> to
>>> >>>> >>> >> it gets appended with some csdebug_data_t data? This data
>>> >>>> >>> >> block is
>>> >>>> >>> >> then zeroed and removed when one calls csoundDebuggerClean()?
>>> >>>> >>> >> One
>>> >>>> >>> >> little issue I have is that I seem to have to call
>>> >>>> >>> >> csoundDebuggerInit() before I set my breakpoints, that is
>>> >>>> >>> >> every
>>> >>>> >>> >> time I
>>> >>>> >>> >> set a breakpoint or call any of the debugger methods I have
>>> >>>> >>> >> to call
>>> >>>> >>> >> csoundDebuggerInit() first. Otherwise I get an assert in the
>>> >>>> >>> >> breakpoint functions because csound->csdebug_data_t is no
>>> >>>> >>> >> longer
>>> >>>> >>> >> valid. I guess there is no harm in calling
>>> >>>> >>> >> csoundDebuggerInit()
>>> >>>> >>> >> each
>>> >>>> >>> >> time one updates or removes a breakpoint if all it does it
>>> >>>> >>> >> add/overwrite a data block in the underlying Csound object?
>>> >>>> >>> >> I'd
>>> >>>> >>> >> love
>>> >>>> >>> >> to see this in the next release. It would be nice to ship a
>>> >>>> >>> >> command
>>> >>>> >>> >> line app in all packages that would work like the gdb
>>> >>>> >>> >> debugger.
>>> >>>> >>> >>
>>> >>>> >>> >> On 11 April 2014 22:51, Rory Walsh  wrote:
>>> >>>> >>> >>> This is really great Andres. I threw together a simple
>>> >>>> >>> >>> command
>>> >>>> >>> >>> line
>>> >>>> >>> >>> application that perhaps you could add to the test suite? I
>>> >>>> >>> >>> just
>>> >>>> >>> >>> robbed what I could understand from yours and slotted it
>>> >>>> >>> >>> into as
>>> >>>> >>> >>> basic
>>> >>>> >>> >>> an example as I could think off.
>>> >>>> >>> >>>
>>> >>>> >>> >>> Usage:
>>> >>>> >>> >>>
>>> >>>> >>> >>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>>> >>>> >>> >>>
>>> >>>> >>> >>> Once the breakpoint at the given k-cycle is hit the debugger
>>> >>>> >>> >>> will
>>> >>>> >>> >>> print the values of each of the variables in the chosen
>>> >>>> >>> >>> instrument
>>> >>>> >>> >>> ala
>>> >>>> >>> >>>
>>> >>>> >>> >>> ==============================================
>>> >>>> >>> >>> Breakpoint at instr 1
>>> >>>> >>> >>> Number of k-cycles into performance: 100
>>> >>>> >>> >>> ------------------------------------------------------
>>> >>>> >>> >>> VarName:Schannel    value = hello         varType[S]
>>> >>>> >>> >>> VarName:k1    value = 0.580499     varType[k]
>>> >>>> >>> >>> VarName:aout    value = 0.0823895     varType[a]
>>> >>>> >>> >>> VarName:ksmps     varType[r]
>>> >>>> >>> >>>
>>> >>>> >>> >>> I have to say hats off. This is very clever. I can't wait to
>>> >>>> >>> >>> add
>>> >>>> >>> >>> something like this to Cabbage.
>>> >>>> >>> >>>
>>> >>>> >>> >>>
>>> >>>> >>> >>> On 11 April 2014 22:08, Andres Cabrera
>>> >>>> >>> >>> 
>>> >>>> >>> >>> wrote:
>>> >>>> >>> >>>> Hi,
>>> >>>> >>> >>>>
>>> >>>> >>> >>>> Good to hear you've got it going. The only performance
>>> >>>> >>> >>>> penalty if
>>> >>>> >>> >>>> you
>>> >>>> >>> >>>> don't
>>> >>>> >>> >>>> call csoundDebuggerInit is that kperf is a function pointer
>>> >>>> >>> >>>> rather
>>> >>>> >>> >>>> than a
>>> >>>> >>> >>>> function. If you have called csoundDebuggerInit, then you
>>> >>>> >>> >>>> will be
>>> >>>> >>> >>>> running a
>>> >>>> >>> >>>> slightly heavier kperf_debug function, which needs to check
>>> >>>> >>> >>>> whether
>>> >>>> >>> >>>> there
>>> >>>> >>> >>>> are new debug commands (like break, continue, or new
>>> >>>> >>> >>>> breakpoints),
>>> >>>> >>> >>>> and which
>>> >>>> >>> >>>> needs to check on every new instrument in the chain whether
>>> >>>> >>> >>>> it
>>> >>>> >>> >>>> matches one
>>> >>>> >>> >>>> of the existing breakpoints. It's not too much, since it's
>>> >>>> >>> >>>> done
>>> >>>> >>> >>>> at
>>> >>>> >>> >>>> control
>>> >>>> >>> >>>> rate, but there is a penalty. Performance during debugging
>>> >>>> >>> >>>> will
>>> >>>> >>> >>>> also
>>> >>>> >>> >>>> get a
>>> >>>> >>> >>>> little worse once line breakpoints are implemented because
>>> >>>> >>> >>>> there
>>> >>>> >>> >>>> will
>>> >>>> >>> >>>> have
>>> >>>> >>> >>>> to be a check for every ugen called within an instrument.
>>> >>>> >>> >>>> But
>>> >>>> >>> >>>> still I
>>> >>>> >>> >>>> think
>>> >>>> >>> >>>> the difference in performance between debug and no debug
>>> >>>> >>> >>>> will not
>>> >>>> >>> >>>> be
>>> >>>> >>> >>>> as
>>> >>>> >>> >>>> large as it is for C.
>>> >>>> >>> >>>>
>>> >>>> >>> >>>> Cheers,
>>> >>>> >>> >>>> Andrés
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh
>>> >>>> >>> >>>> 
>>> >>>> >>> >>>> wrote:
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>> Sorry for the noise! I'm properly checked out now and
>>> >>>> >>> >>>>> enjoying
>>> >>>> >>> >>>>> the
>>> >>>> >>> >>>>> ride! This is great. Are there any performance costs if no
>>> >>>> >>> >>>>> breakpoint
>>> >>>> >>> >>>>> is set?
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>> On 11 April 2014 09:05, Rory Walsh 
>>> >>>> >>> >>>>> wrote:
>>> >>>> >>> >>>>>> I assume that since I am getting no build or linker
>>> >>>> >>> >>>>>> errors that
>>> >>>> >>> >>>>>> there
>>> >>>> >>> >>>>>> is something amiss in my code?
>>> >>>> >>> >>>>>>
>>> >>>> >>> >>>>>> On 11 April 2014 01:51, Rory Walsh 
>>> >>>> >>> >>>>>> wrote:
>>> >>>> >>> >>>>>>> No. None at all?
>>> >>>> >>> >>>>>>>
>>> >>>> >>> >>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera"
>>> >>>> >>> >>>>>>> 
>>> >>>> >>> >>>>>>> wrote:
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> Are you getting build errors?
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>> >>>> >>> >>>>>>>> 
>>> >>>> >>> >>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>> Did you checkout the csdebugger branch for csound and
>>> >>>> >>> >>>>>>>>> run
>>> >>>> >>> >>>>>>>>> cmake
>>> >>>> >>> >>>>>>>>> with
>>> >>>> >>> >>>>>>>>> -DBUILD_DEBUGGER=1?
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>> 
>>> >>>> >>> >>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera
>>> >>>> >>> >>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>> easier to do:
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> I'm probably adding the wrong lines to
>>> >>>> >>> >>>>>>>>>>>> cmakelists.txt?
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> Is that right?
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>> Yes it would :)
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>> It would help if I built with the debugger
>>> >>>> >>> >>>>>>>>>>>>>> enabled :)
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs
>>> >>>> >>> >>>>>>>>>>>>>>> and
>>> >>>> >>> >>>>>>>>>>>>>>> scores,
>>> >>>> >>> >>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>> this
>>> >>>> >>> >>>>>>>>>>>>>>> allowed? My breakpoint callback is never being
>>> >>>> >>> >>>>>>>>>>>>>>> hit.
>>> >>>> >>> >>>>>>>>>>>>>>> What
>>> >>>> >>> >>>>>>>>>>>>>>> am
>>> >>>> >>> >>>>>>>>>>>>>>> I
>>> >>>> >>> >>>>>>>>>>>>>>> missing?
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double
>>> >>>> >>> >>>>>>>>>>>>>>> instr,
>>> >>>> >>> >>>>>>>>>>>>>>> void
>>> >>>> >>> >>>>>>>>>>>>>>> *userdata);
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>> int main(int argc, char *argv[])
>>> >>>> >>> >>>>>>>>>>>>>>> {
>>> >>>> >>> >>>>>>>>>>>>>>>    int break_count = 0;
>>> >>>> >>> >>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundStart(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb,
>>> >>>> >>> >>>>>>>>>>>>>>> (void
>>> >>>> >>> >>>>>>>>>>>>>>> *)
>>> >>>> >>> >>>>>>>>>>>>>>> &break_count);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundDestroy(csound);
>>> >>>> >>> >>>>>>>>>>>>>>> }
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>> //this never gets called.
>>> >>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double
>>> >>>> >>> >>>>>>>>>>>>>>> instr,
>>> >>>> >>> >>>>>>>>>>>>>>> void
>>> >>>> >>> >>>>>>>>>>>>>>> *userdata)
>>> >>>> >>> >>>>>>>>>>>>>>> {
>>> >>>> >>> >>>>>>>>>>>>>>>    int *count = (int *) userdata;
>>> >>>> >>> >>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line,
>>> >>>> >>> >>>>>>>>>>>>>>> instr);
>>> >>>> >>> >>>>>>>>>>>>>>>    *count = *count + 1;
>>> >>>> >>> >>>>>>>>>>>>>>> };
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>> That's great. Thanks.
>>> >>>> >>> >>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>>> >>>> >>> >>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>> >>>> >>> >>>>>>>>>>>>>>>>> implemented...
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head
>>> >>>> >>> >>>>>>>>>>>>>>>>>> around
>>> >>>> >>> >>>>>>>>>>>>>>>>>> this I
>>> >>>> >>> >>>>>>>>>>>>>>>>>> might
>>> >>>> >>> >>>>>>>>>>>>>>>>>> try
>>> >>>> >>> >>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>> write a simple command line app that passes a
>>> >>>> >>> >>>>>>>>>>>>>>>>>> breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>> line
>>> >>>> >>> >>>>>>>>>>>>>>>>>> number
>>> >>>> >>> >>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it
>>> >>>> >>> >>>>>>>>>>>>>>>>>> will
>>> >>>> >>> >>>>>>>>>>>>>>>>>> print
>>> >>>> >>> >>>>>>>>>>>>>>>>>> out
>>> >>>> >>> >>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>> values
>>> >>>> >>> >>>>>>>>>>>>>>>>>> of
>>> >>>> >>> >>>>>>>>>>>>>>>>>> each variable in that instrument. That would
>>> >>>> >>> >>>>>>>>>>>>>>>>>> be a
>>> >>>> >>> >>>>>>>>>>>>>>>>>> start.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Not exactly.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> the function:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> instrument
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> (where
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> debugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> information
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> about
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> instrument instance (variables and time
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> counters,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> p-fields,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> etc.)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> from
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> it.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> The callback function is only called if a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> reached,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> which
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> checked inside csound's kperf function.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> There is a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> linked
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> of
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> thread-safe
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> way),
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> which
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> traversed
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> check if the current instrument matches a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> For
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> line
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> what will need to happen is that for every
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> opcode
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> executed,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> it
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> line.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> So you grab the values for all the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> variables in a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> particular
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> line
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> each
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> reading
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> right?
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Hi,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> void
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> CsoundEngine::breakpointCallback(CSOUND
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *csound,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> int
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> line,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> double
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> line <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> instr;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *insds =
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> udata;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp =
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->instr->varPool->head;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (vp) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            if
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> "i") ==
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 0
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    ||
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> "k")
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem =
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->lclbas
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> "S")
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(varmem);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else if
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> "a")
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 2)<<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem =
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->lclbas
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->varType->varTypeName;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> button
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> and
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> debugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> will
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> stop
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> no
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> there.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Walsh
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> of a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> variable
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> once
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> information
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> from
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> interface
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> CsounsQT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> looks
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> implement
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> anything as
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> professional
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> able to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> stop
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> and
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> query
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> variables
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> screen-shot
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> seems to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> indicate
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> so?
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> CSOUND
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> structure, it
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> can
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> get
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> something
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> like:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 1\nasig
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 1
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 440");
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (void
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> *)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> csoundSetInstrumentBreakpoint(csound, 1.1,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 0);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> called.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> implemented
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> debugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active),
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> but I
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> also
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> want to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> add
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> line
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Walsh
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> just
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> looking
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> through
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> code
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> setting
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> this
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> up?
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> The
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> stuff
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> confusing
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> me.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> 
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> finally
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> getting
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> useful
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> testing
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csdebugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> please
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to add
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the API
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> here:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> within
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> which
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> part of
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> API,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> think
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> they are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> also
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> compile
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> option.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> invasive,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> make
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> struct
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> switched
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> has
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> been
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> registered
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> with
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundSetBreakpointCallback(CSOUND
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> called,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> providing
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> empty
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> audio
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> counters
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> continue
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> continues
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> where
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> left
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> off.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> but
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> now
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> working on
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> my
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> simple
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> very
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>> Integration
>>> >>>> >>> >>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>> >>> >>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>> _______________________________________________
>>> >>>> >>> >>>>> Csound-devel mailing list
>>> >>>> >>> >>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>> Put Bad Developers to Shame
>>> >>>> >>> >>>> Dominate Development with Jenkins Continuous Integration
>>> >>>> >>> >>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>> _______________________________________________
>>> >>>> >>> >>>> Csound-devel mailing list
>>> >>>> >>> >>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>
>>> >>>> >>> >
>>> >>>> >>> >
>>> >>>> >>> >
>>> >>>> >>> >
>>> >>>> >>> > ------------------------------------------------------------------------------
>>> >>>> >>> > Put Bad Developers to Shame
>>> >>>> >>> > Dominate Development with Jenkins Continuous Integration
>>> >>>> >>> > Continuously Automate Build, Test & Deployment
>>> >>>> >>> > Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> > http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> > _______________________________________________
>>> >>>> >>> > Csound-devel mailing list
>>> >>>> >>> > Csound-devel@lists.sourceforge.net
>>> >>>> >>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>> ------------------------------------------------------------------------------
>>> >>>> >>> Put Bad Developers to Shame
>>> >>>> >>> Dominate Development with Jenkins Continuous Integration
>>> >>>> >>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> _______________________________________________
>>> >>>> >>> Csound-devel mailing list
>>> >>>> >>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> ------------------------------------------------------------------------------
>>> >>>> Put Bad Developers to Shame
>>> >>>> Dominate Development with Jenkins Continuous Integration
>>> >>>> Continuously Automate Build, Test & Deployment
>>> >>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> _______________________________________________
>>> >>>> Csound-devel mailing list
>>> >>>> Csound-devel@lists.sourceforge.net
>>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>> ------------------------------------------------------------------------------
>>> >>> Put Bad Developers to Shame
>>> >>> Dominate Development with Jenkins Continuous Integration
>>> >>> Continuously Automate Build, Test & Deployment
>>> >>> Start a new project now. Try Jenkins in the cloud.
>>> >>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> _______________________________________________
>>> >>> Csound-devel mailing list
>>> >>> Csound-devel@lists.sourceforge.net
>>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>
>>> >>
>>> >>
>>> >> ------------------------------------------------------------------------------
>>> >> Put Bad Developers to Shame
>>> >> Dominate Development with Jenkins Continuous Integration
>>> >> Continuously Automate Build, Test & Deployment
>>> >> Start a new project now. Try Jenkins in the cloud.
>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>> >> _______________________________________________
>>> >> Csound-devel mailing list
>>> >> Csound-devel@lists.sourceforge.net
>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >
>>> >
>>> > ------------------------------------------------------------------------------
>>> > Put Bad Developers to Shame
>>> > Dominate Development with Jenkins Continuous Integration
>>> > Continuously Automate Build, Test & Deployment
>>> > Start a new project now. Try Jenkins in the cloud.
>>> > http://p.sf.net/sfu/13600_Cloudbees
>>> > _______________________________________________
>>> > Csound-devel mailing list
>>> > Csound-devel@lists.sourceforge.net
>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Learn Graph Databases - Download FREE O'Reilly Book
>>> "Graph Databases" is the definitive new guide to graph databases and
>>> their
>>> applications. Written by three acclaimed leaders in the field,
>>> this first edition is now available. Download your free book today!
>>> http://p.sf.net/sfu/NeoTech
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>
>>
>
>
> ------------------------------------------------------------------------------
> Learn Graph Databases - Download FREE O'Reilly Book
> "Graph Databases" is the definitive new guide to graph databases and their
> applications. Written by three acclaimed leaders in the field,
> this first edition is now available. Download your free book today!
> http://p.sf.net/sfu/NeoTech
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/NeoTech
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.

Date2014-04-17 20:57
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
Hi,

On Thu, Apr 17, 2014 at 12:40 PM, Steven Yi <stevenyi@gmail.com> wrote:
I took a very brief look at the csdebugger branch. The one thing I saw
that looked odd was that kperf_nodebug and kperf_debug were set on the
csound struct.  It seems to me that those can be removed and just use
the function pointer directly, i.e. csound->kperf = kperf  or
csound->kperf = kperf_debug.

The main reason for this is that this pointer is swapped in csoundDebuggerInit() and csoundDebuggerClean() inside Top/csdebug.c so I don't think the kperfs are available.

But you are right, they don't look good in the CSOUND struct. Should I declare the kperf functions as extern?


There seems to be a few other changes but I'm having a hard time
isolating them as some were recent and others from much further in the
past.  I'm wondering though about if this should be a build time
option or not.  If it's not built by default, then
packagers/individuals might not turn it on to build, then host apps
might or might not run if that is enabled or not.  (I guess one could
always query the csound version first, then do not call debug related
functions if it is < 6.03.0.

I think your best bet is diffing from the develop branch with the csdebugger branch to see what has actually changed, rather than looking at individual commits.

I have this as a compile option in case there is resistance to it... :)

But if there's agreement, I completely agree that these should be removed.
 

I don't have any big objections to this stuff going in except that
that above should be resolved.  We had set a target of "around this
time" to do a release.  I'd be up for waiting to get this
incorporated.

That would be great, thanks.

Cheers,
Andrés

 



On Thu, Apr 17, 2014 at 2:49 PM, Andres Cabrera <mantaraya36@gmail.com> wrote:
> Also, since a release is coming up, can the csdebugger branch be considered
> for inclusion?
>
> Cheers,
> Andrés
>
>
> On Thu, Apr 17, 2014 at 11:48 AM, Andres Cabrera <mantaraya36@gmail.com>
> wrote:
>>
>> Hi Rory,
>>
>> I've just added the little application you posted to the csound sources
>> (csdebugger branch), so that it can be built and distributed with Csound,
>> and to allow people to debug from the command line. Hopefully we'll get more
>> of the core developers commenting now :)
>>
>> I don't know if there's an API call for getting instrument numbers from
>> names, is there?
>>
>> Cheers,
>> Andrés
>>
>>
>> On Thu, Apr 17, 2014 at 3:12 AM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>>
>>> Can I ask that support be added for named instruments? Or perhaps
>>> there exists an API function that when passed an instrument name will
>>> return the assigned number? That would work too.
>>>
>>> On 13 April 2014 16:38, Steven Yi <stevenyi@gmail.com> wrote:
>>> > I think Andres was talking about having a nice function to wrap the
>>> > pointer addition.  I'd suggest something like:
>>> >
>>> > void* csoundGetVariableMem(CSOUND* csound, INSDS* instance, char*
>>> > varName) {
>>> >       CS_VARIABLE* var = csoundFindVariableWithName(csound,
>>> > instance->instr->varPool, varName);
>>> >
>>> >       if(var == NULL) return NULL;
>>> >
>>> >       return insds->lclbas + var->memBlockIndex;
>>> > }
>>> >
>>> > I don't know though if the API would be more often used though with
>>> > the calling code already having all of the var pool var's, i.e.
>>> > reading from the instance->insds->varPool->head first. If so, the
>>> > above could be simplified to take in the var and just remove the
>>> > csoundFindVariableWithName.  It'd probably be best to hide the
>>> > implementation details as it would give us flexibility to change
>>> > things in the future.
>>> >
>>> > On Sun, Apr 13, 2014 at 11:27 AM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> >> It looks pretty good from here. I guess so long as one is sure to
>>> >> clean up the breakpoints there shouldn't be any issues. I am however
>>> >> having a problem with csoundDebugNext(). Should this trigger the
>>> >> breakpoint callback too? I'm not getting anything?
>>> >>
>>> >> On 13 April 2014 16:21, Andres Cabrera <mantaraya36@gmail.com> wrote:
>>> >>> I'm thinking the debugger API could offer some facilties for common
>>> >>> tasks
>>> >>> like variable querying to remove that pointer uglyness.
>>> >>>
>>> >>> I would also like to see this in mainline Csound, but I'd like some
>>> >>> feedback
>>> >>> from others first as to whether the way I've done it is the best
>>> >>> possible.
>>> >>>
>>> >>> Cheers,
>>> >>> Andrés
>>> >>>
>>> >>>
>>> >>> On Sun, Apr 13, 2014 at 8:15 AM, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> >>>>
>>> >>>> Found it!
>>> >>>>
>>> >>>> On 13 April 2014 11:46, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> >>>> > Actually, I can't seem to find that? It's not a member of CSOUND?
>>> >>>> >
>>> >>>> > On 13 April 2014 10:54, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> >>>> >> That's easy. Nice one.
>>> >>>> >>
>>> >>>> >> On 13 Apr 2014 09:44, "Victor Lazzarini"
>>> >>>> >> <Victor.Lazzarini@nuim.ie>
>>> >>>> >> wrote:
>>> >>>> >>>
>>> >>>> >>> csound->GetKcounter( )
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>> http://csound.sourceforge.net/doc/html/structCSOUND__.html#ae0abaab5bdc10f2ab0f0db410a8c6502
>>> >>>> >>> ========================
>>> >>>> >>> Dr Victor Lazzarini
>>> >>>> >>> Senior Lecturer
>>> >>>> >>> NUI Maynooth, Ireland
>>> >>>> >>> victor dot lazzarini at nuim dot ie
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>> On 12 Apr 2014, at 18:36, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> >>>> >>>
>>> >>>> >>> > Finally, how can one query the current k-pass, as in how many
>>> >>>> >>> > k-cycles
>>> >>>> >>> > have passed? I can put in a counter in my own processing
>>> >>>> >>> > thread, but
>>> >>>> >>> > I
>>> >>>> >>> > thought it might be simple to grab from Csound?
>>> >>>> >>> >
>>> >>>> >>> > On 12 April 2014 13:20, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> >>>> >>> >> Hi Andres. All going good here. I just wanted to ask you
>>> >>>> >>> >> something
>>> >>>> >>> >> about the implementation. Am I right in saying that whenever
>>> >>>> >>> >> csoundDebuggerInit() is called the CSOUND structure that is
>>> >>>> >>> >> passed
>>> >>>> >>> >> to
>>> >>>> >>> >> it gets appended with some csdebug_data_t data? This data
>>> >>>> >>> >> block is
>>> >>>> >>> >> then zeroed and removed when one calls csoundDebuggerClean()?
>>> >>>> >>> >> One
>>> >>>> >>> >> little issue I have is that I seem to have to call
>>> >>>> >>> >> csoundDebuggerInit() before I set my breakpoints, that is
>>> >>>> >>> >> every
>>> >>>> >>> >> time I
>>> >>>> >>> >> set a breakpoint or call any of the debugger methods I have
>>> >>>> >>> >> to call
>>> >>>> >>> >> csoundDebuggerInit() first. Otherwise I get an assert in the
>>> >>>> >>> >> breakpoint functions because csound->csdebug_data_t is no
>>> >>>> >>> >> longer
>>> >>>> >>> >> valid. I guess there is no harm in calling
>>> >>>> >>> >> csoundDebuggerInit()
>>> >>>> >>> >> each
>>> >>>> >>> >> time one updates or removes a breakpoint if all it does it
>>> >>>> >>> >> add/overwrite a data block in the underlying Csound object?
>>> >>>> >>> >> I'd
>>> >>>> >>> >> love
>>> >>>> >>> >> to see this in the next release. It would be nice to ship a
>>> >>>> >>> >> command
>>> >>>> >>> >> line app in all packages that would work like the gdb
>>> >>>> >>> >> debugger.
>>> >>>> >>> >>
>>> >>>> >>> >> On 11 April 2014 22:51, Rory Walsh <rorywalsh@ear.ie> wrote:
>>> >>>> >>> >>> This is really great Andres. I threw together a simple
>>> >>>> >>> >>> command
>>> >>>> >>> >>> line
>>> >>>> >>> >>> application that perhaps you could add to the test suite? I
>>> >>>> >>> >>> just
>>> >>>> >>> >>> robbed what I could understand from yours and slotted it
>>> >>>> >>> >>> into as
>>> >>>> >>> >>> basic
>>> >>>> >>> >>> an example as I could think off.
>>> >>>> >>> >>>
>>> >>>> >>> >>> Usage:
>>> >>>> >>> >>>
>>> >>>> >>> >>> ./csddebug [filename.csd] [instrument number] [ksmps offset]
>>> >>>> >>> >>>
>>> >>>> >>> >>> Once the breakpoint at the given k-cycle is hit the debugger
>>> >>>> >>> >>> will
>>> >>>> >>> >>> print the values of each of the variables in the chosen
>>> >>>> >>> >>> instrument
>>> >>>> >>> >>> ala
>>> >>>> >>> >>>
>>> >>>> >>> >>> ==============================================
>>> >>>> >>> >>> Breakpoint at instr 1
>>> >>>> >>> >>> Number of k-cycles into performance: 100
>>> >>>> >>> >>> ------------------------------------------------------
>>> >>>> >>> >>> VarName:Schannel    value = hello         varType[S]
>>> >>>> >>> >>> VarName:k1    value = 0.580499     varType[k]
>>> >>>> >>> >>> VarName:aout    value = 0.0823895     varType[a]
>>> >>>> >>> >>> VarName:ksmps     varType[r]
>>> >>>> >>> >>>
>>> >>>> >>> >>> I have to say hats off. This is very clever. I can't wait to
>>> >>>> >>> >>> add
>>> >>>> >>> >>> something like this to Cabbage.
>>> >>>> >>> >>>
>>> >>>> >>> >>>
>>> >>>> >>> >>> On 11 April 2014 22:08, Andres Cabrera
>>> >>>> >>> >>> <mantaraya36@gmail.com>
>>> >>>> >>> >>> wrote:
>>> >>>> >>> >>>> Hi,
>>> >>>> >>> >>>>
>>> >>>> >>> >>>> Good to hear you've got it going. The only performance
>>> >>>> >>> >>>> penalty if
>>> >>>> >>> >>>> you
>>> >>>> >>> >>>> don't
>>> >>>> >>> >>>> call csoundDebuggerInit is that kperf is a function pointer
>>> >>>> >>> >>>> rather
>>> >>>> >>> >>>> than a
>>> >>>> >>> >>>> function. If you have called csoundDebuggerInit, then you
>>> >>>> >>> >>>> will be
>>> >>>> >>> >>>> running a
>>> >>>> >>> >>>> slightly heavier kperf_debug function, which needs to check
>>> >>>> >>> >>>> whether
>>> >>>> >>> >>>> there
>>> >>>> >>> >>>> are new debug commands (like break, continue, or new
>>> >>>> >>> >>>> breakpoints),
>>> >>>> >>> >>>> and which
>>> >>>> >>> >>>> needs to check on every new instrument in the chain whether
>>> >>>> >>> >>>> it
>>> >>>> >>> >>>> matches one
>>> >>>> >>> >>>> of the existing breakpoints. It's not too much, since it's
>>> >>>> >>> >>>> done
>>> >>>> >>> >>>> at
>>> >>>> >>> >>>> control
>>> >>>> >>> >>>> rate, but there is a penalty. Performance during debugging
>>> >>>> >>> >>>> will
>>> >>>> >>> >>>> also
>>> >>>> >>> >>>> get a
>>> >>>> >>> >>>> little worse once line breakpoints are implemented because
>>> >>>> >>> >>>> there
>>> >>>> >>> >>>> will
>>> >>>> >>> >>>> have
>>> >>>> >>> >>>> to be a check for every ugen called within an instrument.
>>> >>>> >>> >>>> But
>>> >>>> >>> >>>> still I
>>> >>>> >>> >>>> think
>>> >>>> >>> >>>> the difference in performance between debug and no debug
>>> >>>> >>> >>>> will not
>>> >>>> >>> >>>> be
>>> >>>> >>> >>>> as
>>> >>>> >>> >>>> large as it is for C.
>>> >>>> >>> >>>>
>>> >>>> >>> >>>> Cheers,
>>> >>>> >>> >>>> Andrés
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>> On Fri, Apr 11, 2014 at 1:21 PM, Rory Walsh
>>> >>>> >>> >>>> <rorywalsh@ear.ie>
>>> >>>> >>> >>>> wrote:
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>> Sorry for the noise! I'm properly checked out now and
>>> >>>> >>> >>>>> enjoying
>>> >>>> >>> >>>>> the
>>> >>>> >>> >>>>> ride! This is great. Are there any performance costs if no
>>> >>>> >>> >>>>> breakpoint
>>> >>>> >>> >>>>> is set?
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>> On 11 April 2014 09:05, Rory Walsh <rorywalsh@ear.ie>
>>> >>>> >>> >>>>> wrote:
>>> >>>> >>> >>>>>> I assume that since I am getting no build or linker
>>> >>>> >>> >>>>>> errors that
>>> >>>> >>> >>>>>> there
>>> >>>> >>> >>>>>> is something amiss in my code?
>>> >>>> >>> >>>>>>
>>> >>>> >>> >>>>>> On 11 April 2014 01:51, Rory Walsh <rorywalsh@ear.ie>
>>> >>>> >>> >>>>>> wrote:
>>> >>>> >>> >>>>>>> No. None at all?
>>> >>>> >>> >>>>>>>
>>> >>>> >>> >>>>>>> On 11 Apr 2014 00:36, "Andres Cabrera"
>>> >>>> >>> >>>>>>> <mantaraya36@gmail.com>
>>> >>>> >>> >>>>>>> wrote:
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> Are you getting build errors?
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> On Thu, Apr 10, 2014 at 4:35 PM, Andres Cabrera
>>> >>>> >>> >>>>>>>> <mantaraya36@gmail.com>
>>> >>>> >>> >>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>> Did you checkout the csdebugger branch for csound and
>>> >>>> >>> >>>>>>>>> run
>>> >>>> >>> >>>>>>>>> cmake
>>> >>>> >>> >>>>>>>>> with
>>> >>>> >>> >>>>>>>>> -DBUILD_DEBUGGER=1?
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>> On Thu, Apr 10, 2014 at 4:32 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>> <rorywalsh@ear.ie>
>>> >>>> >>> >>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>> Still no luck I'm afraid. Are you sure my code is ok?
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>> On 11 April 2014 00:26, Andres Cabrera
>>> >>>> >>> >>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>> >>> >>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>> easier to do:
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> cmake -DBUILD_DEBUGGER=1
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> On Thu, Apr 10, 2014 at 4:10 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>> >>> >>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> I'm probably adding the wrong lines to
>>> >>>> >>> >>>>>>>>>>>> cmakelists.txt?
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> set (BUILD_DEBUGGER 1)
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> Is that right?
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> On 11 April 2014 00:06, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>> >>> >>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>> Yes it would :)
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>> On Thu, Apr 10, 2014 at 4:02 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>> >>> >>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>> It would help if I built with the debugger
>>> >>>> >>> >>>>>>>>>>>>>> enabled :)
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>> On 11 April 2014 00:01, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>> >>> >>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>> I'm using a csd file instead of compiling orcs
>>> >>>> >>> >>>>>>>>>>>>>>> and
>>> >>>> >>> >>>>>>>>>>>>>>> scores,
>>> >>>> >>> >>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>> this
>>> >>>> >>> >>>>>>>>>>>>>>> allowed? My breakpoint callback is never being
>>> >>>> >>> >>>>>>>>>>>>>>> hit.
>>> >>>> >>> >>>>>>>>>>>>>>> What
>>> >>>> >>> >>>>>>>>>>>>>>> am
>>> >>>> >>> >>>>>>>>>>>>>>> I
>>> >>>> >>> >>>>>>>>>>>>>>> missing?
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double
>>> >>>> >>> >>>>>>>>>>>>>>> instr,
>>> >>>> >>> >>>>>>>>>>>>>>> void
>>> >>>> >>> >>>>>>>>>>>>>>> *userdata);
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>> int main(int argc, char *argv[])
>>> >>>> >>> >>>>>>>>>>>>>>> {
>>> >>>> >>> >>>>>>>>>>>>>>>    int break_count = 0;
>>> >>>> >>> >>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundCompile(csound,argc,argv);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundStart(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound, brkpt_cb,
>>> >>>> >>> >>>>>>>>>>>>>>> (void
>>> >>>> >>> >>>>>>>>>>>>>>> *)
>>> >>>> >>> >>>>>>>>>>>>>>> &break_count);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundSetInstrumentBreakpoint(csound, 1, 0);
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>    while (csoundPerformKsmps(csound)==0);
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>    csoundDestroy(csound);
>>> >>>> >>> >>>>>>>>>>>>>>> }
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>> //this never gets called.
>>> >>>> >>> >>>>>>>>>>>>>>> void brkpt_cb(CSOUND *csound, int line, double
>>> >>>> >>> >>>>>>>>>>>>>>> instr,
>>> >>>> >>> >>>>>>>>>>>>>>> void
>>> >>>> >>> >>>>>>>>>>>>>>> *userdata)
>>> >>>> >>> >>>>>>>>>>>>>>> {
>>> >>>> >>> >>>>>>>>>>>>>>>    int *count = (int *) userdata;
>>> >>>> >>> >>>>>>>>>>>>>>>    printf("bkpt line %i instr %f\n", line,
>>> >>>> >>> >>>>>>>>>>>>>>> instr);
>>> >>>> >>> >>>>>>>>>>>>>>>    *count = *count + 1;
>>> >>>> >>> >>>>>>>>>>>>>>> };
>>> >>>> >>> >>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>> On 10 April 2014 22:56, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>> >>> >>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>> That's great. Thanks.
>>> >>>> >>> >>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>> On 10 Apr 2014 22:44, "Andres Cabrera"
>>> >>>> >>> >>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>> >>> >>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> Currently only instrument breakpoints are
>>> >>>> >>> >>>>>>>>>>>>>>>>> implemented...
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:35 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>> >>> >>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Ok, that sounds good. To help get my head
>>> >>>> >>> >>>>>>>>>>>>>>>>>> around
>>> >>>> >>> >>>>>>>>>>>>>>>>>> this I
>>> >>>> >>> >>>>>>>>>>>>>>>>>> might
>>> >>>> >>> >>>>>>>>>>>>>>>>>> try
>>> >>>> >>> >>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>> write a simple command line app that passes a
>>> >>>> >>> >>>>>>>>>>>>>>>>>> breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>> line
>>> >>>> >>> >>>>>>>>>>>>>>>>>> number
>>> >>>> >>> >>>>>>>>>>>>>>>>>> as a parameter, and then when it hits, it
>>> >>>> >>> >>>>>>>>>>>>>>>>>> will
>>> >>>> >>> >>>>>>>>>>>>>>>>>> print
>>> >>>> >>> >>>>>>>>>>>>>>>>>> out
>>> >>>> >>> >>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>> values
>>> >>>> >>> >>>>>>>>>>>>>>>>>> of
>>> >>>> >>> >>>>>>>>>>>>>>>>>> each variable in that instrument. That would
>>> >>>> >>> >>>>>>>>>>>>>>>>>> be a
>>> >>>> >>> >>>>>>>>>>>>>>>>>> start.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> On 10 April 2014 22:29, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Not exactly.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> the function:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Gives you a pointer to the currently active
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> instrument
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> (where
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> debugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> interrupted execution). You can then get the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> information
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> about
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> instrument instance (variables and time
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> counters,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> p-fields,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> etc.)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> from
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> it.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> The callback function is only called if a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> reached,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> which
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> checked inside csound's kperf function.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> There is a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> linked
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> of
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints (that is managed in a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> thread-safe
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> way),
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> which
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> traversed
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> check if the current instrument matches a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> breakpoint.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> For
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> line
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> breakpoints,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> what will need to happen is that for every
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> opcode
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> executed,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> it
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> checked whether it matches to a breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> line.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:20 PM, Rory Walsh
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> So you grab the values for all the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> variables in a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> particular
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> line
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> each
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> time this callback function is hit? Am I
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> reading
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> right?
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> On 10 April 2014 22:10, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Hi,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> My breakpoint callback looks like this:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> void
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> CsoundEngine::breakpointCallback(CSOUND
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *csound,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> int
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> line,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> double
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> instr, void *udata)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    qDebug() <<"breakpointCallback " <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> line <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> instr;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *insds =
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> csoundDebugGetInstrument(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    CsoundEngine *cs = (CsoundEngine *)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> udata;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    // Copy variable list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    CS_VARIABLE *vp =
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->instr->varPool->head;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.lock();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_varList.clear();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (vp) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        if (vp->varName[0] != '#') {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            QVariantList varDetails;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails << vp->varName;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            if
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> "i") ==
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 0
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    ||
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> strcmp(vp->varType->varTypeName,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> "k")
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem =
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->lclbas
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> if(strcmp(vp->varType->varTypeName,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> "S")
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((char
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    char *varmem = (char *)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> (insds->lclbas +
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(varmem);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else if
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> (strcmp(vp->varType->varTypeName,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> "a")
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> ==
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 0) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                if (vp->memBlock) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails << *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock) <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 1)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                               << *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock +
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> 2)<<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *((MYFLT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> *)vp->memBlock + 3);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                } else {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    MYFLT *varmem =
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> insds->lclbas
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> +
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->memBlockIndex;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                    varDetails <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> QVariant(*varmem);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            } else {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>                varDetails << QVariant();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            varDetails <<
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> vp->varType->varTypeName;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>            cs->m_varList << varDetails;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        vp = vp->next;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->variableMutex.unlock();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    //Copy active instrument list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.lock();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->m_instrumentList.clear();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    INSDS *in = insds;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in->prvact) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->prvact;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    while (in) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        QVariantList instance;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->p1;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << QString("%1
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> %2").arg(in->p2).arg(in->p3);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        instance << in->kcounter;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        cs->m_instrumentList << instance;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>        in = in->nxtact;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    cs->instrumentMutex.unlock();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>    emit cs->breakpointReached();
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> And yes you can actually click the pause
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> button
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> and
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> debugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> will
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> stop
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> and show you where it is, even if there is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> no
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> there.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 2:03 PM, Rory
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Walsh
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Thanks. And how would one query the value
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> of a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> variable
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> once
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> breakpoint is hit? How does one access
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> information
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> from
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound structure? Btw, your debugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> interface
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> CsounsQT
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> looks
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> really top-class. I could hope to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> implement
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> anything as
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> professional
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> as that, but I like the idea of being
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> able to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> stop
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> and
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> query
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> variables
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> on the fly. Is this possible, your
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> screen-shot
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> seems to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> indicate
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> so?
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> This will be so useful in teaching!
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:58, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Also, since the breakpoint callback gets
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> CSOUND
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> structure, it
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> can
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> get
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> all of its information from there.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:58 PM, Andres
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Hi Rory,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Essentially, your application could do
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> something
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> like:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    int break_count = 0;
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CSOUND* csound = csoundCreate(NULL);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundCompileOrc(csound, "instr
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 1\nasig
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> oscil 1,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> p4\nendin\n");
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundInputMessage(csound, "i 1.1 0
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 1
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 440");
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundStart(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerInit(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundSetBreakpointCallback(csound,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> brkpt_cb,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (void
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> *)
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> &break_count);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> csoundSetInstrumentBreakpoint(csound, 1.1,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> 0);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    for (i = 0; i < 1000; i++) {
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>        csoundPerformKsmps(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    }
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    CU_ASSERT(break_count == 1);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDebuggerClean(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>    csoundDestroy(csound);
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Whenever the breakpoint is reached, the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoint
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> called.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Currently only instrument breakpoints
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> implemented
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> (i.e.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> debugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breaks when an instrument is active),
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> but I
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> also
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> want to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> add
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> line
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> breakpoints.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> On Thu, Apr 10, 2014 at 1:49 PM, Rory
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> Walsh
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> <rorywalsh@ear.ie>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Wow, this looks super cool Andres. I'm
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> just
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> looking
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> through
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> code
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> now. Do you have a basic example of
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> setting
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> this
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> up?
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> The
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> CUnit
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> stuff
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> in that debugger test code you posted
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> confusing
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> me.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> On 10 April 2014 21:13, Andres Cabrera
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> <mantaraya36@gmail.com>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The Csound debugger I'm working on is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> finally
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> getting
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> useful
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> testing
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> stage.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I've been doing the work in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csdebugger
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> branch, if
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> please
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have a look.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> To build the debugger, you will need
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to add
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cmake:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> -DBUILD_DEBUGGER=1
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> You will find some simple tests of
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the API
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> here:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/tests/c/csound_debugger_test.c
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I have written a debugger front-end
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> within
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> CsoundQt,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> which
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> you
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to try out too:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://qutecsound.sourceforge.net/debugger2.html
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Some internal details:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> The debugger interface is found at:
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://github.com/csound/csound/blob/csdebugger/include/csdebug.h
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Although the debugger functions are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> part of
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> API,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> think
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cleaner to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> have them in their own header, as
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> they are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> also
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> compile
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> option.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Because the changes are somewhat
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> invasive,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> I
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> chose to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> make
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function a pointer within the CSOUND
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> struct
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> defaults to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> nodebug.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the debugger is initialized the kperf
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> pointer
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> switched
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debug version, and switched back when
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> debugger is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> disabled
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerInit() and
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundDebuggerClean()
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> functions.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> that
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> has
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> been
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> registered
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> with
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> csoundSetBreakpointCallback(CSOUND
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> *csound,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> breakpoint_cb_t
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> bkpt_cb,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> void *userdata) is called.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When a breakpoint is reached, after
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> callback
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> called,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> kperf
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> function continues running as usual,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> providing
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> empty
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> buffers
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> to
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> audio
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> hardware, and not incrementing the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> time
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> counters
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> musmon.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> When
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> a
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> continue
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> is reached, the graph traversing
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> continues
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> where
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> left
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> off.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> There are probably still a few bugs,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> but
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> it's
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> now
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> working on
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> my
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> simple
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> tests.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Any ideas, thoughts and suggestions
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> are
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> very
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> welcome.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Andrés
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Continuously Automate Build, Test &
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>>>>> Start a new project now. Try Jenkins in the
>>> >>>> >>> >>>>>>>>>>>>>> cloud.
>>> >>>> >>> >>>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>>>> Integration
>>> >>>> >>> >>>>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>>>
>>> >>>> >>> >>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>>>>> Dominate Development with Jenkins Continuous
>>> >>>> >>> >>>>>>>> Integration
>>> >>>> >>> >>>>>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>>>>> _______________________________________________
>>> >>>> >>> >>>>>>>> Csound-devel mailing list
>>> >>>> >>> >>>>>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>>>>>
>>> >>>> >>> >>>>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>>
>>> >>>> >>> >>>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>>> Put Bad Developers to Shame
>>> >>>> >>> >>>>> Dominate Development with Jenkins Continuous Integration
>>> >>>> >>> >>>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>>> _______________________________________________
>>> >>>> >>> >>>>> Csound-devel mailing list
>>> >>>> >>> >>>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>>
>>> >>>> >>> >>>> ------------------------------------------------------------------------------
>>> >>>> >>> >>>> Put Bad Developers to Shame
>>> >>>> >>> >>>> Dominate Development with Jenkins Continuous Integration
>>> >>>> >>> >>>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> >>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> >>>> _______________________________________________
>>> >>>> >>> >>>> Csound-devel mailing list
>>> >>>> >>> >>>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >>>>
>>> >>>> >>> >
>>> >>>> >>> >
>>> >>>> >>> >
>>> >>>> >>> >
>>> >>>> >>> > ------------------------------------------------------------------------------
>>> >>>> >>> > Put Bad Developers to Shame
>>> >>>> >>> > Dominate Development with Jenkins Continuous Integration
>>> >>>> >>> > Continuously Automate Build, Test & Deployment
>>> >>>> >>> > Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> > http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> > _______________________________________________
>>> >>>> >>> > Csound-devel mailing list
>>> >>>> >>> > Csound-devel@lists.sourceforge.net
>>> >>>> >>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>> >>> >
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>>
>>> >>>> >>> ------------------------------------------------------------------------------
>>> >>>> >>> Put Bad Developers to Shame
>>> >>>> >>> Dominate Development with Jenkins Continuous Integration
>>> >>>> >>> Continuously Automate Build, Test & Deployment
>>> >>>> >>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> >>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> >>> _______________________________________________
>>> >>>> >>> Csound-devel mailing list
>>> >>>> >>> Csound-devel@lists.sourceforge.net
>>> >>>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>> ------------------------------------------------------------------------------
>>> >>>> Put Bad Developers to Shame
>>> >>>> Dominate Development with Jenkins Continuous Integration
>>> >>>> Continuously Automate Build, Test & Deployment
>>> >>>> Start a new project now. Try Jenkins in the cloud.
>>> >>>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>>> _______________________________________________
>>> >>>> Csound-devel mailing list
>>> >>>> Csound-devel@lists.sourceforge.net
>>> >>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>> ------------------------------------------------------------------------------
>>> >>> Put Bad Developers to Shame
>>> >>> Dominate Development with Jenkins Continuous Integration
>>> >>> Continuously Automate Build, Test & Deployment
>>> >>> Start a new project now. Try Jenkins in the cloud.
>>> >>> http://p.sf.net/sfu/13600_Cloudbees
>>> >>> _______________________________________________
>>> >>> Csound-devel mailing list
>>> >>> Csound-devel@lists.sourceforge.net
>>> >>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >>>
>>> >>
>>> >>
>>> >> ------------------------------------------------------------------------------
>>> >> Put Bad Developers to Shame
>>> >> Dominate Development with Jenkins Continuous Integration
>>> >> Continuously Automate Build, Test & Deployment
>>> >> Start a new project now. Try Jenkins in the cloud.
>>> >> http://p.sf.net/sfu/13600_Cloudbees
>>> >> _______________________________________________
>>> >> Csound-devel mailing list
>>> >> Csound-devel@lists.sourceforge.net
>>> >> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>> >
>>> >
>>> > ------------------------------------------------------------------------------
>>> > Put Bad Developers to Shame
>>> > Dominate Development with Jenkins Continuous Integration
>>> > Continuously Automate Build, Test & Deployment
>>> > Start a new project now. Try Jenkins in the cloud.
>>> > http://p.sf.net/sfu/13600_Cloudbees
>>> > _______________________________________________
>>> > Csound-devel mailing list
>>> > Csound-devel@lists.sourceforge.net
>>> > https://lists.sourceforge.net/lists/listinfo/csound-devel
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Learn Graph Databases - Download FREE O'Reilly Book
>>> "Graph Databases" is the definitive new guide to graph databases and
>>> their
>>> applications. Written by three acclaimed leaders in the field,
>>> this first edition is now available. Download your free book today!
>>> http://p.sf.net/sfu/NeoTech
>>> _______________________________________________
>>> Csound-devel mailing list
>>> Csound-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>>
>>
>
>
> ------------------------------------------------------------------------------
> Learn Graph Databases - Download FREE O'Reilly Book
> "Graph Databases" is the definitive new guide to graph databases and their
> applications. Written by three acclaimed leaders in the field,
> this first edition is now available. Download your free book today!
> http://p.sf.net/sfu/NeoTech
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and their
applications. Written by three acclaimed leaders in the field,
this first edition is now available. Download your free book today!
http://p.sf.net/sfu/NeoTech
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-29 15:47
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Is there an easy way to query how long many k-cycles an instrument has
completed rather than the total number of k-cycles since the
performance began?

------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.  Get 
unparalleled scalability from the best Selenium testing platform available.
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net

Date2014-04-29 17:54
FromAndres Cabrera
SubjectRe: [Cs-dev] Csound Debugger
AttachmentsNone  None  
I was looking into this, and it seems there isn't. What opcodes that time this do is store the current count at init-time and then compare to that. AFAICS there is not internal instrument counter...

Cheers,
Andrés


On Tue, Apr 29, 2014 at 7:47 AM, Rory Walsh <rorywalsh@ear.ie> wrote:
Is there an easy way to query how long many k-cycles an instrument has
completed rather than the total number of k-cycles since the
performance began?

------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.  Get
unparalleled scalability from the best Selenium testing platform available.
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csound-devel


Date2014-04-29 18:46
FromRory Walsh
SubjectRe: [Cs-dev] Csound Debugger
Thanks Andres. It would have taken me some time to get to that conclusion!

On 29 April 2014 18:54, Andres Cabrera  wrote:
> I was looking into this, and it seems there isn't. What opcodes that time
> this do is store the current count at init-time and then compare to that.
> AFAICS there is not internal instrument counter...
>
> Cheers,
> Andrés
>
>
> On Tue, Apr 29, 2014 at 7:47 AM, Rory Walsh  wrote:
>>
>> Is there an easy way to query how long many k-cycles an instrument has
>> completed rather than the total number of k-cycles since the
>> performance began?
>>
>>
>> ------------------------------------------------------------------------------
>> "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
>> Instantly run your Selenium tests across 300+ browser/OS combos.  Get
>> unparalleled scalability from the best Selenium testing platform
>> available.
>> Simple to use. Nothing to install. Get started now for free."
>> http://p.sf.net/sfu/SauceLabs
>> _______________________________________________
>> Csound-devel mailing list
>> Csound-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/csound-devel
>
>
>
> ------------------------------------------------------------------------------
> "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
> Instantly run your Selenium tests across 300+ browser/OS combos.  Get
> unparalleled scalability from the best Selenium testing platform available.
> Simple to use. Nothing to install. Get started now for free."
> http://p.sf.net/sfu/SauceLabs
> _______________________________________________
> Csound-devel mailing list
> Csound-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/csound-devel
>

------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.  Get 
unparalleled scalability from the best Selenium testing platform available.
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Csound-devel mailing list
Csound-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/csou