在除錯程式的時候,碰到乙個奇怪的段錯誤問題。只要鏈結的時候使用-wl,-rpath=./vlc/lib
就會產生段錯誤,如果鏈結的時候使用的是-wl,-rpath=../../tool/vlc/lib
則不會出現。
機器是老舊的neokylin 4.0
版本,沒有安裝gdb(實際上也不可能去安裝)。無法除錯,所以在程式裡多新增了一些列印輸出,終於定位到產生段錯誤的位置。
輸出查了一些資料
這裡說在posix系統上,sigchld
訊號不能被忽略,即訊號處理程式必須設定為sig_dfl
(預設處理)或函式指標,而不能是sig_ign
(忽略)。
還有libvlc可以建立執行緒。 因此,任何執行緒不安全
的程序初始化必須在呼叫libvlc_new()
之前執行。
但是這裡沒有說到重點,這些都不是產生段錯誤的原因。
真正的原因是因為vlc存在外掛程式快取,需要重新整理外掛程式快取才行。
在vlc/lib/vlc/plugins
下存在乙個plugins.bat
檔案,cat這個檔案可以發現其中大部分都是普通文字,少數是非文字內容。
通過網路搜尋,找到這篇文章,真正的說明了問題
自己編譯的vlc,vlc-cache-gen
程式實際上在vlc/lib/vlc/vlc-cache-gen
。執行下面命令即可
export ld_library_path=$ld_library_path:./vlc/lib
./vlc/lib/vlc/vlc-cache-gen ./vlc/lib/vlc/plugins/
然後就沒有問題 段錯產生原因及除錯技巧
產生段錯誤是因為訪問了不該訪問的空間,比如 1 對空指標 指向位址為null的指標 進行操作。2 對野指標 未被初始化的指標 進行操作。3 陣列越界。4 用指針對陣列進行操作,指標偏移到了陣列長度之外。5 對唯讀空間進行操作,比如,操作.rodata空間區域,字串常量 如字串 hello 便是儲存在...
onvif 段錯除錯辦法
希望對大家有幫助 來自於 1 開啟onvif除錯開關,以便讓onvif列印一些可用的除錯資訊。在makefile中新增除錯巨集定義如 cc gcc ddebug 2 開啟除錯巨集後,預設在程式執行的目錄產生三個檔案 recv.log sent.log test.log recv.log是onvif接...
巢狀呼叫易錯問題
general.h內容如下 pragma once include h1.h include struct tt 再建乙個h1.h 檔案,內容如下 include general.h using namespace std void print tt t main.cpp裡面呼叫 print 函式,...