国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

獲取代碼所在的位置信息

2019-11-17 03:05:39
字體:
供稿:網(wǎng)友

獲取代碼所在的位置信息

要實(shí)現(xiàn)獲取代碼所在的位置信息的功能,類System.Diagnostics.StackFrame是關(guān)鍵,源碼如下:

1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Diagnostics; //需要知道源碼位置
6
7namespace Consoleapplication1
8{
9 class PRogram
10 {
11 static void FirstLevel()
12 {
13 StackFrame stackFrame = new StackFrame(1, true);
14 Console.WriteLine(stackFrame.GetFileName()); //獲取包含所執(zhí)行代碼的文件名。
15 Console.WriteLine(stackFrame.GetFileLineNumber().ToString()); //也就是FirstLevel()被調(diào)用地方的行號(hào)
16 Console.WriteLine(stackFrame.GetFileColumnNumber().ToString()); //也就是FirstLevel()被調(diào)用地方的第一個(gè)字母“F”所處的列
17 Console.WriteLine(stackFrame.GetMethod().Module); //stackFrame.GetMethod()獲取在其中執(zhí)行幀的方法。
18 Console.WriteLine(stackFrame.GetMethod().ReflectedType);
19 Console.WriteLine(stackFrame.GetMethod().ToString());
20 }
21
22 static void SecondLevel()
23 {
24 FirstLevel();
25 }
26
27 static void Main(string[] args)
28 {
29 SecondLevel();
30 Console.ReadKey();
31 }
32 }
33}

執(zhí)行結(jié)果如下:

C:/Users/Administrator/Desktop/ConsoleApplication1/ConsoleApplication1/Program.cs2413ConsoleApplication1.exeConsoleApplication1.ProgramVoid SecondLevel()

分析如下:

構(gòu)造函數(shù)StackFrame(int skipFrames, bool fNeedFileInfo)中,skipFrames為堆棧上幀跳過當(dāng)前幀的幀數(shù),fNeedFileInfo表示是否想獲取堆棧幀所在文件名、行號(hào)、列號(hào)(Visual Studio 2010中,定位到構(gòu)造函數(shù)StackFrame(1, true)調(diào)用處,按F12,即可看到此信息)。

那么什么是堆棧幀?“堆棧幀是在堆棧中為當(dāng)前正在運(yùn)行的函數(shù)分配的區(qū)域(或空間)。傳入的參數(shù)、返回地址(當(dāng)這個(gè)函數(shù)結(jié)束后必須跳轉(zhuǎn)到該返回地址。譯注:即主調(diào)函數(shù)的斷點(diǎn)處)以及函數(shù)所用的內(nèi)部存儲(chǔ)單元(即函數(shù)存儲(chǔ)在堆棧上的局部變量)都在堆棧幀中。”(http://book.51cto.com/art/200804/70915.htm)舉個(gè)例子,A()調(diào)用B(),B()調(diào)用C(),那么,B()所處的堆棧幀剛好在C()所處堆棧幀的上一個(gè),也就是說B()相對(duì)C()的幀跳數(shù)為1,A()的相對(duì)C()的幀跳數(shù)就為2。

好了,明白了這個(gè),再來看將FirstLevel()中“StackFrame stackFrame = new StackFrame(1, true);”改為“StackFrame stackFrame = new StackFrame(2, true);”后的結(jié)果:

C:/Users/Administrator/Desktop/ConsoleApplication1/ConsoleApplication1/Program.cs2913ConsoleApplication1.exeConsoleApplication1.ProgramVoid Main(System.String[])


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 普陀区| 阿勒泰市| 宾阳县| 和平县| 肃宁县| 昌平区| 吉隆县| 陆丰市| 九龙坡区| 张家界市| 鞍山市| 吉安县| 自贡市| 会宁县| 额济纳旗| 洪洞县| 木兰县| 中阳县| 江城| 广西| 华池县| 布拖县| 弋阳县| 克山县| 化州市| 牡丹江市| 龙井市| 雅安市| 通山县| 泾川县| 循化| 山东| 嵊州市| 兴文县| 阿拉善盟| 东阳市| 平果县| 柳林县| 哈尔滨市| 定日县| 五寨县|