1. 程式人生 > >為什麼除錯的時候需要編譯選項中新增 -g

為什麼除錯的時候需要編譯選項中新增 -g

預設編譯生成的可執行檔案是無法使用 gdb 來跟蹤或除錯的,因為可執行程式中沒有可供 gdb 除錯使用的特殊資訊,為了將必要的除錯資訊整合到可執行檔案中,我們便需要用到 -g 選項,這樣生成的可執行程式,倘若出現問題,便可以使用 gdb 找出問題具體出現的位置,便於問題的解決。

如下

#gcc -g test.c

“-g”標誌是對程式進行除錯性編譯時常用的選項。我們需要給每一個需要除錯的原始檔都加上這個選項。它將使用特殊版本的C語言標準庫完成編譯和連結操作,給庫函式加上程式除錯方面的支援。編譯器會把這些標誌自動傳給連結器。

加上-g選項以後,gcc在編譯是會做以下額外的操作:

  1. 建立符號表,符號表包含了程式中使用的變數名稱的列表。

  2. 關閉所有的優化機制,以便程式執行過程中嚴格按照原來的C程式碼進行。

相關推薦

除了vim, 還有哪些常用的牛逼的編輯器。 自行查詢資料, 調研除了gcc, 還有哪些常用的牛逼的編譯器,為什麼除錯的時候需要編譯選項新增 -g在Linux下實現進度條程式

除了vim, 還有哪些常用的牛逼的編輯器, 並能夠橫向對比編輯器之間的區別和優缺點。 首先先有一個概念IDE(整合開發環境),厲害的有vs等等。vim以及Emacs就向著這個方向發展。為了實現其強大功能。vim有了多模式編輯有(normal,insert,vis

除了vim, 還有哪些常用的牛逼的編輯器,除了gcc, 還有哪些常用的牛逼的編譯器,為什麼除錯的時候需要編譯選項新增 -g,調研readelf命令,Linux下實現進度條程式.

除了vim, 還有哪些常用的牛逼的編輯器 Brackets Brackets也是一款為Linux開發者設計的開原始碼編輯器,使用Brackets寫程式碼,你不會被任何事情所打斷。比如在寫HTML程式碼時,即便你沒有儲存程式碼也可以及時預覽你的Web頁面效果。你也可以使用T

Linux下的編輯器和編譯器,為什麼除錯的時候需要編譯選項新增 -g. 同學們自行調研readelf命令,原始碼安裝, rpm安裝, yum安裝

1、除了vim, 還有哪些常用的牛逼的編輯器, 並能夠橫向對比編輯器之間的區別和優缺點 vim是從vi發展出來的一個文字編輯器。程式碼補完、編譯錯誤跳轉等方便程式設計的功能特別豐富,在程式設計師中被廣泛使用。 sed是一種流編輯器,它一次處理一行內容。處理時,把

為什麼除錯的時候需要編譯選項新增 -g

預設編譯生成的可執行檔案是無法使用 gdb 來跟蹤或除錯的,因為可執行程式中沒有可供 gdb 除錯使用的特殊資訊,為了將必要的除錯資訊整合到可執行檔案中,我們便需要用到 -g 選項,這樣生成的可執行程式,倘若出現問題,便可以使用 gdb 找出問題具體出現的位

為什麼除錯的時候需要編譯選項新增 -g. 請自行調研readelf命令

用gdb進行除錯糾錯前必須要在編譯選項中新增“-g”,“-g”標誌是對程式進行除錯性編譯時常用的選項。我們需要給每一個需要除錯的原始檔都加上這個選項。它將使用特殊版本的C語言標準庫完成編譯和連結操作,給庫函式加上程式除錯方面的支援。編譯器會把這些標誌自動傳給連結器。reade

VS編譯選項的MT,MTD,MD,MDD

MT和MTD都是靜態連結C執行庫,所以生成的程式可以在沒有VC環境的情況下執行,其中MTD是MT的除錯版本。同時由於是靜態編譯連結,所以生成的EXE程式會相對大點,其中除錯版本比非除錯版本也要大些,因

新版的pycharm不需要再setting新增應用專案的名稱

出現錯誤資訊:django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: web解決方法:去掉新增的專案名web

cmake新增-fPIC編譯選項方法

合併openjpeg/soxr/vidstab/snappy等多個cmake庫時,為了解決下述問題: relocation R_X86_64_32 against `.text' can not be used when making a shared object;

gdb如何除錯沒有符號表(未加-g選項編譯)的程式

[email protected]:~$ gdb a.out GNU gdb (GDB) 7.5.91.20130417-cvs-ubuntu Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL ver

【轉】gcc/g++常用編譯選項和gdb常用除錯命令

  gcc/g++編譯器是我們寫編譯C/C++程式時離不開的編譯工具,而gdb又是除錯C/C++程式的利器,這一篇文章我們記錄一下它們的慣常用法。 gcc/g++常用編譯選項 選項 作

vscode除錯編譯

除錯 如果要啟動除錯, 需要設定啟動配置檔案–launch.json。選擇除錯環境, vscode將在.vscode目錄下生成一個launch.json的配置檔案。如下圖所示: 2.編輯launch.json檔案 { //${wor

C++---使用VS在C++程式設計出現 fatal error C1010: 在查詢預編譯頭時遇到意外的檔案結尾。是否忘記了向源新增“#include "stdafx.h"”?

啦啦啦,好久沒寫部落格啦... 對於C++初學者來說適應一個新的編譯器還是需要蠻長一段時間的,現在我就給你們說說標題所說的這個問題吧... 第一步:選單--〉專案--〉設定,出現“專案設定”對話方塊,左邊展開專案,在“原始檔”中找到出錯的檔案。 第二步:在右邊選擇“C/C++”屬性頁,在Category

VS2008 新增ActiveX控制元件除錯工具

       編寫ActiveX控制元件時,可以用自帶的Active X control test container來測試activex控制元件,這在VisualStudio 6及vs2005裡面是可以方便查

GCC & G++編譯選項

gcc & g++現在是gnu中最主要和最流行的c & c++編譯器 。 g++是c++的命令,以.cpp為主,對於c語言字尾名一般為.c。這時候命令換做gcc即可。其實是無關緊要的。 其實編譯器是根據gcc還是g++來確定是按照C標準還是C++標準編譯連結。

VS新增lib檔案,編譯出錯:LINK : fatal error LNK1104: 無法開啟檔案:×××.lib解決辦法

新增庫檔案: 在VS中右擊專案點屬性:   新增標頭檔案目錄:   配置屬性-->C/C++-->常規-->附加包含目錄 加上標頭檔案存放的目錄。   新增lib檔案:   配置屬性-->連結器-->輸入-->附加依賴項加入庫名(×××.

vs錯誤描述:fatal error C1010:在查詢預編譯頭時遇到意外的檔案結尾。是否忘記了向源新增

錯誤描述:fatal error C1010:在查詢預編譯頭時遇到意外的檔案結尾。是否忘記了向源中新增“#include"stdafx.h"” 這個問題不一定是配置了使用預編譯頭造成的(專案-屬性-配

layui進行分頁處理,後端返回資料沒有count欄位,需要單獨獲取再新增到資料,再進行項渲染,另有layui表格資料增刪改查前後端互動

整體效果圖如下: (1)分頁前端介面處理 (2)分頁後端的資料處理 具體程式碼如下: 前端介面程式碼:包括分頁,增刪改查,重新整理(搜尋功能還沒做,後端是java程式碼) <!DOCTYPE html> <html> <hea

如何一次在combo新增N多個下拉選項

目標:為了使三個combo每個下拉選單都顯示卡號 姓名 上機日期 上機時間 下機日期 下機時間 消費金額 餘額 常規辦法: Comboname1.AddItem "卡號" Comboname1.AddItem "姓名" Comboname1.AddItem "上機日期" Combon

Xamarin ios 修改Assets.xcassets 檔案後 無法除錯編譯

根本問題是因為 vs專案裡面 沒有包含 如果提示找不到對應png 請檢查 iOS 專案解除安裝後 編輯 並找到對應檔案檢查  <ImageAsset Include="Assets.xcassets\AppIcon.appiconset\icon-72.png">

如何在office新增Mathtype選項

這個很簡單, 第一步,你在office的根目錄下建一個名為STARTUP的資料夾 第二部,在Mathtype的安裝路徑中找到兩個資料夾Office Support和MathPage,將裡面的檔案MathType commands 6 For Word.dot、MathTyp