作家
登录

开发一个Linux调试器(一):准备环境

作者: 来源: 2017-06-22 15:03:11 阅读 我要评论

处理输入

  1. void debugger::handle_command(const std::string& line) { 
  2.     auto args = split(line,' '); 
  3.     auto command = args[0]; 
  4.     if (is_prefix(command, "continue")) { 
  5.         continue_execution(); 
  6.     } 
  7.     else { 
  8.         std::cerr << "Unknown command\n"
  9.     } 

split 和 is_prefix 是一对有效的小法度榜样:

  1. std::vector<std::string> split(const std::string &s, char delimiter) { 
  2.     std::vector<std::string> out{}; 
  3.     std::stringstream ss {s}; 
  4.     std::string item; 
  5.     while (std::getline(ss,item,delimiter)) { 
  6.         out.push_back(item); 
  7.     } 
  8.     return out
  9. bool is_prefix(const std::string& s, const std::string& of) { 
  10.     if (s.size() > of.size()) return false
  11.     return std::equal(s.begin(), s.end(), of.begin()); 

我们会把 continue_execution 函数添加到 debuger 类。

  1. void debugger::continue_execution() { 
  2.     ptrace(PTRACE_CONT, m_pid, nullptr, nullptr); 
  3.     int wait_status; 
  4.     auto options = 0; 
  5.     waitpid(m_pid, &wait_status, options); 

如今我们的 continue_execution 函数会用 ptrace 告诉过程持续履行,然后用 waitpid 等待直到收到旌旗灯号。

总结

如今你应当编译一些 C 或者 C++ 法度榜样,然后用你的调试器运行它们,看它是否能在函数人口暂停、大年夜调试器中持续履行。鄙人一篇文┞仿中,我们会进修若何让我们的调试器设置断点。如不雅你碰到了任何问题,鄙人面的评论框中告诉我吧!

你可以在这里找到该项目标代码。

【编辑推荐】

  1. Linux+Apache+Mysql+PHP优化技能
  2. 2017十大年夜最佳用于隐私和安然保护的Linux发行版
  3. Linux常用机能分析敕令
  4. Linux过程间通信——应用消息队列
  5. Linux中高效编写Bash脚本的10个技能
【义务编辑:枯木 TEL:(010)68476606】

  推荐阅读

  智能网联时代集成电路产业迎来新机遇

人工智能与万物互联已成为智能化、网联化迈入纵深的使能技巧,为集成电路家当带来四大年夜计谋机会:形成计谋新需求、开辟技巧新偏向、构建研发新模式、塑造竞争新格局。我国正处于家当晋升的关键时代,应充分把握新形>>>详细阅读


本文标题:开发一个Linux调试器(一):准备环境

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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