作家
登录

开发一个Linux调试器(五):源码和信号

作者: 来源: 2017-08-28 16:03:37 阅读 我要评论

contains(pc)) { 
  •             auto &lt = cu.get_line_table(); 
  •             auto it = lt.find_address(pc); 
  •             if (it == lt.end()) { 
  •                 throw std::out_of_range{"Cannot find line entry"}; 
  •             } 
  •             else { 
  •                 return it; 
  •             } 
  •         } 
  •     } 
  •     throw std::out_of_range{"Cannot find line entry"}; 
    1. dwarf::die debugger::get_function_from_pc(uint64_t pc) { 
    2.     for (auto &cu : m_dwarf.compilation_units()) { 
    3.         if (die_pc_range(cu.root()).contains(pc)) { 
    4.             for (const auto& die : cu.root()) { 
    5.                 if (die.tag == dwarf::DW_TAG::subprogram) { 
    6.                     if (die_pc_range(die).contains(pc)) { 
    7.                         return die; 
    8.                     } 
    9.                 } 
    10.             } 
    11.         } 
    12.     } 
    13.     throw std::out_of_range{"Cannot find function"}; 

    同样,我们可以简单地找到精确的编译单位,然后萌芽行表获取相干的条目。

    1. void debugger::handle_sigtrap(siginfo_t info) { 
    2.     switch (info.si_code) { 
    3.     //如不雅射中了一个断点个中的一个会被设置 
    4.     case SI_KERNEL: 
    5.     case TRAP_BRKPT: 
    6.     { 
    7.         set_pc(get_pc()-1); //将法度榜样计数器的值设置为它应当指向的处所 
    8.         std::cout << "Hit breakpoint at address 0x" << std::hex << get_pc() << std::endl; 

        推荐阅读

        Python开发者面向文档编程的正确姿势

      概述秦人不暇自哀,而后人哀之;后人哀之而不鉴之,亦使后人而复哀后人也! &ndash;论面向文档编程的重要性如不雅想看见识一小我写代码的功力,注释其实是区分老司机和小鲜肉的一个明显的分界线(有没有不雅察碘晾髑公司的>>>详细阅读


      本文标题:开发一个Linux调试器(五):源码和信号

      地址:http://www.17bianji.com/lsqh/36965.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)