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

聊聊我是怎么調(diào)試代碼的?

開(kāi)發(fā) 前端
關(guān)于crash問(wèn)題我一般都是先看crash的報(bào)錯(cuò),再查看堆棧信息,基本70%的crash問(wèn)題都可以通過(guò)查看堆棧信息來(lái)定位,剩下的我一般都是結(jié)合log或者調(diào)試工具一起看。

[[408796]]

本文轉(zhuǎn)載自微信公眾號(hào)「程序喵大人」,作者程序喵大人。轉(zhuǎn)載本文請(qǐng)聯(lián)系程序喵大人公眾號(hào)。

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

如何定位crash問(wèn)題?

關(guān)于crash問(wèn)題我一般都是先看crash的報(bào)錯(cuò),再查看堆棧信息,基本70%的crash問(wèn)題都可以通過(guò)查看堆棧信息來(lái)定位,剩下的我一般都是結(jié)合log或者調(diào)試工具一起看。

有的時(shí)候crash不會(huì)穩(wěn)定出現(xiàn)在某個(gè)地方,這種調(diào)試起來(lái)比較麻煩,一般都是某塊內(nèi)存出了問(wèn)題,比如某個(gè)對(duì)象其實(shí)是構(gòu)造在0x123456地址上,但是我們卻使用了0x234567地址來(lái)調(diào)用對(duì)象上的相關(guān)函數(shù),這種會(huì)導(dǎo)致crash,但是不一定每次都crash在相同的地方,這就需要像二分法一樣,分段排查錯(cuò)誤,縮小復(fù)現(xiàn)范圍,然后利用調(diào)試工具或log打印某些變量的地址以及變量值等,進(jìn)而排查問(wèn)題。

也可通過(guò)解core來(lái)排查問(wèn)題,我一般解core都是通過(guò)gdb,有的大佬可以非常專(zhuān)業(yè)高端的解core,這我基本不怎么了解。。。我主要是做移動(dòng)端native開(kāi)發(fā),平時(shí)項(xiàng)目中基本用不到解core這種方式。而且現(xiàn)在經(jīng)常使用XCode調(diào)試,真的相當(dāng)方便。

如何調(diào)試邏輯問(wèn)題?

對(duì)于邏輯問(wèn)題我一般都是打log,也建議大家平時(shí)開(kāi)發(fā)過(guò)程中在一些關(guān)鍵的地方都打上log,開(kāi)發(fā)過(guò)程中可能比較麻煩,但如果真的出了邏輯性的問(wèn)題,而且又不是穩(wěn)定復(fù)現(xiàn),又沒(méi)有對(duì)應(yīng)的log信息,那真的相當(dāng)麻煩。所以老鐵們,多打log,不要嫌麻煩,log在關(guān)鍵時(shí)刻能起很大作用。

當(dāng)然邏輯問(wèn)題也可以使用gdb或者lldb打斷點(diǎn)的方法來(lái)調(diào)試,在某些關(guān)鍵地方打上斷點(diǎn),然后查看某些變量的值,也可以使用某些IDE調(diào)試,我一般使用XCode來(lái)打斷點(diǎn)進(jìn)行調(diào)試。但這種方法有個(gè)缺點(diǎn),如果程序Release出去后出現(xiàn)了邏輯問(wèn)題,調(diào)試起來(lái)就比較麻煩,所以建議還是多打一些log。

如何調(diào)試內(nèi)存問(wèn)題?

內(nèi)存問(wèn)題常見(jiàn)的就是內(nèi)存泄漏啦,關(guān)于內(nèi)存泄漏我一般都是先寫(xiě)個(gè)自己的內(nèi)存檢測(cè)的小工具用在項(xiàng)目中,C語(yǔ)言的話(huà)那就用宏覆蓋malloc和free函數(shù),C++的話(huà)那就重寫(xiě)operator new 和 operator delete函數(shù),這里可以看我之前寫(xiě)過(guò)的文章我擼了個(gè)內(nèi)存泄漏檢測(cè)工具,只用了兩招

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

如何調(diào)試死鎖問(wèn)題?

如果合理使用C++11的RAII風(fēng)格的鎖或者更現(xiàn)代的std::scope_lock,那基本不會(huì)發(fā)生死鎖。但如果真發(fā)生了死鎖,怎么調(diào)試呢?可以使用IDE直接查看當(dāng)前各個(gè)線程的堆棧信息,看哪兩個(gè)線程處在wait狀態(tài),那基本上是這兩個(gè)線程發(fā)生了死鎖。

還可以使用gdb+deadlock.py的方式,deadlock.py是個(gè)檢測(cè)死鎖的python腳本,可以在gdb中執(zhí)行,如果真的發(fā)生了死鎖,直接執(zhí)行腳本就可以檢測(cè)出來(lái),代碼太長(zhǎng)不好貼出來(lái),deadlock.py的代碼和使用方式,可以后臺(tái)回復(fù)deadlock獲取。

如何進(jìn)行性能分析?

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

如何寫(xiě)可靠的代碼?

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

如何打log?

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

如何進(jìn)行網(wǎng)絡(luò)調(diào)試

不用多說(shuō),tcpdump+wireshark。

如何進(jìn)行單元測(cè)試?

也不用多說(shuō),直接上gtest吧。這里強(qiáng)調(diào)一下,盡量寫(xiě)代碼之前先寫(xiě)好測(cè)試用例,先想好怎么測(cè)試后再開(kāi)始動(dòng)手寫(xiě)代碼。

 

歐了,打完收工。

 

責(zé)任編輯:武曉燕 來(lái)源: 程序喵大人
相關(guān)推薦

2022-10-27 06:48:23

sourcemap源碼Element

2022-10-19 11:17:35

2021-08-07 07:23:08

Webpack中間件模型

2024-05-31 09:31:00

2021-02-02 10:53:16

Python編程開(kāi)發(fā)

2020-12-16 08:33:58

Excel數(shù)據(jù)分析FineBI

2020-11-23 07:00:38

代碼美顏 格式化

2021-02-22 09:30:09

go開(kāi)發(fā)環(huán)境桌面系統(tǒng)

2021-06-04 20:13:06

Ymljavaerk8s

2024-01-22 10:18:32

平臺(tái)工程開(kāi)發(fā)人員技術(shù)

2012-05-24 14:58:55

開(kāi)源代碼

2020-10-20 10:14:01

JVM內(nèi)存模型

2023-02-07 09:37:08

流計(jì)算

2021-03-28 20:58:25

Go語(yǔ)言線程

2021-09-22 05:55:18

Eslint disble算法

2013-06-08 14:12:13

程序員招聘

2021-10-20 09:20:40

手機(jī)定位互聯(lián)網(wǎng)位置服務(wù)

2015-01-28 13:10:55

2019-11-25 09:29:42

團(tuán)隊(duì)項(xiàng)目經(jīng)驗(yàn)

2013-05-02 09:36:44

代碼項(xiàng)目
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产福利视频导航 | 色综合一区二区 | 国产精品久久av | 欧美日韩在线观看视频 | 羞羞视频网站免费观看 | 久久精品福利视频 | 成人a视频片观看免费 | 日韩中文一区二区三区 | 日韩精品一区在线 | 久久一区二区三区四区 | 激情五月综合网 | 国产精品一区二区久久精品爱微奶 | 亚洲欧美日韩成人在线 | 国产成人精品网站 | 97色在线视频 | 亚洲欧美综合 | 国产成人精品高清久久 | 97精品国产97久久久久久免费 | 久久久久久亚洲精品 | 国产伦一区二区三区视频 | 亚洲一区国产精品 | 国产欧美精品一区二区三区 | 国产精品一区二区在线 | 欧美xxxx性xxxxx高清 | 国产1区2区| 国产一区二区精品在线 | 国产成人精品视频在线观看 | 一级毛片免费 | 99视频在线免费观看 | 亚洲精品一区二区三区中文字幕 | 国产91在线 | 欧美 | 久久久久久艹 | 精品日韩一区 | 美女操网站 | 成人性生交大片免费看r链接 | 草比网站 | 久久久久久综合 | 丁香婷婷成人 | 久久久久久久久久爱 | 99久久精品免费看国产高清 | 国产成人在线视频 |