dwarf调试信息

Welcome to the DWARF Debugging Standard https://dwarfstd.org/

dwarf调试信息格式学习 https://blog.csdn.net/kikilizhm/article/details/124191751 (重点看)

DWARF调试格式的简介 https://blog.csdn.net/wuhui_gdnt/article/details/7283483 (重点看)

 

DWARF调试格式的简介(续完)https://blog.csdn.net/wuhui_gdnt/article/details/7283529?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-7283529-blog-124191751.235%5Ev28%5Epc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-1-7283529-blog-124191751.235%5Ev28%5Epc_relevant_default&utm_relevant_index=2  (重点看)

dwarf2调试信息格式——chapter1,2 https://blog.csdn.net/JS072110/article/details/43818151?spm=1001.2014.3001.5502

探索 DWARF 调试格式信息 https://blog.csdn.net/chenyijun/article/details/85284951  (重点参考)

调试信息(debugging information)——解析DWARF文件 https://blog.csdn.net/Dong_HFUT/article/details/122617871?ops_request_misc=&request_id=&biz_id=102&utm_term=dwarf2+%E8%B0%83%E8%AF%95%E4%BF%A1%E6%81%AF%E6%A0%BC%E5%BC%8F&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-122617871.142^v83^insert_down1,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4449

gdb对dwarf调试信息的解析和使用  https://blog.csdn.net/JS072110/article/details/44153303?spm=1001.2014.3001.5502 

DWARF, 调试信息存储格式 https://zhuanlan.zhihu.com/p/419908664?utm_id=0 (重点参考)

Unwind 栈回溯详解  https://www.cnblogs.com/pwl999/p/15534946.html  (dwarf相关) 

linux 栈回溯(x86_64 ) https://zhuanlan.zhihu.com/p/302726082?utm_id=0

 [Dwarf-Discuss] The difference between .eh_frame section and .debug_frame section

https://dwarf-discuss.dwarfstd.narkive.com/5YQtcsyt/the-difference-between-eh-frame-section-and-debug-frame-section

Stack unwinding   https://zhuanlan.zhihu.com/p/280929169?utm_source=wechat_session&utm_id=0  

ELF文件——DWARF源码解析 https://blog.csdn.net/qq_35018427/article/details/121981211

The .eh_frame section https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html

 

 

 

readelf --debug-dump=info binary_name | grep -A 2 'Compilation Unit @'

在使用g++编译此代码时,可以通过-g参数设置不同的调试信息级别。具体来说,-g参数有以下不同级别:

-g:以操作系统的本机格式(stabs、COFF、XCOFF或DWARF)生成调试信息。GDB可以使用这些调试信息。
-g0:不生成任何调试信息。
-g1:生成基本的调试信息,包括外部变量、函数名和行号。
-g2:生成更详细的调试信息,包括局部变量和类型信息。
-g3:生成最详细的调试信息,包括源代码和宏定义。现在新版本的gcc编译器默认使用DWARF5,DWARF5是DWARF格式的最新版本,它在前几个版本的基础上增加了一些新的特性。然而,DWARF5并不支持展开宏定义。需要加上-gdwarf-2、-gdwarf-3或者-gdwarf-4参数使用低版本的DWARF。

 

×××××××××××××××××××××××××××××××××
查看调试信息版本:
readelf --debug-dump=info test | grep -A 2 'Compilation Unit @'
objdump --dwarf=info test
llvm-dwarfdump -r 1 long_double_arg | head | grep Compile
×××××××××××××××××××××××××××××××××

×××××××××××××××××××
readelf --debug-dump=frames dwarf_test
objdump --dwarf=frames dwarf_test
××××××××××××××××××××

 

行号
在调试源代码时候,我们经常将断点打在源码中的某一行,gdb需要对应到汇编的起始代码位置。
×××××××××××××××××××××××××××××××
readelf --debug-dump=decodedline test
objdump --dwarf=decodedline test

readelf --debug-dump=line dwarf_test
objdump --dwarf=line dwarf_test
×××××××××××××××××××××××××××××××

 

 

 

 

 

 

 

posted on 2023-04-04 17:13  lh03061238  阅读(515)  评论(0编辑  收藏  举报

导航