国产chinesehdxxxx老太婆,办公室玩弄爆乳女秘hd,扒开腿狂躁女人爽出白浆 ,丁香婷婷激情俺也去俺来也,ww国产内射精品后入国产

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

段錯(cuò)誤以及調(diào)試方法

技術(shù)讓夢想更偉大 ? 來源:CSDN-文曲盡墨琛乃缺 ? 2023-02-21 09:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一.段錯(cuò)誤產(chǎn)生的原因

段錯(cuò)誤就是訪問了不可訪問的內(nèi)存,出現(xiàn)了運(yùn)行時(shí)出現(xiàn)了segmentation fault的報(bào)錯(cuò)

產(chǎn)生的原因:訪問不存在的內(nèi)存地址、訪問系統(tǒng)保護(hù)的內(nèi)存地址 、訪問只讀的內(nèi)存地址、空指針廢棄(eg:malloc與free釋放后,繼續(xù)使用)、堆棧溢出、內(nèi)存越界(數(shù)組越界,變量類型不一致等)

二. 使用GDB逐步查找段錯(cuò)誤

首先加上命令行得先加上-g -rdynamic的參數(shù)進(jìn)行編譯,eg:gcc -g rdynamic xxx.c 隨著gdb ./a.out

eg:70750666-b17b-11ed-bfe3-dac502259ad0.png

運(yùn)行結(jié)果

70cd1e32-b17b-11ed-bfe3-dac502259ad0.png很明顯,都不用一步步的調(diào)試,后面幾行就顯示了出錯(cuò)位置。 并且進(jìn)程還收到了SIGSEGV信號(hào)而結(jié)束,而SIGSEGV默認(rèn)的handler的動(dòng)作是打印“段錯(cuò)誤”的出錯(cuò)信息,并產(chǎn)生core文件。

三. 分析core文件

什么是core文件 Core文件其實(shí)就是內(nèi)存的映像,當(dāng)程序崩潰時(shí),存儲(chǔ)內(nèi)存的相應(yīng)信息,主用用于對程序進(jìn)行調(diào)試。 當(dāng)程序崩潰時(shí)便會(huì)產(chǎn)生core文件,其實(shí)準(zhǔn)確的應(yīng)該說是core dump 文件,默認(rèn)生成位置與可執(zhí)行程序位于同一目錄下,文件名為core. Core的意思是內(nèi)存, Dump的意思是扔出來;core dump又叫核心轉(zhuǎn)儲(chǔ), 當(dāng)程序運(yùn)行過程中發(fā)生異常, 程序異常退出時(shí), 由操作系統(tǒng)把程序當(dāng)前的內(nèi)存狀況存儲(chǔ)在一個(gè)core文件中, 叫core dump.

如何使用

gdb-ccore文件路徑[應(yīng)用程序的路徑]
1

進(jìn)去后輸入where回車, 就可以顯示程序在哪一行當(dāng)?shù)舻? 在哪個(gè)函數(shù)中。
但是core文件的生成跟你當(dāng)前系統(tǒng)的環(huán)境設(shè)置有關(guān)系, 可以用下面的語句設(shè)置一下, 然后再運(yùn)行程序便成生成core文件ulimit -c ulimited; 輸入命令

ulimit-c//查是否為0,是0就不生成core文件
ulimit-c1000//ulimit-culimited,改變數(shù)值,限制系統(tǒng)的core文件大小
12

eg 70fe1ab4-b17b-11ed-bfe3-dac502259ad0.png

四.段錯(cuò)誤時(shí)啟動(dòng)調(diào)試

(gdb)bt71216cd0-b17b-11ed-bfe3-dac502259ad0.png二,三,四都是在基于系統(tǒng)上的gdb的前提進(jìn)行的。如果沒有,glibc為我們提供了此類能夠dump棧內(nèi)容的函數(shù)簇,詳見/usr/include/execinfo.h

五. 利用backtrace和objdump進(jìn)行分析

eg714f51e0-b17b-11ed-bfe3-dac502259ad0.png71afb7ec-b17b-11ed-bfe3-dac502259ad0.png

運(yùn)行結(jié)果

71ee1f78-b17b-11ed-bfe3-dac502259ad0.png

這里得提一下,需要用到庫

運(yùn)行結(jié)果似乎沒上面幾種方式的信息多,清晰;但是還沒完,我們再用objdump反匯編程序,找到上面地址對應(yīng)的代碼位置。

objdump -d a.out找到對應(yīng)main 0x5601a75e0b0f對應(yīng)的代碼位置

72108a54-b17b-11ed-bfe3-dac502259ad0.png

backtrace函數(shù)
backtrace函數(shù)的作用:當(dāng)程序出現(xiàn)異常,段錯(cuò)誤,崩潰的情況下,會(huì)收到內(nèi)核發(fā)送給進(jìn)程的異常信號(hào),會(huì)把程序的堆棧信息打印出來。

intbacktrace(void**buffer,intsize)
//該函數(shù)獲取當(dāng)前線程的調(diào)用堆棧,獲取的信息將會(huì)被存放在buffer中,它是一個(gè)指針數(shù)組,參數(shù)size用來指定buffer中可以保存多少個(gè)void*元素。函數(shù)的返回值是實(shí)際返回的void*元素個(gè)數(shù)。buffer中的void*元素實(shí)際是從堆棧中獲取的返回地址。
char**backtrace_symbols(void*const*buffer,intsize)
//該函數(shù)將backtrace函數(shù)獲取的信息轉(zhuǎn)化為一個(gè)字符串?dāng)?shù)組,參數(shù)buffer是backtrace獲取的堆棧指針,size是backtrace返回值。函數(shù)返回值是一個(gè)指向字符串?dāng)?shù)組的指針,它包含char*元素個(gè)數(shù)為size。每個(gè)字符串包含了一個(gè)相對于buffer中對應(yīng)元素的可打印信息,包括函數(shù)名、函數(shù)偏移地址和實(shí)際返回地址。
//backtrace_symbols生成的字符串占用的內(nèi)存是malloc出來的,但是是一次性malloc出來的,釋放是只需要一次性釋放返回的二級(jí)指針即可。
voidbacktrace_symbols_fd(void*const*buffer,intsize,intfd)
//該函數(shù)與backtrace_symbols函數(shù)功能相同,只是它不會(huì)malloc內(nèi)存,而是將結(jié)果寫入文件描述符為fd的文件中,每個(gè)函數(shù)對應(yīng)一行;該函數(shù)可重入。
1234567

注意事項(xiàng):backtrace_symbols的實(shí)現(xiàn)需要符號(hào)名稱的支持,在gcc編譯過程中需要加入-rdynamic參數(shù);

objdump反匯編碼

objdump-ftest//顯示test的文件頭信息

objdump-dtest//反匯編test中的需要執(zhí)行指令的那些section

objdump-Dtest//與-d類似,但反匯編test中的所有section

objdump-htest//顯示test的SectionHeader信息

objdump-xtest//顯示test的全部Header信息

objdump-stest//除了顯示test的全部Header信息,還顯示他們對應(yīng)的十六進(jìn)制文件代碼
1234567891011

六.段錯(cuò)誤信息的獲取

當(dāng)我們運(yùn)行的時(shí)候,發(fā)先有段錯(cuò)誤segmentation fault時(shí),我們可以通過一些命令進(jìn)行段錯(cuò)誤信息獲取。

-g gcc -g 主要適用于gdb調(diào)試

dmesg 直接輸入命令dmesgdmesg 可以在應(yīng)用程序崩潰時(shí),顯示內(nèi)存中保存的相關(guān)信息。 dmesg 可以查看發(fā)生段錯(cuò)誤的程序名稱、引起段錯(cuò)誤發(fā)生的內(nèi)存地址、指令指針地址、堆棧指針地址、錯(cuò)誤代碼、錯(cuò)誤原因等等。

ldd 命令
查看二進(jìn)制程序的共享鏈接庫依賴,包括庫的名稱、起始地址,這樣可以確定段錯(cuò)誤到底是發(fā)生在了自己的程序中還是依賴的共享庫中。

723dedfa-b17b-11ed-bfe3-dac502259ad0.png

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3125

    瀏覽量

    75270
  • 調(diào)試
    +關(guān)注

    關(guān)注

    7

    文章

    612

    瀏覽量

    34728
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    579

    瀏覽量

    25372
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    679

    瀏覽量

    33995
  • gdb
    gdb
    +關(guān)注

    關(guān)注

    0

    文章

    60

    瀏覽量

    13603

原文標(biāo)題:段錯(cuò)誤以及調(diào)試方法

文章出處:【微信號(hào):技術(shù)讓夢想更偉大,微信公眾號(hào):技術(shù)讓夢想更偉大】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式C開發(fā)中段錯(cuò)誤的3種調(diào)試方法

    相信大家在嵌入式C開發(fā)中,或多或少都會(huì)遇到錯(cuò)誤(segmentation fault )。昨天分享了一個(gè)總線錯(cuò)誤的例子:嵌入式軟件中,關(guān)于總線錯(cuò)誤,我?guī)湍銈儾攘诉@些坑!相比總線
    發(fā)表于 07-11 09:42 ?449次閱讀
    嵌入式C開發(fā)中段<b class='flag-5'>錯(cuò)誤</b>的3種<b class='flag-5'>調(diào)試</b><b class='flag-5'>方法</b>

    LCD屏幕的調(diào)試方法以及遇到的問題是什么?

    LCD屏幕的調(diào)試方法以及遇到的問題是什么?
    發(fā)表于 01-19 07:02

    HardFault錯(cuò)誤調(diào)試的定位方法是什么

    HardFault 錯(cuò)誤調(diào)試定位方法1、首先更改 startup.s 的啟動(dòng)文件,把里面的 HardFault_Handler 代碼換成下面的代碼:HardFault_Handler
    發(fā)表于 02-15 07:22

    網(wǎng)管配置通道環(huán)和復(fù)用環(huán)方法

      網(wǎng)管配置方法   通道保護(hù)調(diào)試步驟   復(fù)用保護(hù)調(diào)試步驟   復(fù)用保護(hù)配置注意事項(xiàng)
    發(fā)表于 09-10 16:19 ?0次下載

    mplab icd3錯(cuò)誤消息及解決方法

    MPLAB ICD 3在線調(diào)試器會(huì)產(chǎn)生許多不同的錯(cuò)誤消息;其中一些錯(cuò)誤消息比較特殊而其他的都可以用常規(guī)糾正措施解決。MPLAB ICD 3在線調(diào)試器會(huì)產(chǎn)生許多不同的
    發(fā)表于 10-22 11:52 ?2.2w次閱讀

    chipscope使用教程以及FPGA在線調(diào)試方法

    本文檔內(nèi)容介紹了基于chipscope使用教程以及FPGA在線調(diào)試方法,供參考
    發(fā)表于 03-02 14:09 ?9次下載

    keil中常見的各種錯(cuò)誤警告以及相應(yīng)的解決方法資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是簡單整理的keil中常見的各種錯(cuò)誤警告以及相應(yīng)的解決方法
    發(fā)表于 03-08 08:00 ?14次下載
    keil中常見的各種<b class='flag-5'>錯(cuò)誤</b>警告<b class='flag-5'>以及</b>相應(yīng)的解決<b class='flag-5'>方法</b>資料說明

    Labview編程錯(cuò)誤調(diào)試與處理工具的使用說明

    Labview編程錯(cuò)誤調(diào)試與處理工具
    的頭像 發(fā)表于 08-05 06:04 ?2737次閱讀

    linux C用戶態(tài)調(diào)試追蹤函數(shù)調(diào)用堆棧以及定位錯(cuò)誤

    一般察看函數(shù)運(yùn)行時(shí)堆棧的方法是使用GDB(bt命令)之類的外部調(diào)試器,但是,有些時(shí)候?yàn)榱朔治龀绦虻腂UG,(主要針對長時(shí)間運(yùn)行程序的分析),在程序出錯(cuò)時(shí)打印出函數(shù)的調(diào)用堆棧是非常有用的。
    發(fā)表于 05-16 17:36 ?1037次閱讀
    linux C用戶態(tài)<b class='flag-5'>調(diào)試</b>追蹤函數(shù)調(diào)用堆棧<b class='flag-5'>以及</b>定位<b class='flag-5'>段</b><b class='flag-5'>錯(cuò)誤</b>

    錯(cuò)誤調(diào)試神器 - Core Dump詳解

    一、前言: 有的程序可以通過編譯, 但在運(yùn)行時(shí)會(huì)出現(xiàn)Segment fault(錯(cuò)誤). 這通常都是指針錯(cuò)誤引起的. 但這不像編譯錯(cuò)誤一樣會(huì)提示到文件某一行, 而是沒
    發(fā)表于 04-02 14:34 ?1484次閱讀

    Linux環(huán)境下段錯(cuò)誤的產(chǎn)生原因及調(diào)試方法小結(jié)

    dmesg可以在應(yīng)用程序crash掉時(shí),顯示內(nèi)核中保存的相關(guān)信息。如下所示,通過dmesg命令可以查看發(fā)生錯(cuò)誤的程序名稱、引起錯(cuò)誤發(fā)生的內(nèi)存地址、指令指針地址、堆棧指針地址、
    的頭像 發(fā)表于 04-30 15:23 ?2748次閱讀

    什么是錯(cuò)誤?

    來源:聚優(yōu)致成 一、什么是錯(cuò)誤?一旦一個(gè)程序發(fā)生了越界訪問,cpu 就會(huì)產(chǎn)生相應(yīng)的保護(hù),于是 segmentation fault 就出現(xiàn)了,通過上面的解釋,錯(cuò)誤應(yīng)該就是訪問了不可
    的頭像 發(fā)表于 09-11 14:04 ?1.7w次閱讀

    單片機(jī)硬錯(cuò)誤排查方法

    HardFault 錯(cuò)誤調(diào)試定位方法1、首先更改 startup.s 的啟動(dòng)文件,把里面的 HardFault_Handler 代碼換成下面的代碼:HardFault_Handler
    發(fā)表于 12-16 16:54 ?0次下載
    單片機(jī)硬<b class='flag-5'>錯(cuò)誤</b>排查<b class='flag-5'>方法</b>

    錯(cuò)誤是什么意思?是何原因引起的?

    剛接觸指針的時(shí)候,經(jīng)常會(huì)遇到錯(cuò)誤。所謂錯(cuò)誤,就是訪問了不能訪問的內(nèi)存。
    的頭像 發(fā)表于 02-13 09:41 ?4004次閱讀

    AN028 Cortex-M3內(nèi)核HardFault錯(cuò)誤調(diào)試定位方法

    AN028 Cortex-M3內(nèi)核HardFault錯(cuò)誤調(diào)試定位方法
    發(fā)表于 02-27 18:32 ?0次下載
    AN028 Cortex-M3內(nèi)核HardFault<b class='flag-5'>錯(cuò)誤</b><b class='flag-5'>調(diào)試</b>定位<b class='flag-5'>方法</b>