avatar
文章
38
标签
11
分类
6

Home
Archives
Tags
Categories
Anthony Li's Blogs
搜索
Home
Archives
Tags
Categories

Anthony Li's Blogs

Linux GDB反向执行
发表于2024-05-01|computer_sciencegdb
1. 应用场景反向执行(Reverse Execution)应用在:当发现执行太过了的时候,关注的问题可能已经发生了,需要反向执行。 需要目标环境支持,不是所有目标环境都可以实现反向执行的。 2. 程序执行的记录(record)和重放(replay)record会拖慢程序执行速度。 如果执行日志中包括下一条指令的执行记录,GDB会使用replay mode,此时运行程序不会真正执行代码,而是从执行日志中恢复程序状态。 否则如果执行日志中不包括下一条指令的执行记录,GDB会使用record mode,此时运行程序会正常执行,但GDB会记录执行日志以备将来replay。 即使程序运行的平台不支持Reverse Execution,在执行日志记录的范围内,GDB也可以通过replay支持Reverse Execution。 在反向执行时,如果执行日志包括先前指令的记录,GDB会使用replay mode,否则,如果平台支持反向执行,GDB会使用record mode,如果不支持则stop。 3. record和replay相关的命令3.1 record [METHOD]缩写为rec [MET ...
Linux GDB Convenience Variables
发表于2024-05-01|computer_sciencegdb
1. 基本介绍 形式为以$开头的名字(以$开头的数字不是) 无固定类型,甚至可以是结构体或者数组 2. 赋值使用set命令,如set $foo = *object_ptr 3. 使用示例不断使用回车遍历数组: 12set $i = 0p arr[$i++]
Linux GDB 多线程调试
发表于2024-05-01|computer_sciencegdb
1. All-Stop Mode这是GDB的默认模式(共两个模式,另一个为Non-Stop Mode)。 当一个线程stop时(比如因为hit断点),所有线程都stop。 类似地,当继续执行这个线程时(比如使用step或者next命令),所有其他线程也会恢复执行,但它们不受当前线程的step或者next命令控制而自由执行(因为线程调度依赖kernel,而不受GDB控制),因此可能执行任意条语句。而且当这些其他线程遇到断点时会导致GDB发生自动线程切换,此时原线程的step或者next命令甚至可能还没执行完。 1.1 锁住OS scheduler这是为了在恢复执行时只允许一个线程运行。 scheduler锁定模式有多种,使用命令set scheduler-locking <mode>设置,show scheduler-locking获取。 可用的模式有: off 无锁定,任意线程可以任意运行。 on 只有当前线程可以运行,其他线程依然stop。 step 当单步执行时效果类似on,使用其他执行命令(如continue, until, finish)时类似off。(由于机 ...
Linux GDB TUI(Text User Interface)
发表于2024-05-01|computer_sciencegdb
1. GDB tui常用命令1.1 启动和退出tui模式 分别是tui enable(缩写为tui e)和tui disable(缩写为tui d)命令 或者使用快捷键ctrl+x+a,按第一次进入,第二次退出 1.2 ctrl+L 刷新屏幕在程序使用标准输出和标准错误打印时屏幕可能乱掉,可以使用ctrl+L进行刷新 ctrl+L不会被记在命令历史里,下一次ENTER不会重复ctrl+L 1.3 info win命令列出当前显示的所有窗口 1.4 focus命令缩写为fs,改变焦点到不同窗口,使用方式focus [WINDOW-NAME | next | prev] 1.5 查看文档使用help text-user-interface查看tui相关所有命令 2. CGDBCGDB是GDB的一个控制台前端(Console Frontend),它还是使用GDB进行实际调试 GDB的tui模式不支持源码窗口和命令窗口垂直分屏,因此使用CGDB 2.1 使用1. 启动在shell中输入cgdb启动程序 调用方式类似GDB: 1cgdb [cgdb options] [--] [gdb ...
Linux GDB Watchpoint
发表于2024-05-01|computer_sciencegdb
1. 基本概念watchpoint又称data breakpoint,用于监控某个表达式,当它的值改变时stop程序。 表达式可以是单个变量,也可以包含操作符(任意原语言中有效的操作符)。 2. 分类2.1 software watchpointGDB单步执行程序,然后每次都计算表达式值。因此程序执行速度可能慢了数百倍,而且它在被监控值改变后的下一条语句处才报告值改变,而非在确切的CPU指令处。 2.2 hardware watchpoint依赖硬件支持(如x86架构),不会减慢程序执行速度,且在改变被监控值的CPU指令执行时即能及时报告。 GDB会尽可能创建hardware watchpoint。 有时GDB不能创建hardware watchpoint,可能的原因包括: 要监控的内存区域过大。(此时GDB可能把它拆分成多个小的hardware watchpoint)。 已经设置了太多hardware watchpoint。但可能到程序resume执行时(而不是创建watchpoint时)GDB才会报告”Hardware watchpoint : Could not insert ...
Linux生成静态库
发表于2024-04-30|computer_sciencelinker
1. 使用ar -M [ < merge.script ]命令写一个脚本merge.script,将脚本重定向给ar -M命令的stdin。 使用create传入输出的静态库文件名,addlib传入输入的静态库,addmod传入输入的目标文件,最后调用save和end。 123456789create <libmerged.a>addlib <libfirst.a>addlib <libsecond.a>...addmod <object_first.o>addmod <object_second.o>...saveend 2. 注意排列顺序把必须包括其所有符号的输入库放在前面,因为在后面库中包含重复符号名的时候可能直接丢弃以前面为准。 3. 参考 stackoverflow 文档
Linux sed命令使用方法
发表于2024-04-28|computer_science
1. 缩写sed是stream editor的缩写。 2. 常用选项 -i,原地修改输入文件 3. 常见使用场景3.1 替换某个文本的所有出现使用方法为sed 's/<word1>/<word2>/g' input.txt s指substitution(替换) /是分隔符,也可以是其他字符作分隔符,如+ <word1>是被替换的字符串 <word2>是要替换为的字符串 g表示global(全局替换),不指定g的话只会替换每一行的第一次出现的<word1>。 3.2 删除指定行行编号都是从1开始 sed '<n>d' input.txt,删除第<n>行 sed '$d' input.txt,删除最后一行 sed '<start>,<end>d' input.txt,删除第<start>到<end>行(闭区间) 4. sed的正则表达式sed默认使用Basic Regul ...
Linux vim常用命令
发表于2024-04-28|computer_science
1. 查找1.1 向后查找命令为/<search_word>然后回车,使用n定位到下一次出现,使用N定位到上一次出现 1.2 向前查找使用命令?<search_word> 1.3 case-insensitive查找默认是case-sensitive的,若想insensitive,在<search_word>前或者后添加\c 例如/<search_word>\c 2. 替换2.1 全文替换命令为:%s/<search_word>/<replace_word>/g 将全文中所有的<search_word>替换为<replace_word>,这是case-sensitive的 若想case-insensitive,给上述命令添加i选项 2.2 每次替换时询问若想在每次替换实际发生时询问是否确认,给上述命令添加c选项(c表示confirmation),即 :%s/<search_word>/<replace_word>/gc 在prompt出现时的回答包括: y,表示ye ...
十一月四日风雨大作二首
发表于2024-04-23|literature(文学)
十一月四日风雨大作二首 [宋] 陆游 (其一) 风卷江湖雨暗村,四山声作海涛翻。 溪柴火软蛮毡暖,我与狸奴不出门。 (其二) 僵卧孤村不自哀,尚思为国戍轮台。 夜阑卧听风吹雨,铁马冰河入梦来。
唐太宗封禅与魏征答问
发表于2024-04-23|literature(文学)
出自《资治通鉴·唐纪·唐纪十》 上曰:“公不欲朕封禅者,以功未高邪?”曰:“高矣。”“德未厚邪?”曰:“厚矣。”“中国未安邪?”曰:“安矣。”“四夷未服邪?”曰:“服矣。”“年谷未丰邪?”曰:“丰矣。”“符瑞未至邪?”曰:“至矣。”“然则何为不可封禅?”对曰:“陛下虽有此六者,然承隋末大乱之后,户口未复,仓廪尚虚,而车驾东巡,千乘万骑,其供顿劳费,未易任也。且陛下封禅,则万国咸集,远夷君长,皆当扈从;今自伊、洛以东至于海、岱,烟火尚希,灌莽极目,此乃引戎狄入腹中,示之以虚弱也。况赏赉不赀,未厌远人之望;给复连年,不偿百姓之劳;崇虚名而受实害,陛下将焉用之!”
1234
avatar
Anthony Li
文章
38
标签
11
分类
6
Follow Me
最新文章
临江仙·夜归临皋2025-04-12
自遣2025-04-06
赠卫八处士2024-12-03
Linux ps常用命令2024-12-03
题临安山水2024-11-26
分类
  • computer_science26
    • gdb6
    • git2
    • linker6
    • sanitizer5
  • literature(文学)12
标签
linker git poem(诗歌) gdb history(历史) shell excerpt(摘抄) sanitizer loader linux c++
归档
  • 四月 20252
  • 十二月 20242
  • 十一月 20242
  • 十月 20242
  • 九月 20246
  • 八月 20242
  • 七月 20241
  • 六月 20241
网站资讯
文章数目 :
38
本站访客数 :
本站总访问量 :
最后更新时间 :
©2019 - 2025 By Anthony Li
框架 Hexo|主题 Butterfly
搜索
数据库加载中