跳转至

CMake 和 gdb

这里使用一个简单的 Demo 示例。

CMakeLists

cmake_minimum_required(VERSION 3.14) # 设置 Cmake 最小版本
project(cmake_example)               # 工程名
add_executable(cmake_example main.cpp ui.cpp logic.cpp)  # 生成的可执行文件名和依赖的 cpp 名

main.cpp

#include <stdio.h>

#define MYMAX(x, y) ((x) < (y) ? (y): (x))

int my_add(int a, int b);
int main(int argc, char* argv[]){
    printf("Hello World!\n");
    printf("5 + 9 = %d \n", my_add(5, 9));
    printf( "%d\n", MYMAX(10,  5));
    printf("%lf\n", MYMAX(3.14, 2.73));
    printf("%s\n", MYMAX("short string", "very very long string"));

    return 0;
}

my_math.cpp

int my_add(int a, int b) {
    return a+b;
}

编译

mkdir build
cd build
cmake ..
make
./cmake_example  # 运行编译后的文件

debug

cmake .. -D CMAKE_BUILD_TYPE=Debug
make
gdb ./cmake_example
break main:6  # 设置断点,或者 break 6
r             # 跑程序,跑到断点
hexdump byte &x1  # 查询变量 x1 的位置和内容
n             # 再跑一行
c             # 输出结果
disassemble /mr  # 查看汇编指令
stepi         # 走汇编级别的单步
break *汇编地址 # 通过 disassemble /mr 查看汇编语句的地址 
i frame 0  # 查看0号栈信息
Back to top