gdb python debug

如果是 python 2.7

  1. 先安装 gdb 和 python2.7 debug package
    sudo apt-get install gdb python2.7-dbg

完全按照这个: https://wiki.python.org/moin/DebuggingWithGdb

  1. 启动gdb
    sudo gdb /usr/bin/python2.7-dbg 9193

这个 python2.7-dbg 即使上面安装之后, 在 /usr/bin/ 目录下. 9193 是我的目标 python 进程号 pid

  1. 不过还是现实 ?? 说明glibc 的调试符号没有加载
    xiatian_art-4167758___usr_bin.png
  2. 安装 glibc 的调试符号表
    sudo apt-get install libc6-dbg
  3. 使用上面的命令进来之后, 还是现实 ?? , 这个时候, 要重启这个进程 使用 c
    c

然后 Ctr + C

  1. 再次使用 bt , 已经可以看到符号.
    xiatian_art-416usr_bin.png

leetcode 刷题体会

  1. 检查边界;
  2. 拿最简单的去试一试, 逐渐复杂, 找到规律;
  3. 从最笨的方法开始, 写完之后, 从某个点渐渐优化;
  4. 空间换时间;
  5. 充分运用约束条件, 比如用参数里面的 Array, 不要新 malloc 一个;
  6. 特殊的约束条件, 用特殊的值;

c 代码调用汇编代码

汇编 world.asm

SECTION .TEXT
    GLOBAL calc

calc:
    mov rax,rdi
    add rax,r9
    ret

编译:

 $ nasm -f elf64 world.asm -o world.o

C 代码:

#include <stdio.h>

int main(int argc, char *argv[]) {
    extern int calc(int, int, int, int, int, int);
    printf("%d\n", calc(1, 3, 5, 7, 9, 11));
    return 0;
}

合在一块编译成目标文件 并执行

 $ gcc hello.c world.o -o hello
 $ ./hello
  1. 从 C 代码产生汇编代码:

    gcc -S  -Og test.c
  2. 汇编特殊指令:

    .LC0 local constant, e.g string literal.
    .LFB0 local function beginning,
    .LFE0 local function ending,
  3. 源代码只预处理, 编译, 汇编, 链接

    gcc -E -o hello.i hello.c
    gcc -S -o hello.s hello.c
    gcc -c -o hello.o hello.c
    gcc -o hello hello.c

C 语言参考

函数: 表达式 (操作符 + 操作数(变量 + 常量))
数据: 变量 + 常量

预处理

  1. #include <stdio.h>
  2. #define STEP 20 //符号常量

数据类型

signed + unsigned

  1. char
  2. short (short int)
  3. int
  4. long (long int)
  5. float
  6. double (浮点默认)
  7. long double

函数

  1. if the return type is omitted, int is assumed -> dummy(){}
  2. C does not allow functions to be defined inside other functions.

Input/Output

char c = getchar();
putchar(c);

编译

  1. cc main.c getline.c strindex.c
  2. c main.c getline.o strindex.o