文章一c++
今天我筆記本的VC編譯器莫名其妙的就進入不了斷點了,而臺式機確是好的,問題是一進入調試,斷點就自動被取消了,鬱悶了一下午,沒法進入斷點的緣由不少,都有想重裝VC編譯器的打算了,晚上回來查查資料,發現原來是個人VC配置出了問題,解決方法:web
Project -> Setting -> Link數據庫
genreal
selectd「 Generate debug info」服務器
如今把與此問題相關的一些設置和問題的解決方法奉獻給你們:工具
一、ui
Project -> Setting -> c/c++ table->genrealspa
「debug info」 set to 「program database for edit and continue」debug
二、調試
Project -> Setting -> Link->genreal
selectd「 Generate debug info」code
文章二
//************************************************************************//
1.解決方案配置是 Debug ,但沒有在工程屬性頁中「Alt+F7」->「配置屬性」->「C/C++」->「常規」->「調試信息格式」,選擇「用於「編輯並繼續」的程序數據庫(/ZI)」。另外,在「配置屬性」->「連接器」->「調試」->「生成調試信息」中,選擇「是」。
2.解決方案配置是 release ,直接F5調試就能夠,VS會提示你「沒有找到調試信息,要繼續調試嗎?」,選擇「是」便可。
3.檢查工程所在路徑是否是有中文,有VS不支持中文路徑的可能
4.刪掉.ncb和.opt,rebuild all。
5.看是否有:「warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存爲 Unicode 格式以防止數據丟失」警告,把那個cpp文件用記事本打開,另存爲unicode格式,再從新編譯。
6.工具->選項->調試->常規,將」要求源文件與原始版本徹底匹配」的勾取消就能夠了!
//************************************************************************//
文章三
最近一工程中,在調試的時候,有些cpp文件均可以設置斷點而且跟進去,可是有一個cpp文件老是不能設置斷點,提示「當前不會命中斷點。源代碼與原始版本不一樣。」 從新更換過n次文件都不起做用,而後在goole搜索此類相似問題,找到下篇文章,而後我把那個cpp文件用記事本打開,另存爲unicode格式,再從新編譯,最後問題解決!也能夠更改vs2005的設置,選項->常規,將要求源文件與原始版本徹底匹配的勾取消就能夠了!
清理整個解決方案,從新編譯,無效。刪除整個目錄,從SubVersion服務器上Down下來從新來過,同樣無效。上網搜索,未果。鬱悶地放手了。
修一個Bug,提交,而後更新了一下,編譯,運行,發現我也染上這個症狀了——只有那個文件沒法插入斷點。倒有些安心了,看來不是VC的Bug,而是源代碼的問題。把這個文件回滾到更新前的版本,果真就沒問題了。更新到下一個版本,問題就出來了。查看改動,沒瞧出來什麼。突然發現有一個不常見的警告:「warning C4819: 該文件包含不能在當前代碼頁(936)中表示的字符。請將該文件保存爲 Unicode 格式以防止數據丟失」。呵呵,應該就是它了。
警告有兩個,一個是文件的,不帶行號,另外一個帶行號。那一行是一個case語句,最後加了一句中文註釋。把註釋刪掉,問題解決。把代碼拷貝到UltraEdit中看十六進制代碼,逐個字節濾過去,沒發現什麼奇怪的。而後開始逐步逼近問題,把註釋先後漢字逐個拿掉,直到問題消失,最後剩下來的核心詞是「即時消息」,搜索這個詞,果真在整個項目裏只有一個。在這個詞前面增、刪一個空格,問題就消失。鬱悶的是把同一行代碼拷貝到其餘文件、位置都不會有這個問題。
恢復全部改動,更新到最新版本,問題又變了:警告只剩下一個,沒了行號!用插入空格的方法定位問題,發現錯誤向前移動了幾行。並且此次就算把警告消掉,仍是沒法添加斷點。嘗試了好一下子沒有效果,乾脆用VC直接把整個文件格式化了一次,斷點又能夠用了。並且,此次再怎麼插入空格都不會有C4819了。對比了一下修改先後的文件,依然沒有什麼發現。
搜索了一下,其餘人也遇到過C4819,有的是由於Unix換行格式,甚至boost庫中一個非ASCII做者名都會引起這個錯誤,可是這裏應該是中文雙字節字符錯位的問題吧。由於警告等級開到了4,因此各類警告有些氾濫,他們又沒有及時處理,這個警告就被淹沒在警告堆裏了……
另也有:
我也遇到過相同的問題,也是斷點沒法跟進。解決方法是在斷點以前加上MessageBox就能夠了,原理未知