代码风格和定制化gdb调试
本讲内容
- 编程中的一些细节
- 调试工具的正确使用方法
软件的热更新DSU
代码实现
1 |
|
一些编程小技巧
什么是 __func__?
func 是C语言中的一个内置宏,它返回当前函数的名称作为一个字符串常量。它可以用于调试和错误报告,以便在程序出错时能够更容易地确定错误发生在哪个函数中。
相当于:1
2
3
4
5void my_function() {
#define __func__ "my_func"
printf("Current function: %s\n", __func__);
#undef __func__
}使用 func 宏不需要包含任何头文件,因为它是C语言的内置宏,可以直接在代码中使用。
使用 assert 断言
有利于 bug 的定位
代码讲解
为什么要把函数设置成 inline?
内联函数(inline function)是一种编译器提供的优化手段,它的本质是将函数在调用处展开,从而避免了函数调用的开销。也就是说,内联函数不是真正的函数调用,而是将函数的代码嵌入到调用处,类似于宏替换。打一个小补丁
我们知道,在调用一个函数的时候,首先 call foo, 把返回地址压栈,并跳转到foo函数处,然后再在foo函数那里给上一个补丁。
1
2movabs $imm , %rax
jump *(rax)%rax是 foo_new函数的地址,因为foo_new函数最后也会调用 ret 指令,所以结束后返回到原来的地方。
用好工具
- 如何让gdb以更友好的方式帮我们打印相关的信息?
计算机公理3:让你感到不适的 tedious 工作,一定有办法提高效率。
用python写一个脚本,增加一个自定义的gdb命令
1 |
|
代码风格和定制化gdb调试
http://example.com/2023/08/02/操作系统/jyy操作系统/代码风格和定制化gdb调试/