Since we&#x27;re all sharing debugging lessons I thought I&#x27;d include one for .NET.  In System.Runtime.CompilerServices, there are attributes that can be very useful for a logging interface: CallerMemberNameAttribute, CallerLineNumberAttribute, and CallerFilePathAttribute.  These add compile-time info to method calls like so:<p><pre><code>    void Error(string message, 
    [CallerMemberName] string callingMethod = null, 
    [CallerFilePath] string filePath = null, 
    [CallerLineNumber] int lineNumber = 0);
</code></pre>
You then simply call `Error(&quot;something wrong with the frobnicator&quot;)` and the source line you need to come back to is already there.  The only caveat is that this won&#x27;t work in conjunction with variadic formatting for the message (`params object[]` arguments can&#x27;t coexist with default arguments).  `string.Format` feels like a small price to pay.