http://blog.csdn.net/newegg2009/article/details/6220385

C#获得当前执行的函数名、当前代码行、源代码文件名

[日期:2010-10-18 11:40]   来源:.NET中国学习网  作者:admin   [字体:  ]
  得到函数名:

  System.Diagnostics.StackTrace  st  =  new  System.Diagnostics.StackTrace();

  this.Text  =  st.GetFrame(0).ToString();

  得到代码行,源代码文件名:

  StackTrace st = new StackTrace(new StackFrame(true));

  Console.WriteLine(" Stack trace for current level: {0}", st.ToString());

  StackFrame sf = st.GetFrame(0);

  Console.WriteLine(" File: {0}", sf.GetFileName());

  Console.WriteLine(" Method: {0}", sf.GetMethod().Name);

  Console.WriteLine(" Line Number: {0}", sf.GetFileLineNumber());

  Console.WriteLine(" Column Number: {0}", sf.GetFileColumnNumber());
using System.Diagnostics;
http://madskristensen.net/post/JavaScript-AlertShow(e2809dmessagee2809d)-from-ASPNET-code-behind.aspx

private void btnException_Click(object sender, System.EventArgs e)

{

try 

{

ProcException1(1, 2);

}

catch(Exception exp)

{

GetFullStackFrameInfo(new StackTrace(exp));

}

}
void btnSave_Click(object sender,
EventArgs e)

{
   try 

   {

      SaveSomething();

      Alert.Show("You document has been saved");

   }
   catch (ReadOnlyException)

   {

      Alert.Show("You do not have write permission to this file");

   }



private void btnStackTrace_Click(object sender, System.EventArgs e)

{

int x = 2;

ProcA(1, ref x, "Hello");

}

private void GetFullStackFrameInfo(StackTrace st)

{

int fc = st.FrameCount;

lstStackItems.Items.Clear();

for(int i = 0; i < fc - 1; i++)

{

lstStackItems.Items.Add(GetStackFrameInfo(st.GetFrame(i)));

}

}

private string GetStackFrameInfo(StackFrame sf) 

{

string strParams;

MethodInfo mi;

Type typ;

string strOut = string.Empty;

mi = (MethodInfo) sf.GetMethod();

if (mi.IsPrivate)

{

strOut += "private ";

}

else if ( mi.IsPublic )

{

strOut += "public ";



else if ( mi.IsFamily ) 

{

strOut += "protected ";

}

else if ( mi.IsAssembly )

{

strOut += "internal ";

}

if ( mi.IsStatic ) 

{

strOut += "static ";

}

strOut += mi.Name + "(";

ParameterInfo[] piList = sf.GetMethod().GetParameters();

strParams = string.Empty;

foreach(ParameterInfo pi in piList)

{

strParams += string.Format(", {0} {1} {2}", ((pi.ParameterType.IsByRef) ? "ByRef" : "ByVal"), pi.Name, pi.ParameterType.Name);

}

if (strParams.Length > 2) 

{

strOut += strParams.Substring(2);

}

typ = mi.ReturnType;

strOut += ") " + typ.ToString();

return strOut;

}

private void ProcException1(int x, int y)

{

ProcException2("Mike", 12);

}

private void ProcException2(string Name, long Size)

{

ProcException3();

}

private string ProcException3()

{

return ProcException4("mike@microsoft.com");

}

private string ProcException4(string EmailAddress)

{

throw new ArgumentException("This is a fake exception!");

}

private void ProcA(int Item1, ref int Item2, string Item3)

{

ProcB(string.Concat(Item1, Item2, Item3));

}

private void ProcB(string Name)

{

GetFullStackFrameInfo(new StackTrace());

}
        private static void addpathPower(string pathname, string username, string power)

        {
            DirectoryInfo dirinfo = new DirectoryInfo(pathname);
            if ((dirinfo.Attributes & FileAttributes.ReadOnly) != 0)

            {

                dirinfo.Attributes = FileAttributes.Normal;

            }
            //取得访问控制列表   

            DirectorySecurity dirsecurity = dirinfo.GetAccessControl();
            switch (power)

            {

                case "FullControl":

                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));

                    break;

                case "ReadOnly":

                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Read, AccessControlType.Allow));

                    break;

                case "Write":

                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Write, AccessControlType.Allow));

                    break;

                case "Modify":

                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Modify, AccessControlType.Allow));

                    break;

            }

            dirinfo.SetAccessControl(dirsecurity);

        }
public static void Show(string message)

{
   // Cleans the message to allow single quotation marks 
   string cleanMessage = message.Replace("'", "//'");
   string script = "<script
type=/"text/javascript/">alert('" + cleanMessage + "');</script>";

   // Gets the executing web page 

   Page page = HttpContext.Current.CurrentHandler as Page;

   // Checks if the handler is a Page and that the script isn't allready on the Page 
   if (page != null &&
!page.ClientScript.IsClientScriptBlockRegistered("alert"))

   {

      page.ClientScript.RegisterClientScriptBlock(typeof(Alert), "alert",
script);

   }

}    

}

C#获得当前执行的函数名、当前代码行、源代码文件名的更多相关文章

  1. Java获取正在执行的函数名

    利用StackTrace堆栈轨迹获取某个时间的调用堆栈状态. package com.dsp.demo; public class TechDemo { public static void main ...

  2. 使用 Addr2line 将函数地址解析为函数名

    用 Addr2line 将函数地址解析为函数名 原文链接:http://www.ibm.com/developerworks/cn/linux/l-graphvis/ Addr2line 工具(它是标 ...

  3. JS 中函数名后面加与不加括号的区别

    a.onmouseover = fn1; a.onmouseout = fn2; function fn1(){ div.className = "erweima show"; } ...

  4. 跟着太白老师学python day11 函数名的应用 globals(), locals()

    1.  函数名就是内存地址 def func(): ') print(func) >>>> <function func at 0x00000000003DC1E0> ...

  5. C++ DLL导出函数的两种方法(导出序号那种方法,别人看不到函数名)

    第一种就直接导出函数名如下代码: #ifdef__cplusplus #define TEXPORT extern "c" _declspec(dllexport) #dlse # ...

  6. python 动态获取当前运行的类名和函数名的方法

    一.使用内置方法和修饰器方法获取类名.函数名 python中获取函数名的情况分为内部.外部,从外部的情况好获取,使用指向函数的对象,然后用__name__属性 复制代码代码如下: def a():pa ...

  7. JS函数 函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名。

    函数调用 函数定义好后,是不能自动执行的,需要调用它,直接在需要的位置写函数名. 第一种情况:在<script>标签内调用. <script type="text/java ...

  8. 八、React实战:可交互待办事务表(表单使用、数据的本地缓存local srtorage、生命同期函数(页面加载就会执行函数名固定为componentDidMount()))

    一.项目功能概述 示例网址:http://www.todolist.cn/ 功能: 输入待做事项,回车,把任务添加到 [正在进行] [正在进行] 任务,勾选之后,变成已[经完成事项] [已完成事务], ...

  9. Javascript自执行匿名函数(function() { })()的原理分析

    匿名函数指没有指定函数名或指针的函数,自执行匿名函数只是其中一种,下文中称这种函数为:自执行函数 下面是一个最常见的自执行函数: // 传统匿名函数 (function() { alert('hell ...

随机推荐

  1. 封装EF code first用存储过程的分页方法

    一年半没有做过MVC的项目了,还是很怀念(因为现在项目还是原来的ASPX),个人还是喜欢mvc,最近又开始重拾MVC,感觉既熟悉又陌生. 记录一下封装好的分页代码 首先先说下 我使用EF codefi ...

  2. 推荐一套免费跨平台的delphi 哈希及加密算法库

    delphi 目前提供了部分哈希及加密算法. 但是不是特别全,今天给大家推荐一套免费的.跨平台的算法库. https://github.com/winkelsdorf/DelphiEncryption ...

  3. 基于EasyIPCamera实现的数字网络摄像机IPCamera的模拟器IPC RTSP Simulator

    还记得去年在北京安博会上,看到一些厂家的展示台上,各种船舶.公路.车辆的高清视频直播,好奇这些数据是怎么接到现场的,现场成百上千家展台,不可能有那么大的带宽供应,细想数据肯定不是实时的,果然,盯着看了 ...

  4. Eclipse中连接Sql Sever2008 -----转自Yogurshine

    Eclipse中连接Sql Sever2008 -----转自Yogurshine 一 SQl Sever服务器配置 1我之前已经安装好SQL Sever 2008R2.(注意:安装一遍未成功时,一定 ...

  5. jQuery局部动态刷新

    AJAX 是与服务器交换数据的艺术,它在不重载全部页面的情况下,实现了对部分网页的更新. 在做项目的过程当中要用到jQuery动态刷新获取数据,上网查了一番教程,讲此知识点的教程很多,但个人感觉比较乱 ...

  6. 配置composer代理

    composer config -g repo.packagist composer https://packagist.phpcomposer.com

  7. codeforces776D

    传送门 这题的意思就是原本有一个长度为n的01串,再给出m的长度为n的01串,要求你判定是否可以通过原串与m个串中的某些串xor使得原串到达一个状态.n,m小于1e5. 这题最初我发现不可做,因为这貌 ...

  8. Codeforces Round #385 (Div. 2) Hongcow Builds A Nation —— 图论计数

    题目链接:http://codeforces.com/contest/745/problem/C C. Hongcow Builds A Nation time limit per test 2 se ...

  9. codeforces 463A Caisa and Sugar 解题报告

    题目链接:http://codeforces.com/problemset/problem/463/A 题目意思:某个人有 s dollar的钱,有 n 种类型的糖果,第 i 种糖果的价值为 xi d ...

  10. scanf()函数

    Scanf函数攻略: (A)                格式化说明符 格式字符           说明 %d                 读入十进制整数 %u                 ...