前言
从事编程工作的我们,总有调试的时刻,不管是通过 IDE 调试开发中的代码,还是通过 GDB 排查正在运行的进程。
特别是经常使用 GDB 的童鞋,对它提供的强大功能更加如数家珍,其中就不乏 breakpoint(断点)。
刚好最近做到 Ptrace 相关的实验,也顺便撸了这篇小文来分享下 断点 当中的道理。
简单 GDB 示范
// test.cpp
#include
#include
void test1(){
std::cout <<"test" <}
int main() {
while (true) {
std::cout <<"main: " <test1();
sleep(1);
}
return 0;
}
编译运行
g&#43;&#43; -std&#61;c&#43;&#43;11 test.cpp && ./a.out
// 输出
main: 22346
test
main: 22346
test
main: 22346
...
开启 GDB&#xff0c;并且在 test1 函数断点
sudo gdb a.out -p 22346
// 输出
... (省略打印的信息, 直接输入命令)
(gdb) break test1 // 在 test1 函数断点
Breakpoint 1 at 0x40091a
(gdb) c // 继续运行
Continuing.
Breakpoint 1, 0x000000000040091a in test1() ()
(gdb) i r rip // 查看 cpu 下一条指令的内容
rip 0x40091a 0x40091a
回头看 a.out 的输出&#xff0c;可以看到已经停在 main: 5693 不再打印了&#xff0c;而进程状态也变成了 T:
关于找一找教程网
本站文章仅代表作者观点&#xff0c;不代表本站立场&#xff0c;所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章&#xff0c;希望广大程序员努力学习&#xff0c;让我们用科技改变世界。
[Linux&#xff1a;断点原理与实现]http://www.zyiz.net/tech/detail-111841.html