1. 程式人生 > >codeblock無法進行除錯,沒有符號表被讀取。請使用 "file" 命令。

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原始碼

  1. cd ~
  2. git clone git://git.videolan.org/x264.git

這裡我用git來下載最新的原始碼,也可以訪問官網手動下載:ftp://ftp.videolan.org/pub/videolan/x264/snapshots/

2.安裝yasm

因為x264原始碼中有一些程式是用匯編寫的,這樣可以提高編碼效能,所以在編譯的時候需要一個彙編直譯器。 如果用的是ubuntu系統的話可以使用
  1. sudo apt-get install yasm

來安裝,但由於更新源的問題安裝的是0.8版本的yasm,而最新的x264要求的最低版本是1.0。沒辦法只能手動安裝了,官網下載地址:
http://yasm.tortall.net/Download.html
下載最新版的Source.tar.gz,解壓安裝

  1. tar xzvf yasm-1.2.0.tar.gz
  2. cd yasm-1.2.0
  3. ./configure
  4. make && make install

3.安裝Code::Blocks

為了能夠好的除錯x264原始碼,我們需要一個IDE,在此我推薦Code::Blocks,在ubuntu自帶的軟體中心搜尋安裝即可。

4.建立x264工程

開啟Code::Blocks,File->New->Project->Empty Progect->Go,Next,輸入名稱和路徑,這裡要和x264的路徑一致,比如我的code blocks x264 project

Next->Finish!
接下來開始配置工程,右鍵工程->Properties,補完Makefile的路徑,選上“This is a customer file”,確定。code block setting

再次右鍵工程進入Properties,點選右下角Project's build option,在Make commands選項卡中把所有$target去掉,確定。make commands右鍵工程->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裡把路徑改成當前資料夾,確定。code blocks build targets

Debug->Start,再次出錯:no debugging symbols found 。
這是因為在x264可執行檔案中沒有除錯符號,這也是Debug版和Release版的區別,因為codeBlocks是根據Makefile編譯的,所以要想加入除錯資訊就必須修改Makefile的配置。執行終端,

  1. cd ~/x264
  2. ./configure --enable-debug

之後會重新生成Makefile檔案,Rebuild工程,Debug->Start,接下來就可以Next Line了。