如今我们会在我们的敕令处理法度榜样中增长对我们新函数的调用。
我删除了字符串中的前两个字符并对结不雅调用 std::stol,你也可以让该解析更结实一些。std::stol 可以将字符串按照所给基数转化为整数。
大年夜断点持续履行
如不雅你测验测验如许做,你可能会发明,如不雅你大年夜断点处持续履行,不会产生任何工作。这是因为断点仍然在内存中,是以一向被反复射中。简单的解决办法就是停用这个断点、运行到下一步、再次启用这个断点、然后持续履行。不过我们还须要更改法度榜样计数器,指回到断点前面,这部分内容会留到下一篇关于操作存放器的文┞仿中介绍。
测试它
当然,如不雅你不知道要在哪个地址设置,那么在某些地址设置断抱病非很有效。后面我们会进修如安在函数名或者代码行设置断点,但如今我们可以经由过程手动实现。
测试你调试器的简单办法是写一个 hello world 法度榜样,这个法度榜样输出到 std::err(为了避免缓存),并在调用输出操作符的处所设置断点。如不雅你持续履行被调试的法度榜样,履行很可能会停止而不会输出任何器械。然后你可以重启调试器并在调用之后设置一个断点,如今你应当看到成功地输出了消息。
查找地址的一个办法是应用 objdump。如不雅你打开一个终端并履行 objdump -d <your program>,然后你应当看到你的法度榜样的反汇编代码。你就可以找到 main 函数并定位到你想设置断点的 call 指令。例如,我编译了一个 hello world 法度榜样,反汇编它,然后获得了如下的 main 的反汇编代码:
- 0000000000400936 <main>:
- 400936: 55 push %rbp
- 400937: 48 89 e5 mov %rsp,%rbp
- 40093a: be 35 0a 40 00 mov $0x400a35,%esi
- 40093f: bf 60 10 60 00 mov $0x601060,%edi
- 400944: e8 d7 fe ff ff callq 400820 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt>
- 400949: b8 00 00 00 00 mov $0x0,%eax
- 40094e: 5d pop %rbp
- 40094f: c3 retq
正如你看到的,要没有输出,我们要在 0x400944 设置断点,要看到输出,要在 0x400949 设置断点。
如今你应当有了一个可以启动法度榜样、许可在内存地址上设置断点的调试器。后面我们会添加读写内存和存放器的功能。再次解释,如不雅你有任何问题请在评论框中告诉我。
系列文┞仿索引
你可以在这里 找到该项目标代码。
【编辑推荐】
- Linux基金会泄漏将来 Linux内核可能会惹人情势验证
- 懂得Linux的平均负载和机能监控
- Linux桌面体系的优势
- Stack Clash安然马脚将Linux及其他UNIX操作体系的root拜访权拱手交给任何人!
- ps_mem:一个用于精确申报Linux核心内存用量的简单Python脚本
推荐阅读
《筹划》强调,“十三五”时代金融业要周全支撑深化改革,积极对标国际先辈,推动立异普惠成长,保持安然与成长并重,并环绕兼顾监管体系重要性金融机构、兼顾监管金融控股公司>>>详细阅读
本文标题:开发一个Linux调试器(二):断点
地址:http://www.17bianji.com/lsqh/35948.html
1/2 1

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