bug調試要根據應用場景和條件,選擇什么樣子的調試方式很大程度上不是你想選擇什么樣的調試方式,而是還剩下什么樣子的調試方式可用。下面就根據不同的場景和條件來總結一下。
目錄:
1、gdb調試或者IDE自帶的調試工具
2、堆棧調用
3、日志打印
4、信號函數捕捉
5、代碼靜態檢測Cppcheck
6、內存泄漏檢測valgrind
7、bugly \ breakpad
--------------------------------------正文---------------------------------------------
1、gdb調試或者IDE自帶工具調試
最初級,用的最多的調試方式,適用於便開發邊調試,無需多言。
https://www.cnblogs.com/wangkeqin/p/12489912.html
2、堆棧調用
適用於隱藏比較深的bug,有時調試模式中意外崩潰,或者程序運行中意外崩潰都可以使用堆棧來查看崩潰。windows中使用VS可以在崩潰中打開堆棧,查看堆棧調用關系。linux端運行中的程序崩潰了,如果需要查看堆棧,需要coredump文件,需要將coredump設定打開。
https://www.cnblogs.com/wangkeqin/p/12493307.html
3、日志打印
適用於不能調試,或者事務類的程序。一般用於追蹤程序運行過程或者運行中的數據監控。可以自己寫一個日志庫,當然也有有很多知名的開源日志庫,例如大名鼎鼎的glog。
4、打印堆棧——信號函數捕捉
利用信號鈎子函數,獲取堆棧信息,然后在日志中打印:
https://blog.csdn.net/Zhanganliu/article/details/88965491
配合addr2line命令 :(待寫一篇文章寫清楚兩者的使用)
5、代碼靜態檢測Cppcheck
代碼寫好編譯過程中輸出信息會有很多的warning,看似問題不大的warning往往在實際應用場景中會變成定時炸彈。如果選擇用肉眼去修復查找這些warning在實際的工程中缺乏可行性。騰訊出品的Cppcheck是一款非常趁手的靜態代碼檢測工具,可以幫助發現潛在的錯誤。
linux 命令行:https://www.jianshu.com/p/d71729b0981d
windows: https://blog.csdn.net/hellokandy/article/details/83302859
當然還有一些其他工具也非常優秀,這里給出對比鏈接。
https://blog.csdn.net/lovespring116/article/details/73504190
6、內存泄漏檢測——Valgrind:
主要用於檢測運行態的程序,主要針對野指針、內存泄漏等。這里直接給出鏈接:
https://www.oschina.net/translate/valgrind-memcheck
7、bugly \ breakpad
bugly出於騰訊,主要用於移動端的日志上傳,當然如果說是C++的SDK和java/oc混編的程序。C++ SDK中的崩潰信息也可以抓到。breakpad出於google。可以多平台使用。
應用安裝到用戶那里,什么應用場景下會出問題,不得而知。單純的日志有時顯得蒼白無力,幸好有bugly、breakpad這樣的工具可以使用,讓我們在問題發生后能夠有效的分析問題。
https://www.cnblogs.com/MakeView660/p/6077436.html
https://www.jianshu.com/p/295ebf42b05b
最后,如有錯誤,歡迎指正!如有缺漏,歡迎補充!