![](/img/trans.png)
[英]Is it possible to enforce standard behavior with Visual Studio 2013 C++?
[英]Visual Studio C++ 2013 Debugger Erratic Step Behavior
我正在使用Visual Studio C ++ 2013 Express Edition調試C ++應用程序,而我的調試器卻異常地跳過了程序某些區域中的代碼行。 這是一些背景信息。 和我觀察到的行為
這是我嘗試解決的問題
我會對任何針對這種情況的一般建議感興趣。 我已經在同一個項目上工作了很長時間,但從未遇到過這個問題。 當我完成一個全新的項目后,當它持續存在時,我感到非常驚訝,我想知道是什么原因造成的。
編輯:僅供參考,我的應用程序中根本沒有花哨的東西。 除了標准庫外,我沒有包含任何其他外部庫。 沒有多個線程或自定義構建設置。 相對於創建一個新的,空的,原始的Visual Studio項目時的默認設置,一切都非常標准。
該問題也可能是由混合的行尾引起的。 在這里看看。 切勿在源文件中混合不同的行尾(Linux樣式:LF'\\ n',Mac OS最高版本9:CR'\\ r',Windows:CRLF'\\ r \\ n')。 將代碼從其他位置復制/粘貼到源文件時,請務必小心。
轉到Visual Studio中的“高級保存選項”,然后選擇行尾並保存文件。
您的信息聽起來像2問題之一:源列表和調試信息或優化副作用之間的同步問題。
我假設這不是同步問題,因為您刪除了所有臨時文件並重新啟動。
編譯器可能已執行了一些嚴重的優化,導致可執行文件與清單不匹配。
這里有些例子。
刪除空函數編譯器和鏈接器開發人員最喜歡的是刪除不包含任何內容或不使用的函數。 這對符號調試器造成了嚴重破壞,因為源代碼表示該函數存在,但是編譯器/鏈接器已將其刪除。
編譯器創建通用代碼
編譯器可能已將函數之間的通用代碼分解為因子。 包含常用指令的新功能通常放在模塊的末尾。 這使調試器感到困惑,因為沒有與新代碼匹配的行號,或者有多個引用新代碼的行號。
編譯器重寫您的代碼
我曾經發生過這種情況。 匯編語言列表未顯示源代碼的匯編代碼,因為編譯器決定重寫該代碼。 一個很好的例子是內聯。 我有一個5次迭代的簡單循環,編譯器用5個循環內容的副本替換了for
循環。 與源代碼清單不匹配,因此調試器感到困惑。
組裝清單中的真相
事實在匯編清單中。 如果發布函數的匯編語言或匯編語言和C ++語言的交織列表,我們可以為您提供調試器跳轉原因的更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.