新聞中心
Linux是一種廣泛使用的開源操作系統(tǒng),許多開發(fā)人員使用Linux進行開發(fā)。當你在Linux上編譯代碼時,你可能想要生成一個符號表,以便在調(diào)試代碼時進行調(diào)試。在本文中,我們將研究如何在Linux上編譯生成符號表。

創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元松江做網(wǎng)站,已為上家服務(wù),為松江各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
符號表是編譯器生成的一種數(shù)據(jù)結(jié)構(gòu),它包含了編譯后可執(zhí)行文件中的符號名稱和它們所屬的代碼和數(shù)據(jù)段的地址。當你在調(diào)試程序時,可以使用符號表來確定代碼的行號和變量的名稱,這對于找出錯誤非常有用。
生成符號表的方法
在Linux上,可以使用GNU工具鏈來構(gòu)建應(yīng)用程序和庫。GNU工具鏈是一套開源的工具,用于生成可執(zhí)行程序和庫。在GNU工具鏈中,GCC(GNU C Compiler)是一種C語言編譯器,它可以生成符號表。
這里有三種方法可以生成符號表。
1. 編譯時生成符號表
當你使用GCC編譯程序時,可以添加一個-g選項,以生成符號表。例如:
“`
gcc -g mn.c -o mn
“`
在這個例子中,-g選項告訴GCC生成符號表,并將生成的可執(zhí)行文件命名為mn。如果你想在編譯時生成更詳細的符號表,你可以嘗試使用更高級的-g選項,例如:
“`
gcc -g3 mn.c -o mn
“`
在這個例子中,-g3選項告訴GCC生成高度詳細的符號表。
2. 使用objcopy生成符號表
另一種生成符號表的方法是使用objcopy工具。objcopy是GNU binutils軟件包的一部分,可以用于復(fù)制和轉(zhuǎn)換目標文件。objcopy可以將可執(zhí)行文件中的符號表提取出來,并將其保存到一個獨立的符號表文件中。例如:
“`
objcopy –only-keep-debug mn mn.debug
“`
在這個例子中,objcopy命令從主程序mn中提取符號表,并將其保存到一個名為mn.debug的獨立文件中。這個文件可以用來在調(diào)試時進行調(diào)試。
3. 使用strip生成符號表
最后一種生成符號表的方法是使用strip工具。strip是GNU binutils軟件包的一部分,可以用于從可執(zhí)行文件和目標文件中刪除符號表和調(diào)試信息。但是,你可以使用strip將符號表保存到一個單獨的文件中。例如:
“`
strip –only-keep-debug mn -o mn.debug
“`
在這個例子中,strip命令從主程序mn中刪除符號表和調(diào)試信息,并將符號表保存到一個名為mn.debug的獨立文件中。
使用符號表進行調(diào)試
生成符號表之后,你可以使用GDB(GNU調(diào)試器)來調(diào)試你的程序。使用GDB的步驟如下:
1. 運行GDB,指定程序和符號表文件:
“`
gdb mn -s mn.debug
“`
在這個例子中,gdb命令告訴GDB用mn作為可執(zhí)行文件,并使用mn.debug作為符號表文件。
2. 開始調(diào)試:
“`
(gdb) start
“`
這個命令會啟動程序,并在之一行暫停執(zhí)行。
3. 使用GDB命令進行調(diào)試,例如設(shè)置斷點:
“`
(gdb) break mn.c:10
“`
這個命令會在mn.c文件的第10行設(shè)置一個斷點。
4. 繼續(xù)執(zhí)行程序:
“`
(gdb) continue
“`
這個命令會繼續(xù)執(zhí)行程序,直到達到斷點。
5. 在程序執(zhí)行時監(jiān)視變量的值:
“`
(gdb) watch my_variable
“`
這個命令會監(jiān)視名為my_variable的變量,并在它的值發(fā)生改變時暫停程序執(zhí)行。
結(jié)論
在Linux上編譯生成符號表是調(diào)試代碼的關(guān)鍵步驟。你可以使用GCC編譯器的-g選項、objcopy工具或strip工具來生成符號表。使用GDB調(diào)試器可以使用這些符號表來調(diào)試程序。在生成符號表時,記得生成盡可能詳細的符號表,以方便調(diào)試。
相關(guān)問題拓展閱讀:
- c++語言編程如何進行編譯
c++語言編程如何進行編譯
點上面的感嘆號
這個問題真不好回答。我嘗試作答,不采納沒關(guān)系,我可能說了半天也沒說到重點。
首先要一張將要被編譯的文件的文件列表,例如windows平臺vc上的項目文件,linux平臺的makefile里要寫。Mac的xcode. Android的.mk文件,都是需要來描述的。然后設(shè)置編譯參數(shù)。包括cpu指令集以及運行平臺,調(diào)試版本,優(yōu)化,引用庫 等等。接下來開始編譯
所謂的編譯 實質(zhì)就是編譯之前 列表里的h,c 等格式文件先編譯成obj文件(Mac平孫閉棗臺mm文件和C++文件是不是都是編譯成obj不清楚)。放在一邊,然后根據(jù)配置,如果是應(yīng)用程序(apk,app,exe)那么 執(zhí)行鏈接。 否則 就是簡單的放到一起 生成一個.lib(windows,mac) .so .a(linux,android)。
編譯時先執(zhí)行 比 預(yù)編譯還要早的預(yù)編譯宏。具體是什么 查下 我不記得了。然后執(zhí)行預(yù)編譯。然后執(zhí)行編譯 聲明 以及態(tài)答 實現(xiàn)。將實現(xiàn)編譯進obj,符號表 編譯到 pdb(windows) android那邊是什么格式忘記了,因為我沒鏈接過。這個符號表 應(yīng)該 僅僅是為了調(diào)試而用,當代碼因為異常而崩潰時,可以調(diào)用 查找 符號表,得到 代則拆碼 崩潰所在行。windows可以生成dmp文件。linux,android可以生成coredump文件。
我的理解就是那么多了,希望對你有所幫助。
看你用汪陸耐什么編譯器或IDE了。如果是gcc,那么在命令提示困春符里輸入g++ -o YourExecutableFileName YourSourceFile.cpp如果是Visual C++,就是F7快悉塌捷鍵。
vi有建文件功能所以你可以直接用vitest.c或者touchtest.c都可以
至于你說高銀什么好幾種顏色這個配念寬我真不知道什么意思vi默培亮認不會開啟代碼高亮的功能的寫完之后確保你的系統(tǒng)安裝好gcc運行g(shù)cc-otest.ca.out是鏈接之后生成的文件,跟windows下.o文件一樣錯誤了gcc會報錯誤行號
linux 編譯符號表的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux 編譯符號表,Linux下編譯生成符號表的方法,c++語言編程如何進行編譯的信息別忘了在本站進行查找喔。
成都服務(wù)器托管選創(chuàng)新互聯(lián),先上架開通再付費。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)-網(wǎng)站建設(shè),軟件開發(fā)老牌服務(wù)商!微信小程序開發(fā),APP開發(fā),網(wǎng)站制作,網(wǎng)站營銷推廣服務(wù)眾多企業(yè)。電話:028-86922220
文章標題:Linux下編譯生成符號表的方法 (linux 編譯符號表)
鏈接URL:http://m.fisionsoft.com.cn/article/dhdghog.html


咨詢
建站咨詢
