成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊我是怎么調試代碼的?

開發 前端
關于crash問題我一般都是先看crash的報錯,再查看堆棧信息,基本70%的crash問題都可以通過查看堆棧信息來定位,剩下的我一般都是結合log或者調試工具一起看。

[[408796]]

本文轉載自微信公眾號「程序喵大人」,作者程序喵大人。轉載本文請聯系程序喵大人公眾號。

相信大家對如何調試代碼很感興趣。我也很感興趣,但是自己屬實也不知道啥高端調試技巧,這里拋磚引玉一波,介紹下自己常用的代碼調試手段,大家有更好的調試手段歡迎在留言區留言,不要私藏。

如何定位crash問題?

關于crash問題我一般都是先看crash的報錯,再查看堆棧信息,基本70%的crash問題都可以通過查看堆棧信息來定位,剩下的我一般都是結合log或者調試工具一起看。

有的時候crash不會穩定出現在某個地方,這種調試起來比較麻煩,一般都是某塊內存出了問題,比如某個對象其實是構造在0x123456地址上,但是我們卻使用了0x234567地址來調用對象上的相關函數,這種會導致crash,但是不一定每次都crash在相同的地方,這就需要像二分法一樣,分段排查錯誤,縮小復現范圍,然后利用調試工具或log打印某些變量的地址以及變量值等,進而排查問題。

也可通過解core來排查問題,我一般解core都是通過gdb,有的大佬可以非常專業高端的解core,這我基本不怎么了解。。。我主要是做移動端native開發,平時項目中基本用不到解core這種方式。而且現在經常使用XCode調試,真的相當方便。

如何調試邏輯問題?

對于邏輯問題我一般都是打log,也建議大家平時開發過程中在一些關鍵的地方都打上log,開發過程中可能比較麻煩,但如果真的出了邏輯性的問題,而且又不是穩定復現,又沒有對應的log信息,那真的相當麻煩。所以老鐵們,多打log,不要嫌麻煩,log在關鍵時刻能起很大作用。

當然邏輯問題也可以使用gdb或者lldb打斷點的方法來調試,在某些關鍵地方打上斷點,然后查看某些變量的值,也可以使用某些IDE調試,我一般使用XCode來打斷點進行調試。但這種方法有個缺點,如果程序Release出去后出現了邏輯問題,調試起來就比較麻煩,所以建議還是多打一些log。

如何調試內存問題?

內存問題常見的就是內存泄漏啦,關于內存泄漏我一般都是先寫個自己的內存檢測的小工具用在項目中,C語言的話那就用宏覆蓋malloc和free函數,C++的話那就重寫operator new 和 operator delete函數,這里可以看我之前寫過的文章我擼了個內存泄漏檢測工具,只用了兩招

關于內存問題還有兩個重磅調試工具要推薦,valgrind和asan,valgrind想必大家都知道也都用過,其實大家也可以多用下asan,它是gcc自帶的工具,非常方便,關于asan可以看我這篇文章Linux如何調試內存泄漏

如何調試死鎖問題?

如果合理使用C++11的RAII風格的鎖或者更現代的std::scope_lock,那基本不會發生死鎖。但如果真發生了死鎖,怎么調試呢?可以使用IDE直接查看當前各個線程的堆棧信息,看哪兩個線程處在wait狀態,那基本上是這兩個線程發生了死鎖。

還可以使用gdb+deadlock.py的方式,deadlock.py是個檢測死鎖的python腳本,可以在gdb中執行,如果真的發生了死鎖,直接執行腳本就可以檢測出來,代碼太長不好貼出來,deadlock.py的代碼和使用方式,可以后臺回復deadlock獲取。

如何進行性能分析?

關于性能分析我其實更多的還是在代碼中打印函數耗時,關于怎么優雅的打印函數耗時可以移步這里RAII妙用之計算函數耗時。再推薦個性能分析的工具,gperftools,這個工具是Google出品,可以提供整個程序的熱點分布圖,方便我們找到性能的瓶頸。

如何寫可靠的代碼?

想要寫好代碼,做好靜態檢測是必須的,它可以按照某些設定好的代碼規則,幫助我們檢測代碼的潛在缺陷,找到代碼中隱藏的錯誤,比如參數不匹配、有歧義的嵌套語句、錯誤的遞歸、非法計算、空指針問題、越界問題、未初始化問題、內存泄漏問題等等。這里推薦個工具Clang-Tidy,還有個代碼檢測的平臺叫SonarCube,也非常好用。具體可以看:這么多性能調優工具,看看你知道幾個?

如何打log?

C++里想打log基本上都會使用log庫,有些大佬是自己擼的,有的是使用第三方庫,我工作中更多用到的是glog,glog挺好用,但它性能較低,這里推薦使用spdlog,spdlog基本是現代C++中最火的一個第三方log庫,功能完備,性能較高,值得推薦。

如何進行網絡調試

不用多說,tcpdump+wireshark。

如何進行單元測試?

也不用多說,直接上gtest吧。這里強調一下,盡量寫代碼之前先寫好測試用例,先想好怎么測試后再開始動手寫代碼。

 

歐了,打完收工。

 

責任編輯:武曉燕 來源: 程序喵大人
相關推薦

2022-10-27 06:48:23

sourcemap源碼Element

2022-10-19 11:17:35

2024-05-31 09:31:00

2021-08-07 07:23:08

Webpack中間件模型

2021-02-02 10:53:16

Python編程開發

2020-12-16 08:33:58

Excel數據分析FineBI

2020-11-23 07:00:38

代碼美顏 格式化

2021-02-22 09:30:09

go開發環境桌面系統

2012-05-24 14:58:55

開源代碼

2020-10-20 10:14:01

JVM內存模型

2023-02-07 09:37:08

流計算

2021-03-28 20:58:25

Go語言線程

2024-01-22 10:18:32

平臺工程開發人員技術

2021-06-04 20:13:06

Ymljavaerk8s

2021-09-22 05:55:18

Eslint disble算法

2015-01-28 13:10:55

2019-11-25 09:29:42

團隊項目經驗

2013-06-08 14:12:13

程序員招聘

2021-10-20 09:20:40

手機定位互聯網位置服務

2013-05-02 09:36:44

代碼項目
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区国产在线观看 | 91网站在线看 | av网站在线看| 黄色操视频 | 三级黄视频在线观看 | 亚洲成人一级 | 国产免费一区二区 | 国产午夜高清 | 久久高清免费视频 | 亚洲成人中文字幕 | 精品一区视频 | 亚洲福利视频一区二区 | 久久久婷婷 | 欧美一区二区三区在线播放 | www.黄网 | 国外成人免费视频 | 午夜影院网站 | 伊人狠狠| 黄色一级大片在线免费看产 | 精品久久久久久久久久久久久久 | 美女久久视频 | 97超在线视频 | 欧美成人综合 | 成人性视频在线 | 国产福利91精品一区二区三区 | 男女网站免费观看 | 日本久久久影视 | 性精品| 在线亚洲一区二区 | 亚州av在线 | 亚洲人成人网 | 欧美激情久久久 | 91精品久久久久久久久久入口 | 一区视频在线 | 国产区高清| 国产精品成人久久久久 | 九九久久久 | 欧美a区 | 久久综合久色欧美综合狠狠 | 成人中文字幕av | 一区二区三区在线播放 |