codeblock無法進行除錯,沒有符號表被讀取。請使用 "file" 命令。
在codeblock中出現:沒有符號表被讀取。請使用 "file" 命令。
也就是編譯沒有錯誤,但無法進行斷點除錯。
出現這種錯誤原因有3:
1. 編譯出的debug下的可執行檔案,在除錯載入時可能在release目錄下找,自然無法找到,因而出此錯。
2.在編譯的時候
gcc -g hello.c -o hello
我沒有加-g,所以gdb的時候報錯
3.如下解釋:
在VS2010編譯x264(20091006)中我們用vs2010編譯了x264,但是過程很複雜,而且版本還是09年的,今天我將介紹在linux下編譯最新版的x264,而且可以除錯,近距離觀察h264編碼實現的每個細節。
1.下載x264原始碼
cd ~
git clone git://git.videolan.org/x264.git
這裡我用git來下載最新的原始碼,也可以訪問官網手動下載:ftp://ftp.videolan.org/pub/videolan/x264/snapshots/
2.安裝yasm
因為x264原始碼中有一些程式是用匯編寫的,這樣可以提高編碼效能,所以在編譯的時候需要一個彙編直譯器。 如果用的是ubuntu系統的話可以使用sudo apt-get install yasm
來安裝,但由於更新源的問題安裝的是0.8版本的yasm,而最新的x264要求的最低版本是1.0。沒辦法只能手動安裝了,官網下載地址:
http://yasm.tortall.net/Download.html
下載最新版的Source.tar.gz,解壓安裝
tar xzvf yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure
make && make install
3.安裝Code::Blocks
為了能夠好的除錯x264原始碼,我們需要一個IDE,在此我推薦Code::Blocks,在ubuntu自帶的軟體中心搜尋安裝即可。
4.建立x264工程
開啟Code::Blocks,File->New->Project->Empty Progect->Go,Next,輸入名稱和路徑,這裡要和x264的路徑一致,比如我的
Next->Finish!
接下來開始配置工程,右鍵工程->Properties,補完Makefile的路徑,選上“This is a customer file”,確定。
再次右鍵工程進入Properties,點選右下角Project's build option,在Make commands選項卡中把所有$target去掉,確定。右鍵工程->Build Option->Make commands,去掉所有$target,確定。
然後把一些主要的檔案加到工程裡去,比如x264.c。
4.1.Build
Build->Build,或者ctrl+F9,編譯x264,0 errors, 0 warnings,在x264資料夾下生成x264可執行檔案和一些過程檔案。4.2.Debug
首先在x264.c的main函式里加幾個斷點。Debug->Start,出現錯誤:沒有符號表被讀取。請使用 "file" 命令。
這是由於x264可執行檔案路徑錯誤造成的,一般code blocks工程預設的編譯路徑是在bin/debug/x264,而我們是用Makefile編譯的,x264檔案就在當前目錄下,gdb自然找不到檔案了。解決的方法有兩種:修改Makefile和修改codeBlocks的預設路徑。因為Makefile是原始碼自帶的,所以我選擇修改codeBlocks。
右鍵工程->Properties->Build targets,在output filename裡把路徑改成當前資料夾,確定。
Debug->Start,再次出錯:no debugging symbols found 。
這是因為在x264可執行檔案中沒有除錯符號,這也是Debug版和Release版的區別,因為codeBlocks是根據Makefile編譯的,所以要想加入除錯資訊就必須修改Makefile的配置。執行終端,
cd ~/x264
./configure --enable-debug
之後會重新生成Makefile檔案,Rebuild工程,Debug->Start,接下來就可以Next Line了。