拿到代碼之后,由於項目需要調用so庫,因此希望可以斷點進入c/c++代碼進行單步調試。
源代碼是通過Application.mk和Android.mk來控制so的生成,而源代碼很多且依賴關系也比較復雜,因此不打算新寫cmakelists.txt
根據網上各種文檔、資料修改配置,始終不能單步進入C代碼。
最后下載ndk后,編譯出so文件,替換到對應的目錄,單步進入成功。
第二天,打算整理代碼結構,不把昨天測試時亂七八糟的代碼加入版本控制,結果不能單步調試了!
重復昨天的操作好幾次,始終是不能進入so庫。
將昨天的代碼和今天的代碼直接對比文件夾,每一個不相同的文件都檢查了一遍,沒有找到可能引起問題的地方
修改的地方包括但不限於
但是修改之后,都不能恢復斷點進入so庫
此時就陷入僵局了,理論上生成的數據只和配置有關系,但是現在配置一模一樣了……
考慮到C的經驗,認為可能是缺少符號文件導致的。
使用硬辦法,人工檢查不相同的地方
最后發現了一個其它文章都沒有提到的問題,拷貝的so庫!!!!!
可以看到libs文件夾下的so文件明顯小於obj下的so文件
將obj下的so庫拷貝到工程文件重新編譯,進入成功!
單步調試存在以下問題
1.單步運行時,會出現亂序的問題,不能保證是和c代碼完全一致
2.不能懸浮顯示變量值,只能在窗口中查看
3.不能保證每台機器均可以單步調試,根據個人的測試,使用虛擬機pixel3a下可以單步,但是會出現亂序
在華為榮耀暢玩7下則表現的可以直接下斷點查看變量值,但是不能單步運行