VS 工具-选项对话框 调试选项相关学习总结
生活随笔
收集整理的這篇文章主要介紹了
VS 工具-选项对话框 调试选项相关学习总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
只要一個進程中斷,就中斷所有進程
c#中總是提示“在代碼運行時或者在禁用“只要一個進程中斷,就中斷所有進程”選項時,不允許進行更改。
但是根據它提示的修改方法,還是提示這個。
“此選項可在“工具”->“選項”->“調試”中啟用。”
根本不起作用,后來試著,要這樣操作:
工具->選項->調試->編輯并繼續->啟用編輯并繼續
不選擇“啟用編輯并繼續”,這樣就OK啦,
========
VS2010調試之“編輯并繼續”
http://blog.csdn.net/xiaoxian8023/article/details/7220590? ? ? ? 程序的調試是任何一個程序必做的“功課”,當然在調試的過程中肯定會或多或少的遇
到一些問題。如果每次關掉,修改,然后在啟動,浪費不少時間和經歷,尤其是在不確定的
情況下嘗試修改,啟動的次數會更多。如果你要調試的系統太大,做優化有關“股票”軟件
計算算法的那樣,光初始化就需要5分鐘左右,無疑是個晴天霹靂,估計沒幾個人想去調試它
。
? ? ? ?如果在調試的過程中,可以修改代碼,那就可以節省很多時間了。VS2010提供了這些
功能,而且是默認開啟的。如果你不小心關掉了,請跟著我重新設置一遍吧。
? ? ? ?首先要開啟“編輯并繼續”功能,當然并不是VS2010的任何版本都可以用的,詳情請
看:
開啟很簡單,打開“工具”—》“調試”—》“編輯并繼續”—》勾選 啟用“編輯并繼續”?
即可。需要注意的是,在調試過程中不可以更改此設置。
?
? ? ? ?當然現在也不一定就可以了直接使用“編輯并繼續”功能了,說說我遇到的問題,在調
試過程中,當程序運行到斷點以后,想要更改程序,卻不能更改。不過好在彈出了一個對話
框,給我指明了“前進”方向:
按著對話框中的提示,找到調試-常規里的“一個進程中斷時則中斷所有進程”,勾選后確定
即可。
?
不過,我的操作系統是64位的,還遇到了另外一個問題,在修改時,提示“不允許對64位應
用程序進行更改”。
一開始我還以為是對64位的“優待”呢,不過一定有人有辦法可以解決。在百度上沒有搜到
,然后就去msdn上找,還真找到了。MSDN上這樣解釋的:
(http://msdn.microsoft.com/zh-cn/library/ba77s56w.aspx 或
http://msdn.microsoft.com/en-us/library/ba77s56w.aspx)
按著提示,右擊項目,選擇“屬性”,在左側點擊“編譯”選項,然后在最下面找到“高級
編譯選項”,打開后,將目標CPU修改為x86。如圖:
做如此修改后,終于可以在調試的時候,修改程序了。大大節省了調試的時間。
當然調試技巧也是不可或缺的,有興趣的朋友可以閱讀的上一篇博文:《VS2010調試技巧》
========
Visual Studio調試之符號文件
http://www.cnblogs.com/killmyday/archive/2009/10/14/1582882.html前面在不能設置斷點的檢查步驟和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版本的調試符號文件,在調試的時候,直接讓調試器
自己去找源代碼呢?這里涉及到符號文件服務器和源代碼文件服務器的合作問題,后面的文
章里可能會介紹到。
========
選項”對話框 ->“調試”->“常規”
?https://msdn.microsoft.com/zh-cn/vstudio/85yzd16c(v=vs.89)若要了解有關 Visual Studio 2017 RC 的最新文檔,請參閱 Visual Studio 2017 RC 文檔。
“工具”/“選項”/“調試”/“常規”頁允許你設置以下選項:
在刪除所有斷點之前詢問
在完成“刪除所有斷點”命令前需要進行確認。
一個進程中斷時則中斷所有進程
發生一個中斷時,同時中斷調試器連接到的所有進程。
當異常跨越應用域或托管/本機邊界時中斷
在托管或混合模式調試中,如果滿足以下條件,公共語言運行時可能會捕獲跨越應用程序域
邊界或托管/本機邊界的異常:
1) 當本機代碼使用 COM 互操作調用托管代碼而托管代碼卻引發異常時。 請參閱 COM 互
操作介紹。
2) 當在應用程序域 1 中運行的托管代碼調用應用程序域 2 中的托管代碼,而應用程序域 2?
中的代碼卻引發異常時。 請參閱 使用應用程序域編程。
3) 當代碼使用反射調用一個函數而該函數卻引發異常時。 請參閱 反射。
在第 2) 和 3) 條中,異常有時由 mscorlib 中的托管代碼而不是公共語言運行時捕獲。 此選
項不影響在 mscorlib 捕獲到異常時中斷。
啟用地址級調試
啟用在地址級上進行調試的高級功能(“反匯編”窗口、“寄存器”窗口和地址斷點)。
源代碼不可用時顯示反匯編
在你嘗試調試源不可用的代碼時自動顯示“反匯編”窗口。
啟用斷點篩選器
允許你在斷點上設置篩選器,使其僅影響特定的進程、線程或計算機。
啟用異常助手
僅用于托管代碼。 托管異常打開“異常助手”對話框。 請參閱 Exception Assistant。
在未經處理的異常上展開調用堆棧
導致“調用堆棧”窗口將調用堆棧回滾到未經處理的異常發生之前的時間點。
啟用“僅我的代碼”
調試器僅顯示和單步執行用戶代碼(“我的代碼”),而忽略系統代碼和其他經過優化或沒
有調試符號的代碼。
在變量窗口中顯示非用戶對象的所有成員(僅限 Visual Basic)
啟用非用戶代碼(不是“我的代碼”)中對象內的非公共成員的顯示。
啟動時若沒有用戶代碼則發出警告
如果在調試時啟用“僅我的代碼”,此選項會在沒有用戶代碼(“我的代碼”)的情況下發
出警告。
啟用 .NET Framework 源代碼單步執行
允許調試器單步執行 .NET Framework 源代碼。 自動啟用此選項會禁用“僅我的代
碼”,.NET Framework 符號將下載到緩存位置。 可以在“選項”對話框“調試”類別下的
“符號”頁中更改緩存位置。
逐過程執行屬性和運算符(僅限托管)
使調試器無法單步執行托管代碼中的屬性和運算符。
啟用屬性求值和其他隱式函數調用
在變量窗口和“快速監視”對話框中打開屬性的自動求值和隱式函數調用。
在變量窗口中對對象調用字符串轉換函數(僅限 C# 和 JavaScript)
在變量窗口中計算對象時,執行隱式字符串轉換調用。 因此,結果將顯示為字符串而不是類
型名。 僅在 C# 代碼中進行調試時適用。 此設置可以由 DebuggerDisplay 特性重寫(請參
閱 使用 DebuggerDisplay 特性)。
啟用源服務器支持
指示 Visual Studio 調試器從實現 SrcSrv (srcsrv.dll) 協議的源服務器中獲取源文件。 Team?
Foundation Server 和 Windows 的調試工具是實現協議的兩個源服務器。 有關 SrcSrv 設
置的更多信息,請參閱“Windows 的調試工具”文檔。 此外,請參閱 指定符號 (.pdb) 和
源文件。
?System_CAPS_ICON_important.jpg 重要事項
由于讀取 .pdb 文件會執行文件中的任意代碼,因此請確保你信任此服務器。
將源服務器診斷消息打印到輸出窗口
如果啟用源服務器支持,此設置會打開診斷顯示。
允許源服務器中的部分信任程序集(僅限托管)
如果啟用源服務器支持,此設置會重寫不為部分信任的程序集檢索源的默認行為。
為斷點和當前語句突出顯示整個行
調試器突出顯示斷點或當前語句時,會突出顯示整個行。
要求源文件與原始版本完全匹配
指示調試器驗證源文件是否與用于生成正在調試的可執行文件的源代碼版本匹配。 如果版本
不匹配,則會提示你查找匹配源。 如果未找到匹配源,則在調試過程中不會顯示源代碼。
將所有輸出窗口文本重定向到即時窗口
將通常顯示在“輸出”窗口中的所有調試器消息改為發送到“即時”窗口。
在變量窗口中顯示對象的原始結構
關閉所有對象結構視圖自定義。 有關視圖自定義的更多信息,請參閱顯示自定義數據類型。
在模塊加載時取消 JIT 優化(僅限托管)
如果附加調試器,則在加載模塊并編譯 JIT 后,禁用托管代碼的 JIT 優化。 禁用優化可能更
易于調試某些問題,盡管這會降低性能。 如果正在使用“僅我的代碼”,則禁用 JIT 優化會
導致非用戶代碼顯示為用戶代碼(“我的代碼”)。
啟動時若無符號則發出警告(僅限本機)
如果嘗試調試在調試器中沒有對應符號信息的程序,則會顯示警告對話框。
如果啟動時禁用了腳本調試,發出警告
如果在啟動調試器時禁用了腳本調試,則會顯示警告對話框。
加載 DLL 導出
加載 DLL 導出表。 處理 Windows 消息、Windows 過程 (WindowProc)、COM 對象、封
送或不具有其符號的任何 DLL 時,DLL 導出表中的符號信息將很有用。 讀取 DLL 導出信息
會占用一些系統開銷。 因此,默認情況下此功能被禁用。
若要查看 DLL 導出表中的可用符號,請使用 dumpbin /exports。 符號可用于任何 32 位系
統 DLL。 從 dumpbin /exports 輸出中,可以查看到精確的函數名,包括非字母數字字符。?
這對于在函數上設置斷點很有用。 DLL 導出表中的函數名在調試器的其他位置似乎被截斷了
。 調用將按調用順序列出,當前函數(嵌套最深的函數)位于頂端。 有關詳細信息,請參
閱 dumpbin /exports。
自下而上顯示并行堆棧關系圖
控制“并行堆棧”窗口中堆棧的顯示方向。
如果寫入的數據未更改值,則忽略 GPU 內存訪問異常
如果數據未改變,則忽略在調試期間檢測的爭用條件。 有關詳細信息,請參閱 調試 GPU 代
碼。
使用托管兼容模式
將默認調試引擎替換為舊版本,以支持以下方案:
使用除 C#、VB 或 F# 之外,擁有自己的表達式計算器(包括 C++/CLI)的其他 .NET?
Framework 語言。
在執行混合模式調試時,你想要為 C++ 項目啟用“編輯并繼續”。
注意,選擇托管兼容模式會禁用僅可在默認調試引擎中實現的一些功能。
使用本機兼容性模式
選中此選項后,調試器使用 Visual Studio 2010 本機調試器而不是新的本機調試器。
因為新的調試引擎不支持計算 .NET C++ 表達式,因此應在調試 .NET C++ 代碼時使用此
選項。 但是,啟用本機兼容模式會禁用依賴于當前調試器實現來操作的許多功能。 例如,
舊引擎缺少內置類型的很多可視化工具,比如 Visual Studio 2015 項目中的 std::string。?
請在這些情況下使用 Visual Studio 2013 項目以便獲得最佳的調試體驗。
使用舊版 C# 和 VB 表達式計算器
調試器將使用 Visual Studio 2013 C# /VB 表達式計算器,而不是基于 Visual Studio 2015?
Roslyn 的表達式計算器。
當對潛在的不安全代碼使用自定義調試器可視化工具時會發出警告
當你使用在調試對象進程中運行代碼的自定義調試器可視化工具時,Visual Studio 會對你發
出警告,因為它可能在運行不安全代碼。
啟用 Windows 調試堆分配器(僅限本地)
啟用 Windows 調試堆以改進堆診斷。 啟用此選項會影響調試性能。
啟用 XAML 的 UI 調試工具
在開始調試 (F5) 支持的項目類型時,將顯示“實時可視化樹”和“實時屬性資源管理器”窗
口。 有關詳細信息,請參閱 在調試時檢查 XAML 屬性。
預覽實時可視化樹中的所選元素
選定了其上下文的 XAML 元素在“實時可視化樹”窗口中也會被選中。
調試時啟用診斷工具
在進行調試時,將顯示“診斷工具”窗口。 有關詳細信息,請參閱 集成了調試器的診斷。
在調試過程中顯示運行時間PerfTips
在進行調試時,代碼窗口會顯示給定方法調用的運行時間。
啟用“編輯并繼續”
在進行調試時,你可以使用“編輯并繼續”功能。
啟用本機“編輯并繼續”
在調試本機 C++ 代碼時,你可以使用“編輯并繼續”功能。 有關詳細信息,請參閱 編輯并
繼續 (Visual C++)。
在繼續時應用更改(僅限本機)
在從中斷狀態繼續該過程時,Visual Studio 會自動編譯并應用你所做的任何未完成的代碼更
改。 如果未選中,你可以選擇使用調試菜單下的“應用代碼更改”項來應用更改。
就陳舊的代碼發出警告(僅限本機)
收到關于陳舊代碼的警告。
允許預編譯(僅限本機)
允許預編譯。
========
C# 調試方法之即時窗口輸出
http://www.cnblogs.com/clock2008/archive/2011/07/15/2107239.html1,非中斷模式下的調試。
利用系統“輸出”窗口。(視圖-輸出)來打印調試信息。有Debug和Release兩種版本,通
過運行按鈕右邊的選項可以選擇程序的運行方式。而對應的現實調試信息的方法也不同。
注意 :一定要先設置一下IDE的選項,如下圖,多的話就不多說了。
調用前聲明:
using ?System.Diagnostics;
調用方式:
Debug.WriteLine();
Debug.WriteLineIf();//兩個參數,當第一個參數為true時,第二個參數的調試信息會顯示出
來。
Trace.WriteLine();//Release版本,當然Debug中也可以顯示
Trace.WriteLineIf();//同上
除了上述可以通過代碼的方式來進行調試外,還有一種可以再程序中添加跟蹤點的方式。
右鍵代碼行-斷點-插入跟蹤點。
彈出的窗體時輸入顯示信息的,如果顯示變量用{}括起來。
看到跟蹤點是菱形的。
查看所有斷點(包括跟蹤點)在調試-窗口-斷點。
程序運行到跟蹤點時,會打印調試信息的。可以看到當程序以Release方式運行時,是不顯示
信息的。
2,中斷模式的調試
斷點的配置:
遇到斷點立即進入中斷模式。
遇到斷點時如果布爾表達式值為true,就進入中斷模式
遇到斷點時,如果自從上次遇到斷點以來變量的值發生了變化,就進入中斷模式
遇到某斷點一定的次數后,進入中斷模式
遇到斷電時,如果是上次遇到斷點以來變量的值發生了變化,就進入中斷模式
把文本輸出到調試窗口中,或執行一個宏
斷點的添加:
右鍵-插入斷點,或 F9
再次右鍵,可以看到一些配置信息:條件,命中次數等。
調試-窗口-即時窗口
可以輸入指令,求表達式結果等。還可以修改變量值。
========
總結
以上是生活随笔為你收集整理的VS 工具-选项对话框 调试选项相关学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: React 学习总结
- 下一篇: C#语法糖学习总结