Can I get caller name?
Vladimir Panteleev via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Sep 25 23:18:23 PDT 2014
On Friday, 26 September 2014 at 05:59:33 UTC, AsmMan wrote:
> for debugging purposes, I need to get the caller name. Is it
> possible? if so, how do I do this?
>
> void foo()
> {
> baa();
> }
>
> void baa()
> {
> wrilten(caller_name()); // foo
> }
>
> I know I could create an extra parameter and pass the current
> function name as argument but it isn't a possibility for now.
Method 1 (extra template parameter):
////////////// method1.d /////////////
import std.stdio;
void foo()
{
baa();
}
void baa(string caller=__FUNCTION__)()
{
writeln(caller);
}
void main()
{
foo();
}
//////////////////////////////////////
Method 2 (slow, needs -g, also prints line number on Windows):
/////////////////////////// method2.d ///////////////////////////
import std.stdio;
void foo()
{
baa();
}
void baa()
{
writeln(getCaller());
}
void main()
{
foo();
}
string getCaller()
{
try
throw new Exception(null);
catch (Exception e)
{
import std.string, std.algorithm;
string[] lines = e.toString().splitLines()[1..$];
return lines.find!(line => line.canFind("getCaller"))[2];
}
}
/////////////////////////////////////////////////////////////////
More information about the Digitalmars-d-learn
mailing list