成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解Visual Studio調試中符號文件的作用

開發 后端
本文將介紹的是Visual Studio調試中的符號文件,希望通過本文能對大家了解Visual Studio調試有所幫助。

對于Visual Studio調試過程中的一些步驟,我們今天需要了解的是符號文件,希望通過本文,能為大家的工作起到事半功倍的效果。

前面在不能設置斷點的檢查步驟和Visual Studio調試之斷點進階篇提到了調試符號文件及其作用,這篇文章我將要介紹調試符號文件的一些用法,如果你已經很熟悉調試文件的話,盡可以跳過本文。

調試符號文件為調試器提供了從二進制機器代碼地址到源代碼文本文件代碼行的映射.因此有了符號文件,我們才能:

1. 設置斷點,因為調試器需要符號文件提供的映射關系,將源代碼行的行號轉換成對應的機器代碼的地址。

2. 查看程序堆棧,簡單地說,就是調試器使用映射關系將堆棧里面的地址轉換成包含這個地址的函數名。

3. 查看變量的值,對于機器來說,所有的變量都只是一個內存地址,程序在讀取變量值的時候,只不過按照變量所屬的類型來讀取指定大小的內存而已。

4. 甚至調用程序的一些函數,比如原生(Native)程序,經過編譯以后,在程序里面實際上只變成了一段機器代碼。我們在立即窗口里面調用一個C++函數的時候,調試器需要將函數名翻譯成對應的機器代碼的起始地址,當然還要遵循一定的函數調用規則才能調用這個函數。

我們一個一個地看符號文件的功能:

查看程序堆棧

將Visual Studio以原生程序(Native)調試模式附加到一個已打開的記事本程序上(附:因為我的系統都是英文版,所以中文菜單都是對著英語直接翻譯的,有的會翻譯的不準確,所以我會把英文的命令附在后面),然后中斷記事本進程的執行 — 通過點擊VS菜單里面的“調試(Debug)”-“全部中斷(Break All)”。

下面是具體的將VS附加到記事本進程的操作(不好意思,錄制的視頻太大,不知道怎么傳)。

1. 點擊Visual Studio里面的“工具(Tools)”- “附加到進程……(Attach to Process …)”。

2. 選擇notepad.exe,當然你要保證“附加到… (Attach To…)” 文本框里面列出的調試類型是“原生程序(Native)”。

3.點擊確定以后,將Visual Studio附加到剛剛打開的記事本進程。

這個時候打開堆棧(Stack)窗口,你應該會看到類似下面的結果:

打開堆棧的結果

上面的堆棧,我也看不懂(我的機器是64位的Windows 7,所以地址都是8個字節的)。因此我們需要一些東西來幫我們把難理解的地址(鳥語)翻譯成有意義的文字,這個工作就是由符號文件來完成的。

因為記事本是操作系統自帶的程序,我們當然沒有辦法自己生成它對應的符號文件啦,但是幸運的是,微軟早就已經考慮到可能有一些人需要調試Windows內核—例如寫驅動程序的程序員,因此微軟公司已經將Windows的一些符號文件公開了,公開的地址在:

http://msdl.microsoft.com/download/symbols

在Visual Studio里使用的方法是:

1.點擊菜單欄里面的“工具(Tools)”—“選項(Options)”。

2.在“選項(Options)”對話框左邊的列表框里面選擇“調試(Debugging)”-“符號文件(Symbols)”。

3.如果你的Visual Studio是Visual Studio 2008 SP 1,那么點擊“從微軟的符號文件服務器上加載符號文件(Load symbols from Microsoft symbols server)”就可以了。

4. 如果是其他版本-當然是低一些的版本,在右側的“符號文件路徑(Symbol file (.pdb) locations)”列表框里面添加新的一行,將上面的鏈接輸入進去。

然后在“將符號文件緩存到這個文件夾(Cache symbols from symbol servers to this directory:)”文本框里輸入你要緩存從服務器下載的符號文件的文件夾路徑—畢竟那個服務器是在美國。如下圖所示:

文件夾路徑

5.點擊“確定( OK)”

6. 對于聽說英文沒有困難的朋友,可以直接參考下面的鏈接學習如何設置:http://support.microsoft.com/kb/311503/zh-cn

等待一段很長的時間以后—因為調試器要一個個下載記事本程序所引用到的所有動態鏈接庫文件的符號文件,你應該可以看到類似下面的堆棧信息:

堆棧信息


這篇文章的描述里面,我希望你能夠明白調試符號文件的重要性:

1. 如果沒有調試符號文件,那么就不能查看堆棧—這話好像有點多余。但是很多時候,我們在分析驗尸調試所保存的內存文件的時候,第一步要看檢查的就是,程序崩潰的時候,堆棧是什么樣子的,如果沒有調試符號文件,那我們就什么也做不了了。

2. 那么調試符號文件是如何生成的呢?調試符號文件是由編譯器生成的,因為編譯器負責將文本格式的源代碼文件翻譯成二進制的程序,所以二者之間的映射關系編譯再清楚不過了。每次重新編譯的時候,編譯器都會生成對應的調試符號文件。

生成調試符號文件的命令:

編程語言

編譯器

命令行參數

C#

csc.exe

/debug[:full]

C++/C

cl.exe

/Zi

或者

Link.exe的/debug選項

 

3.例如一個客戶跟你抱怨程序不能工作,出現了嚴重的錯誤(Bug),但是他正在運行的是1.0版本的程序,而你們公司卻已經再開發2.0版本的程序了。由于源代碼一般都不會給客戶,這個時候如果能夠找到原始的1.0 版本的源代碼重新編譯,然后安裝到客戶機重現一下固然是好,但是為什么不直接保存1.0版本的調試符號文件,在調試的時候,直接讓調試器自己去找源代碼呢?這里涉及到符號文件服務器和源代碼文件服務器的合作問題,后面的文章里可能會介紹到。

原文標題:Visual Studio調試之符號文件

鏈接:http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html

【編輯推薦】

  1. 淺析Visual Studio調試中斷點的設置
  2. 圖解VS 2010與.NET 4.0多顯示器支持
  3. VS 2010和.NET 4的多定向支持
  4. 圖解VS 2010和.NET 4起始項目模板
  5. VS 2010和.NET 4第一步:Web.config文件
責任編輯:彭凡 來源: 博客園
相關推薦

2010-04-01 15:10:06

Visual Stud

2010-01-27 10:32:40

Visual Stud

2009-11-24 09:00:02

Visual Stud

2009-10-09 10:21:31

Visual Stud

2010-12-14 09:15:50

Visual Stud

2009-09-04 09:39:15

Visual Stud

2009-04-23 14:05:28

Visual Stud歷史調試功能

2013-08-01 15:12:03

Visual Stud

2010-01-14 14:12:14

Visual Stud

2010-02-23 09:02:00

Visual Stud

2010-12-16 10:00:20

QtVisual Stud

2009-11-23 14:32:55

Visual Stud

2009-12-04 10:35:56

Visual Stud

2009-12-03 15:58:33

Visual Stud

2010-03-19 16:43:37

Visual Stud

2011-09-01 16:13:37

Visual StudSQL Server 存儲過程

2012-09-17 13:49:31

2010-02-05 09:06:17

Visual Stud

2023-02-02 09:33:04

Linux控制臺程序

2009-12-04 11:17:00

Visual Stud
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费在线观看av网站 | 久久夜色精品国产 | www.中文字幕.com | 九色网址| 欧洲亚洲一区二区三区 | 国产精品免费一区二区 | 一级毛片视频 | 国产欧美久久精品 | 国产黄色大片 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美狠狠操 | 中文字幕亚洲精品 | 日韩伦理一区二区 | 男人av在线播放 | 日韩精品在线视频免费观看 | 久久一二区| 色综合一区二区三区 | 国产精品日本一区二区不卡视频 | h片免费在线观看 | 国产精品高潮呻吟久久 | 色婷婷综合成人av | 欧美激情久久久 | 国色天香成人网 | 99久久久久久 | 久久91精品 | 日本a级大片 | 三级成人在线 | 武道仙尊动漫在线观看 | 国产精品99视频 | 久久久久国产一区二区三区 | 国产视频线观看永久免费 | 久久久久久久久久久久久久国产 | 精品国产乱码久久久久久蜜退臀 | 色吧色综合 | 亚洲一区二区在线播放 | 国内自拍视频在线观看 | 国产精品久久久99 | 99re视频在线 | 国产一区亚洲 | 久久99精品久久久久久国产越南 | 成人二区|