首頁 資料庫 mysql教程 VS2010 调试技巧

VS2010 调试技巧

Jun 07, 2016 pm 03:48 PM
http vs2010 技巧 偵錯

http://blog.csdn.net/xiaoxian8023/article/details/7217549 最近合作开发,代码已经完成了,但是一调试,错误一大堆,由于是合作开发,不确定是哪层的错误,得一步步得走,很是费时费力,平时调试的技巧用的不多,现在集中调试,结果有些手忙脚乱,效率也

http://blog.csdn.net/xiaoxian8023/article/details/7217549


最近合作开发,代码已经完成了,但是一调试,错误一大堆,由于是合作开发,不确定是哪层的错误,得一步步得走,很是费时费力,平时调试的技巧用的不多,现在集中调试,结果有些手忙脚乱,效率也很低,所以在网上找了一些技巧,整理了一下,分享给大家。它们都很简单,却能帮我们节约大量的时间,希望对大家有帮助。

  跳到当前光标处(Ctrl+F10)

  我经常看到人们为了到达目标代码位置,而在程序中早早设定了断点,然后反复地按F10/F11,一步步走到目标代码处。当程序员的确需要仔细观察每一步的状态变化时, F10/F11是合理的选择。然而多数情况下,人们只想快速到达他们真正关心的代码处,这时候F10/F11就不是最佳选择了。

  这时,你应该利用“跳到当前光标处”这个功能。先把光标定位在要测的目标代码行上,再同时按Ctrl和F10,被测程序将直接跳到该行停下。你再也不用按许多次F10/F11了。即使目标代码位于独立的类或方法中,你仍然可以从当前正在检查的地方跳过去。

  条件中断

  另一种常见的情况是:开发人员设置断点,运行程序,利用不同的输入触发断点,然后在断点处手工检查是否满足某些特定的条件,从而决定是否继续调查。如果当前场景不是他们想要的,按F5继续运行程序,尝试别的输入,手动重复刚才的过程。

  针对上述情况,Visual Studio提供了一个方便得多的功能——“条件中断”。只有当程序满足了开发人员预设的条件后,条件断点才会被触发,调试器中断。这将避免频繁地手工检查/恢复程序运行,大量减少调试过程中的手工和烦琐工作。

  如何设置条件断点

  设置条件断点非常容易。在特定的行上,按F9设置断点。

VS2010 调试技巧

  然后右击断点–编辑窗口左侧的红点,在上下文菜单上选择“Condition…”。

VS2010 调试技巧  这时弹出一个对话框供你设置激活该断点所需的条件。比如:我们希望只有当局部变量paginatedDinners的尺寸小于10时,调试才中断。我们可以写出如下的表达式:

VS2010 调试技巧  现在我再运行这个程序,实现搜索,只有返回值小于10时,程序运行才会被中断。对于大于10的值,该断点将被跳过。

  记录到达断点次数

  有时你希望,只有当第N次满足条件的运行到达断点时,才中断程序运行。例如:当第五次返回少于10份晚餐的查询结果时,中断程序运行。
  可以通过右击断点,然后在弹出菜单上选择“Hit count…”菜单命令实现。

VS2010 调试技巧

  这时系统弹出一个对话框,它允许你指定:(1)当满足条件,而且进入断点的累计次数等于N时,断点命中一次。(2)当满足条件,而且进入断点的累计次数是N的倍数时,断点命中一次。(3)当满足条件,而且进入断点的累计次数大于N时,每次命中断点。
VS2010 调试技巧

  机器/线程/进程过滤

  设置如下:右击断点;在弹出菜单上选择“Filter…”菜单命令;然后指定命中断点的特定条件:在指定的机器上、或指定的进程中、或指定的线程中。

  跟踪点—进入断点时的自定义操作

  许多人不知道“跟踪点(TrackPoints)”这个调试功能。“跟踪点“是种特殊的断点,当它被命中时,它会触发一系列自定义操作。如果你想观察程序的行为,而又不想中断调试的时候,这个功能尤其有用。

  我将用一个简单的控制台程序来演示如何使用“跟踪点”。如下是斐波那契数列的一个递归实现:

VS2010 调试技巧

  以上程序中,我们使用Console.WriteLine() 输出针对特定输入值生成的最终斐波那契数列。如果希望在调试器里观察操作中每一次递归运算后的数列而又不实际中断程序运行,该怎么办呢?“跟踪点”可以轻松实现。

  设置跟踪点

  你可以在特定的行上,按F9加跟踪点。然后
  右击断点,在上下文菜单中选择“When Hit…”:

VS2010 调试技巧

  在弹出对话框上,你可以设置命中该断点时,所触发的事件。

VS2010 调试技巧

  在上面例子中,我们设定一旦命中断点时就打印追踪信息。注意,我们已经把局部变量“x”的值,作为追踪信息的一部分输出。局部变量可以通过{变量名}语法输出。你还可以利用系统内置的命令($CALLER, $CALLSTACK, $FUNCTION等等),在追踪信息中输出常用的调试值。

  在上例中,我们同时选中了底端的“continue execution“选项,这说明我们不希望程序中断调试状态,而是继续运行。唯一的不同是:每次断点条件满足时,我们的自定义追踪信息都将被输出。

  现在当我们运行程序时,会发现自定义追踪信息自动显示在Visual Studio的“输出“窗口里。这让我们很容易看到程序的递归调用过程:

VS2010 调试技巧

  你也可以选择往应用程序中添加一个自定义追踪信息的监听器。这时追踪点的输出信息将通过它输出,而不是Visual Studio的“输出“窗口。

  跟踪点—运行自定义的宏

  上周,我在伦敦演讲时,有听众问道:当命中跟踪点时,能否自动输出所有的局部变量?

  Visual Studio中并没有这样的内置功能,但我们可以写一个自定义宏来实现,然后在命中跟踪点时调用该宏。这个的实现需要先打开Visual Studio的宏编辑器(工具->宏->宏IDE菜单命令),然后在项目资源管理器的MyMacros节点下选择一个模块或创建新模块(如:加个名为“UsefulThings”的模块),再把下面的VB宏代码贴到模块中并保存。

<p><span>Sub DumpLocals()
Dim outputWindow As EnvDTE.OutputWindow
outputWindow </span><span>=</span><span> DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object

Dim currentStackFrame As EnvDTE.StackFrame
currentStackFrame </span><span>=</span><span> DTE.Debugger.CurrentStackFrame

outputWindow.ActivePane.OutputString(“</span><span>*</span><span>Dumping Local Variables</span><span>*</span><span>” </span><span>+</span><span> vbCrLf)
For Each exp As EnvDTE.Expression In currentStackFrame.Locals
outputWindow.ActivePane.OutputString(exp.Name </span><span>+</span><span> ” </span><span>=</span><span> ” </span><span>+</span><span> exp.Value.ToString() </span><span>+</span><span> vbCrLf)
Next
End Sub</span></p>
登入後複製

  上述宏代码将循环当前的堆栈,把所有的局部变量输出到“输出”窗口。

  使用自定义的“DumpLocals”宏

  然后,我们可以在如下的一个简单程序中使用刚定制的“DumpLocals”宏了:

VS2010 调试技巧

  上述代码中,我们用F9在“Add”方法的返回值处加了个断点,然后右击断点,在弹出菜单上选择“When hit”。

VS2010 调试技巧

  将显示如下对话框。和之前不一样, 我们不选“Print a message”选项,也不手工设定需要输出的变量;而是选择“Run a marco”复选框,并指定到我们上面创建的UsefulThings.DumpLocals宏上:

VS2010 调试技巧

  为了使程序能在命中跟踪点后仍继续运行,我们将继续选中“continue execution”复选框。

  运行程序

  现在按F5运行程序,当“Add”方法被调用时,我们会在Visual Studio的“输出”窗口中看到如下结果。注意命中跟踪点时,宏会自动列出每个局部变量的名称和值:

VS2010 调试技巧

或者在代码中写有Debug.Print() 语句来输出想查看的数据,在vs调试状态下我们可以再vs的OutPut窗口看见,同上图。

  利用数据提示功能(DataTips)

当程序执行到某一个位置,把鼠标放到变量上,会自动显示值。

VS2010 调试技巧

  利用可视化调试窗体(DebuggerVisualizers)

举一个DataTable的DebuggerVisualizers的例子:

VS2010 调试技巧

直接点击放大镜的图标,或者下拉列表中选择DataTable Visualizer,即可打开可视化的界面:如下图

VS2010 调试技巧

当然如果是DateSet,可视化工具窗口的表可以选择DataSet所包含的所有表的信息。



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C++ 函式偵錯詳解:如何偵錯多執行緒函數中的問題? C++ 函式偵錯詳解:如何偵錯多執行緒函數中的問題? May 02, 2024 pm 04:15 PM

C++多執行緒偵錯可使用GDB:1.啟用偵錯資訊編譯;2.設定斷點;3.使用infothreads查看執行緒;4.用thread切換執行緒;5.使用next、stepi、locals調試。實戰案例調試死鎖:1.使用threadapplyallbt列印堆疊;2.檢查執行緒狀態;3.單步執行主執行緒;4.使用條件變數協調存取來解決死鎖。

如何使用LeakSanitizer調試C++記憶體洩漏? 如何使用LeakSanitizer調試C++記憶體洩漏? Jun 02, 2024 pm 09:46 PM

如何使用LeakSanitizer調試C++記憶體洩漏?安裝LeakSanitizer。透過編譯標誌啟用LeakSanitizer。運行應用程式並分析LeakSanitizer報告。識別記憶體分配類型和分配位置。修復記憶體洩漏,確保釋放所有動態分配的記憶體。

golang 函數調試和分析的捷徑 golang 函數調試和分析的捷徑 May 06, 2024 pm 10:42 PM

本文介紹了Go函數調試和分析的捷徑,包括:內建偵錯器dlv,用於暫停執行、檢查變數、設定斷點。日誌記錄,使用log包記錄訊息,在調試時查看。效能分析工具pprof,產生呼叫圖並分析效能,使用gotoolpprof分析資料。實戰案例:透過pprof分析記憶體洩漏,產生呼叫圖顯示導致洩漏的函數。

Java 並發程式設計如何進行並發測試與除錯? Java 並發程式設計如何進行並發測試與除錯? May 09, 2024 am 09:33 AM

並發測試和調試Java並發程式設計中的並發測試和調試至關重要,以下技術可供使用:並發測試:單元測試:隔離並測試單一並發任務。整合測試:測試多個並發任務之間的交互作用。負載測試:評估應用程式在高負載下的效能和可擴展性。並發調試:斷點:暫停線程執行並檢查變數或執行程式碼。日誌記錄:記錄線程事件和狀態。堆疊追蹤:識別異常源頭。視覺化工具:監視執行緒活動和資源使用情況。

如何調試 PHP 非同步程式碼 如何調試 PHP 非同步程式碼 May 31, 2024 am 09:08 AM

調試PHP非同步程式碼的工具包括:Psalm:靜態分析工具,可發現潛在錯誤。 ParallelLint:檢查非同步程式碼並提供建議的工具。 Xdebug:用於偵錯PHP應用程式的擴展,可透過啟用會話並逐步執行程式碼來偵錯。其他技巧還包括使用日誌記錄、斷言、局部運行程式碼和編寫單元測試。

如何使用C++實作HTTP流傳輸? 如何使用C++實作HTTP流傳輸? May 31, 2024 am 11:06 AM

如何在C++中實現HTTP流傳輸?使用Boost.Asio和asiohttps客戶端程式庫建立SSL流套接字。連接到伺服器並發送HTTP請求。接收HTTP響應頭並列印它們。接收HTTP回應正文並列印它。

Java函數中遞歸呼叫的調試技巧有哪些? Java函數中遞歸呼叫的調試技巧有哪些? May 05, 2024 am 10:48 AM

以下技術可用於偵錯遞歸函數:檢查堆疊追蹤設定調試點檢查基本情況是否正確實現計算遞歸呼叫的次數可視化遞歸堆疊

PHP 偵錯錯誤:常見錯誤的指南 PHP 偵錯錯誤:常見錯誤的指南 Jun 05, 2024 pm 03:18 PM

常見的PHP偵錯錯誤包括:語法錯誤:檢查程式碼語法,確保沒有錯誤。未定義變數:在使用變數之前,請確保已將其初始化並賦值。缺少分號:為所有程式碼區塊加上分號。函數未定義:檢查函數名稱拼字是否正確,並確保已載入正確的檔案或PHP擴充。

See all articles