代碼無法命中處理
1.首先確認一下,程序的DLL與源碼是否一致,可以編譯之后再進行
2.確認是否有公共的文件存儲常用的DLL,導致程序沒有走最新編譯的DLL
3.VS程序調試時會用到 .pdb文件,是否DLL是最新的但是 .pdb文件不是最新的,刪掉 .pdb文件
上述問題都確認沒有問題,但是斷點可以命中,但是就是無法在斷點處中斷
確認斷點是否真的命中了,我調試程序時,使用的是附加進程的調試方式進行調試的,當我已經附加了進程調試后發現再打斷點,很容易就命中斷點了,但是程序就是不在斷點處中斷
以前遇到過一次這種問題,請教技術經理都沒看出什么問題來,最終我無意間再源碼處多加了幾行空行再編譯突然發現程序能在斷點處中斷了,這個我猜測是否是當程序沒有進行更改代碼,
直接沖i重新編譯是否有無法更新DLL,但是這一次我又遇到了這種斷點命中了,但是就是無法在斷點處中斷。
不停的嘗試,突然發現如果斷點是在附加進程之前進行打上了,在附加了進程之后斷點,變成空心帶黃色的符號,便是其實斷點沒有命中。但是取消未命中斷點,再次在此處打斷點(已經附加上進程)的
情況下,發現還是可以命中斷點。
實在沒有辦法,上網搜索各種答案主要有如下幾種答案:
1.取消源碼匹配(這種方法,不推薦。這個是給新手用的,就算可以解決斷點無法命中的問題,也沒有意義,因為程序實際執行的代碼和我們看到的不一樣,我們也不會知道問題出現在哪。)
附圖:
2.程序進行不在Debug模式下,將程序設置為Debug
附圖:
按照第二種方式設置后,發現還是不行,無法在斷點處中斷
繼續網上搜索答案
3.程序設置了代碼優化,設置了代碼優化將導致調試符號無法加載
附圖:
進行了這一步后還是無法調試,繼續接着改,在我附加進程后,VS下面會有一個輸出窗口,上面有一些信息,大概是pdb無法加載,等等
這種情況按下圖處理
附圖:
這樣處理后,最后再次附加進程調試,各位你們猜,這次成功沒呢?不過我只是附加了進程,但是沒有執行程序跳到斷點處。我發現在附加進程前打的斷點還是無法命中,我取消了上面的啟用源服務設置,再次附加進程,發現可以了,最終能夠運行了,但是最后我不能再程序處中斷到底是什么原因。