gdb
原文链接:http://www.orlion.ga/762/ 一、单步执行和跟踪函数调用 ????对于以下程序 ??? ????最后打印出的结果是55和5105,而第二个结果应该是5050。现在用gdb调试下。 ??? ????在编译时要加上-g选项生成的目标文件才能用gdb进行调试,-g作用是在目标文件中加入源代码的信息,比如目标文件第几行机器指令对应源代码的第一行,但并不是把整个源文件嵌入到目标文件中,所以在调试时必须保证gdb也能找到源文件。 ????可以用"list"命令从第一行开始列出源代码: ??? ????一次只列出10行,如果要继续源代码可以输入list,也可以什么都不敲直接回车,表示使用上一条命令。可以"list 函数名"列出函数的源码: ??? ????使用"quit"退出gdb。 ???? ????使用"start"命令执行程序: ??? ????这表示停在main函数中变量定义之后的第一条语句出等待我们发命令,gdb列出这条语句表示它还没执行并且要马上执行,可以用"next"指令控制程序一条条执行。 ????可以使用"step"命令进入程序中执行,用"backtrace"命令查看函数调用的堆栈: ??? ????可见当前的add_range函数是被main函数调用的,main传进来的参数是low=1,high=10.main函数的栈帧编号为1,add_range的栈帧为0.现在可以用"info"命令查看add_range局部变量的值。如果想查看main函数的局部变量的值可以先用"frame"命令选择1号栈然后再查看局部变量: ??? ????(result数组中杂乱无章的数是因为未初始化的局部变量有不确定的值)。用"step"或者"next"往下走,然后用"print"命令打印出局部变量sum的值。 ??? ????可以使用"finish"命令让程序一直运行到从当前函数返回为止。 ??? ???? 二、断点 ????可以使用"break 行号"设置一个断点,也可以"break 函数名"; ? ? 然后可以使用"continue"命令继续执行; ????可以设置多个断点,可以使用"info breakpoints"查看所有断点,每个断点都有一个编号,可以输入指令"delete breakpoints 编号"删除指定编号的断点; ????有时一个断点暂时不想用可以禁用而不必删除:"disable breakpoints 编号",启用:"enable breakpoints 编号"。 ????还可以设置断点在满足某个条件时才激活:"break 9 if sum != 0"。 三、观察点 ????观察点是当程序访问某一存储单元时中断,如果我们不知道某一存储单元在哪里被改动,这时候可以使用观察点, ????命令:"watch 变量名",如"watch array[1]";"info watchpoints"查看设置了哪些观察点。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何以编程方式告诉Flex App是否在调试模式下运行?
- .net – 尝试加载Oracle客户端库引发了BadImageFormatExcep
- 控制器如何从一个开关盒转到另一个开关盒而没有中断c#?
- reactor-netty的TcpClient如何往eventLoop提交task
- Cocolog 从 PostgreSQL 迁移到 MySQL 的经验
- oracle 12c CVU检查集群准备情况 runcluvfy.sh
- c# – 为什么在这个例子中使用比元组更快的元组?
- shiro Ajax请求未登陆响应json串实现
- 并发访问sqlite数据库出现databse is locked的错误的一个解
- React