Better Debugging With Metaprogramming
Kyle Siefring via Digitalmars-d
digitalmars-d at puremagic.com
Thu Sep 11 19:38:17 PDT 2014
On Friday, 12 September 2014 at 01:19:40 UTC, Kyle Siefring wrote:
> On Friday, 12 September 2014 at 01:17:10 UTC, Kyle Siefring
> wrote:
>> I was thinking that there were a few useful applications for
>> using metaprogramming could be used as
>>
>> int rng()
>> {
>>
>> }
>
> I think pressing the tab key just sent this message before I
> was sure I even wanted to type it. Let's see if the tab key is
> the verdict.... Okay the tab key selected the send element and
> then I must have pressed enter. Let's try that...
Not really metaprogramming I suppose. I think I know how I made
myself think that and explaining it is more than I can write.
I'm sure somebody is going to be curious to what I was going to
write so I suppose I have to write it anyway. Will what I write
be coherent? Probably not.
I want this. With sensible syntax.
int rng (int n)
dbg { // define what can be put into the value of the keyvalue
store of the debug database
int notSoRandomNumber;
}
body {
dbg // Checks if the database is empty then if there is an
entry for the callee of this method
{
// return a number determined outside of compile time and
provided by the user
return dbg.notSoRandomNumber;
}
else
{
// do things normally
return (a random number 0 through n);
}
}
Callees automatically pass on who they are. You can select
callees using some method (ide, gdb like breakpoint list, ect.)
and then add entries.
You would be doing a search for where line and file equal what
you select.
usage of the above function
string[] choices = ["dead", "stone dead", "definitely deceased"
"bleeding demised", "not pining", "passed on", "no more", "ceased
to be", "expired and gone to meet his maker", "a stiff", "Bereft
of life", "rests in peace", "ect.", "EX-PARROT"];
writeln(choices[rng(choices.length)]);
You could write this function and not have to change the code
that calls it!
Another fun idea. dbg variables can be searched in the database.
for(dbg int i = 0; i < 5; i++)
{
string[] choices = ["dead", "stone dead", "definitely deceased"
"bleeding demised", "not pining", "passed on", "no more", "ceased
to be", "expired and gone to meet his maker", "a stiff", "Bereft
of life", "rests in peace", "ect.", "EX-PARROT"];
writeln(choices[rng(choices.length)]);
}
You could decide to only interfer when i = 3 for example.
This idea may be stupid but that cursed tab and enter thing
forced me to write this regardless of if it's any good.
More information about the Digitalmars-d
mailing list