using System;
using System.Data;
using System.IO;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
DoWork("Hello");
Console.WriteLine("Press Enter to Continue ...");
Console.ReadLine();
}
static public void DoWork(string arg)
{
StackTrace trace = new StackTrace(0/*skip frames*/, true /*need file info*/);
StackFrame frame = trace.GetFrame(0);
Console.WriteLine("File name = {0} ", frame.GetFileName());
Console.WriteLine("Line no = {0} ", frame.GetFileLineNumber());
Console.WriteLine("Function name = {0}", frame.GetMethod());
/*
the following text comes from a online forum:
I have tried using this with some success, but it does not seem to work well
with using the Release version of code.
Also, we are considering using a code obfuscator, and this would also
prevent things like function name from being valid when obtaining it at run
time. I would prefer a compile time method if possible.
========================================================================
"StackTrace information will be most informative with Debug build
configurations. By default, Debug builds include debug symbols, while
Release builds do not. The debug symbols contain most of the file, method
name, line number, and column information used in constructing StackFrame
and StackTrace objects. StackTrace might not report as many method calls as
expected, due to code transformations that occur during optimization."
If you really want to still get full info in release builds (without
obfuscation), then go to Project/Properties select Configuration
Properties/Build and set the following:
1.Optimize Code false
2.Generate Debugging Information true
Per the obfuscation bit, the point of it is to deny folks the opportunity
to reverse-engineer your code. The ability to get a good stack trace from
obfuscated code would defeat the reasons for obfuscation
* */
Console.WriteLine("input arg = " + arg);
}
}
}
using System.Data;
using System.IO;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
DoWork("Hello");
Console.WriteLine("Press Enter to Continue ...");
Console.ReadLine();
}
static public void DoWork(string arg)
{
StackTrace trace = new StackTrace(0/*skip frames*/, true /*need file info*/);
StackFrame frame = trace.GetFrame(0);
Console.WriteLine("File name = {0} ", frame.GetFileName());
Console.WriteLine("Line no = {0} ", frame.GetFileLineNumber());
Console.WriteLine("Function name = {0}", frame.GetMethod());
/*
the following text comes from a online forum:
I have tried using this with some success, but it does not seem to work well
with using the Release version of code.
Also, we are considering using a code obfuscator, and this would also
prevent things like function name from being valid when obtaining it at run
time. I would prefer a compile time method if possible.
========================================================================
"StackTrace information will be most informative with Debug build
configurations. By default, Debug builds include debug symbols, while
Release builds do not. The debug symbols contain most of the file, method
name, line number, and column information used in constructing StackFrame
and StackTrace objects. StackTrace might not report as many method calls as
expected, due to code transformations that occur during optimization."
If you really want to still get full info in release builds (without
obfuscation), then go to Project/Properties select Configuration
Properties/Build and set the following:
1.Optimize Code false
2.Generate Debugging Information true
Per the obfuscation bit, the point of it is to deny folks the opportunity
to reverse-engineer your code. The ability to get a good stack trace from
obfuscated code would defeat the reasons for obfuscation
* */
Console.WriteLine("input arg = " + arg);
}
}
}