Linux下gdb調試學習

                                 Linux下gdb調試學習

以test.cpp爲例:

#include <iostream>

#include <vector>



int main() {

       std::vector<int> as;

       int sum=0;

       for (int i = 0; i < 3; i++) {

              sum+=i;

              as.push_back(i);

       }

       std::cout<<sum<<std::endl;

       std::cout << as[2] << std::endl;

       return 0;

}

 

1、g++ 編譯

下面是gcc/g++常用編譯選項,我們的可執行文件要能夠被gdb調試,必須在編譯時加上調試信息,也即是加上-g選項

完整命令如下:

g++ -g test.cpp -o test

 

2、gdb調試

執行gdb test 進入gdb調試(種種作用和平時vs中調試本質上一樣,只是變成了命令行而已)

 

如上可以看到命令行提示符爲(gdb),接着我們就可以在這個gdb的命令行提示符上面輸入各種gdb的調試命令了(補充:這裏也可以在shell中輸入gdb,然後回車,這樣直接進入到gdb的調試命令行,之後可以通過file test命令來載入待調試的可執行程序)。

 

(1)查看源碼 list(簡寫爲l,小寫的L)

最多顯示10行,按回車鍵看接下來10行,以此類推。

(2)斷點相關命令

break(簡寫b)命令, 在gdb下添加斷點使用命令break或簡寫 b,有下面幾個常見用法(這裏統一用 b):

b 函數名

b 行號

b 文件名:行號

b 行號 if條件

舉例:第8行添加斷點,b 8

查看斷點: info break

禁用和解禁斷點: enable/disable 斷點索引

 

刪除斷點:delete 斷點索引

 

(3)啓動程序

run簡寫爲r

 

(4)查看變量的值

p <variable name>/print <variable name>可以查看某一個變量的當前值,這個一般在程序單步調試或者打斷點情況下有效否則爲:

 

正確:

 

(5)單步執行

執行過程中設置爲單步執行,n

 

(6)監控變量

使用watch <varible name>命令可以實現監控變量,使用info watch命令可以查看監控的變量。同時break所擁有的enable,disable,delete等動詞對於watch依然使用,且用法大同小異。

 

(7)顯示變量的值

使用display <varible name>命令可以在每一步執行之後打印變量的當前值,如下:

(8)可視化調試

在gdb命令行環境中輸入wi命令,可以讓我們進入可視化調試環境,這個環境可以看到源代碼,所使用的調試命令與上面講到的一致

這個界面完全就如同vs裏面了,qt也是如此呢

 

Q:g++/gcc是這樣,那麼用cmake編譯程序時如何使得程序支持gdb調試呢?

A: 解決方法如下所述

修改CMakeLists.txt文件,如我修改如下:

 

# Version 2.4 might work, but it won't find static libraries with odd names

cmake_minimum_required(VERSION 2.8)

SET(CMAKE_BUILD_TYPE "Debug")

SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")

SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章