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号栈信息