那么,假设我们想在 variable.cpp 的第 4 行设置断点,我们该怎么做呢?我们查找和该文件对应的条目,然后查找对应的行条目,查找对应的地址,在那边设置一个断点。在我们的例子中,条目是:
- 0x00400686 [ 4,14] NS
DWARF 调试信息
.debug_info 部分是 DWARF 的核心。它给我们关于我们法度榜样中存在的类型、函数、变量、欲望和妄图的信息。这部分的根本单位是 DWARF 信息条目(DWARF Information Entry),我们亲切地称之为 DIEs。一个 DIE 包含能告诉你正在展示什么样的源码级实体的标签,后面跟着一系列该实体的属性。这是我膳绫擎展示的简单事例法度榜样的 .debug_info 部分:
反过来也是如斯。如不雅我们已经有了一个内存地址 - 例如说,一个法度榜样计数器值 - 想找到它在源码中的地位,我们只须要大年夜行表信息中查找最接近的映射地址并大年夜中抓取行号。
- .debug_info
- COMPILE_UNIT<header overall offset = 0x00000000>:
- < 0><0x0000000b> DW_TAG_compile_unit
- DW_AT_producer clang version 3.9.1 (tags/RELEASE_391/final)
- DW_AT_language DW_LANG_C_plus_plus
- DW_AT_name /super/secret/path/MiniDbg/examples/variable.cpp
- DW_AT_stmt_list 0x00000000
- DW_AT_comp_dir /super/secret/path/MiniDbg/build
- DW_AT_low_pc 0x00400670
- DW_AT_high_pc 0x0040069c
- LOCAL_SYMBOLS:
- < 1><0x0000002e> DW_TAG_subprogram
- DW_AT_low_pc 0x00400670
- DW_AT_high_pc 0x0040069c
- DW_AT_frame_base DW_OP_reg6
- DW_AT_name main
- DW_AT_decl_file 0x00000001 /super/secret/path/MiniDbg/examples/variable.cpp
- DW_AT_decl_line 0x00000001
推荐阅读
以上具体源码参考:QSRotationScreenDemo在处理iOS反正屏时,经常会和UIDeviceOrientation、UIInterfaceOrientation和UIInterfaceOrientationMask这三个列举类型打交道,它们大年夜不合角>>>详细阅读
本文标题:开发一个Linux调试器(四):Elves和dwarves
地址:http://www.17bianji.com/lsqh/36389.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示