程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++斷點無效解決方案

C++斷點無效解決方案

編輯:C++入門知識

C++作為一款功能強大的計算機編程語言,可以幫助我們輕松的完成許多功能需求。不過在這樣的語言編程中,如果處理不當,同樣也會出現一些問題。在這裡我們就給出了C++斷點無效的解決方案。

  • C++字符串類型基本概念概述
  • C++參數傳遞一般應用方式講解
  • C++連接SQL數據庫分步驟進行
  • C++中英文字符串基本概念解析
  • C++名字空間基本內容講述

最近遇到一個vs2008 C++中斷點無法工作的問題,具體表現為:

1. 某個修改後,斷點無法工作,之前版本依然正常

2. 只是某個文件中斷點無法工作

3. 斷點打在 引用另外DLL中的類對象A

文件結構:

  1. Core.dll   
  2. A.cpp   
  3. class A   
  4. {   
  5. public:   
  6. A( )  
  7. {   
  8. printf("constructor of a");  
  9. }   
  10. }   
  11. UI.dll   
  12. Manager.cpp   
  13. class Manager  
  14. {   
  15. public:   
  16. Manager( )  
  17. {   
  18. printf("constructor of Manager");  
  19. }   
  20. }   
  21. Button.cpp   
  22. A ins; // 斷點打在這裡   
  23. Run.exe   
  24. void main()   
  25. {   
  26. Manager ins; // 實例化   

這裡發現A根本不會被C runtime在執行main之前構造,因此造成了C++斷點無效。已經排除特殊字符影響的原因,按照網上的方法是,將文件保存為UNICODE,問題依舊。開始用排除隔離法確定問題位置,最後發現這樣一個規律:

只要在Manager.cpp裡構造一個Button

Button insB;

這樣做了以後,斷定必定能起作用。因此推斷CRT層的全局構造是需要一個鏈表來推動的。因為Manager需要構造,因此CRT肯定會掃描這個CPP對應OBJ鏈接到exe裡的段,讓這個段裡的全局構造函數都初始化,但是Button因為沒有使用,因此也不會構造。這樣局部掃描應該是出於效率。

解決這個C++斷點無效問題還有一個方法就是全部使用靜態鏈接方式,這樣構造代碼都放到最後的exe中,就不會出現這樣的問題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved