c程式段錯誤及效能調查
1.段錯誤---gdb
gdb絕對是linux c中的除錯利器,用gdb將程式掛起,在出現段錯誤的時候會自動停止,這個時候輸入bt,檢視函式呼叫棧,就會看到在呼叫到具體哪個函式時候出問題的,結合列印指令p檢視變數值,一般都是訪問了錯誤的記憶體。
gdb的使用在網上有很詳細的資料,這裡就部具體介紹了,除了調查段錯誤,gdb還有掛起執行緒的作用,可以單獨除錯執行緒,可以說是除錯中的屠龍刀倚天劍。
程式執行效能低,想看看具體是在哪裡耗時了,就輪到strace、ltrace登場了
2.效能---strace、ltrace
strace可以跟蹤程式,檢視程式執行情況,加上-C引數在程式退出時可以看到最耗時的處理是哪個;ltrace和strace大同小異,是用來檢視程式呼叫系統介面的情況。
3.cpu佔用率高
對於多執行緒的程式來說可能是某個執行緒佔用了較多的cpu,使用top命令,然後按h即可看到各個執行緒佔用cpu的情況,然後找出佔用cpu最高的執行緒,使用gdb掛起該執行緒(attach命令)檢視具體是哪裡的處理,然後再做優化。
相關推薦
c程式段錯誤及效能調查
在linux c開發中經常會遇到各種問題,的確很令人頭疼,下面總結一下我用到的調查方法: 1.段錯誤---gdb gdb絕對是linux c中的除錯利器,用gdb將程式掛起,在出
C++/C程式記憶體佈局及函式棧結構
一:系統的程式佈局圖: 二、詳解: 程式空間: 包括.txt程式碼段,.data資料段, .bss段,堆段,棧段。程式的地址從低往高。堆空間增長方向從低地址往高地址增長。 棧空間從高地址往低地址方向增長。從左往右方向為單位元組增長方向。
VS2010 C++程式編譯錯誤 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file 解決方案
原文:https://blog.csdn.net/name_david_lee/article/details/39991013 'C:\Windows\SysWOW64\ntdll.dll', Cannot find or open the PDB file 'C
執行Double DQN程式出現錯誤及解決辦法
出現錯誤: ValueError: Variable Natural_DQN/eval_net/l1/w1 already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarSc
C語言 段錯誤Segmentation Fault
問題: 執行程式的時候丟擲了Segmentation Fault 原因: 寫了個死迴圈 名詞簡釋: Segmentation Fault:所謂的段錯誤就是指訪問的記憶體超過了系統所給這個程式的記憶體空間 備註:後續會不斷補充這個問題遇到的情況
stack smashing detected,程式段錯誤
stack smashing detected,程式段錯誤 今天在寫程式的時候,突然出現"stack smashing detected"的錯誤.用經常用的除錯方法,GDB,語句輸出等均不能定位問題的
C語言 --段錯誤(核心已轉儲)
文章原地址:https://blog.csdn.net/qq_29350001/article/details/53780697 (侵刪欠)一、什麼是段錯誤?一旦一個程式發生了越界訪問,cpu 就會產生相應的保護,於是 segmentation fault 就出現了,通過上面
微信小程式常見錯誤及基本排除方法
也歡迎大家把自己常用的排除方法列舉在這,一起互相學習探討! 1:ES6;使用es6可能導致安卓端真機除錯時很多問題出現,還有其他未知問題;原因未知; 2:字母拼錯,包括字母拼寫錯誤,大小寫沒有注意;微信小程式中,有大量這樣的程式碼示例,從中間冒出一個大寫,比如支付中的appId 3:官方文件示例程式碼有誤,有
VS 中引入app.manifest(c#程式在win7及以上windows版本下以管理員許可權執行方法)
開啟VS2005、VS2008、VS2010、VS2012、VS2013、VS2015工程,檢視工程資料夾中的Properties資料夾下是否有app.manifest這個檔案;如沒有,按如下方式建立:滑鼠右擊工程在選單中選擇“屬性”,點選工程屬性的“安全性”標籤,在安全性
Microsoft Visual Studio 2017:第一個C++程式的建立及執行
VS2017用的比較少,以防忘記怎麼用,就寫寫步驟 1 新建 1.1 選單欄:檔案 –> 新建 –>專案,如圖: 1.2 如圖,選擇Visual C++,接著選擇空專案,然後修改專案名稱和專案路徑,在選確定 1.3 在右側面板中可
Linux段錯誤及GDB Coredump除錯方法
最近在Linux環境下做C語言專案,由於是在一個原有專案基礎之上進行二次開發,而且專案工程龐大複雜,出現了不少問題,其中遇到最多、花費時間最長的問題就是著名的“段錯誤”(Segmentation Fault)。藉此機會系統學習了一下,這裡對Linux環境下的段錯誤做個小結,
Android的native可執行程式段錯誤跟蹤和解決
週末碰到一個問題,Android可執行程式段錯誤,如何定位呢。仔細檢視段錯誤如下 ... 1-07 06:10:29.240: I/DEBUG(2319): backtrace: 01-07 06:10:29.240: I/DEBUG(2319): #00 pc
淺析linux kernel段錯誤及除錯手段
oops,kernel panic, Segmentationfault。相信跟linux kernel打交道的人都會遇到過這些核心提示。根據嚴重性不一樣可以分為:警告,驚慌,還有段錯誤——也就是我們平常遇到的核心崩潰的情況。對於oops和kernel panic而言,事
C語言常見錯誤及程式碼中英文對照
分析:變數名、陣列名重名error c2082:redefinition of formal parameter'xxx'分析:一般是定義陣列或引用陣列元素時下標不正確中文對照:(編譯錯誤)操作符需要左值分析:標頭檔案不存在、或者標頭檔案 ...
C/C++捕獲段錯誤,打印出錯的具體位置(精確到哪一行
其實還可以使用 glibc 的 backtrace_symbols 函式,把棧幀各返回地址裡面的數字地址翻譯成符號描述的 背景知識: · 在linux/unix中的訊號處理機制,知道signal函式與sigaction的區別 · 段錯誤的概念,CPU中斷處理的步驟,中斷向量表的分類 · 知道CPU Exc
C++常見記憶體錯誤及解決方案
轉自 本文作者:Tocy e-mail: [email protected] C++中記憶體錯誤通常屬於執行時錯誤,只有在程式執行時才能發現,編譯器無法自動檢測到記憶體錯誤。多數情況下是程式邏輯或者引數存在某些錯誤。下面總結一下C++常見的記憶體錯誤: 1. 記憶體洩露 記
linux應用程式設計筆記(1)gdb除錯方法及如何找出dbg.c程式中的錯誤
摘要: 介紹了gdb偵錯程式以及其使用流程,總結了常用的幾個gdb除錯命令,最後使用這些方法找出dgb.c檔案中的錯誤。 一、gdb簡介 gdb是gnu釋出的一款功能強大的程式除錯工具,其主
你的java/c/c++程式崩潰了?揭祕段錯誤(Segmentation fault)(3)
前言 接上兩篇: 寫到這裡,越跟,越發現真的是核心上很白,非一般的白。 但是既然是研究,就定住心,把段錯誤搞到清楚明白。 本篇將作為終篇,來結束這個系列,也算是對段錯誤和程式除錯、尋找崩潰原因(通常不會給你那麼完美的stackstrace和人性化的錯
Linux下執行C++程式出現“段錯誤(核心已轉儲)”的原因
轉載自:http://www.linuxidc.com/Linux/2015-09/122966.htm 今天Linux下寫程式出現了“段錯誤(核心已轉儲)"的問題,查了一下資料,加上自己的實踐,總結了以下幾個方面的原因。 1.記憶體訪問出錯 這類問題的典型代表就是陣列越界。 2.非法記憶體訪問 出現這類問
C語言中“段錯誤”出現的場景
oca auth pan clas log ted start 符號 cnblogs 1 /************************************************************************* 2 > Fil