1 #include <iostream>2 using namespace std;3 4 void Print()5 {6 cout<<"helloworld"<<endl;7 }8 9 class TestDebug
10 {
11 public:
12 TestDebug()
13 {
14 cout<<"TestDebug"<<endl;
15 int temp=0;
16 ti = 0;
17 while(1)//调试自动变量
18 {
19 if(++temp==10)
20 break;
21 }
22 ti = temp;
23 }
24
25 voi...
分析
使用gcc -g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器。
进入之后先在main函数处设置一个断点,再run一下,使用disassemble指令获取汇编代码,用i(info) r(registers)指令查看各寄存器的值:
主函数的栈基址为 0xffffcf98
用x(examine)指令查看内存地址中的值,%esp:0,%ebp:0call指令将下一条指令的地址入栈,此时%esp,%ebp和堆栈的值为:将上一个函数的基址入栈...
就会生成待调试信息的hello可执行程序gdb hello 就会进入调试状态查看源代码: l 查看main源代码(L的小写,不是数字1),list的缩写 l [filename:linenum] 查看指定文件的指定行的源代码 继续查看按l l [filename:func] 查看指定文件的指定函数的源代码 继续查看按l设置断点: b [linenum] 第几行打断点,或者break的缩写 b [10] if [i==5] 就是在第十行当i等于5时停下 b [func] 在func函数入口处打断点 del/d [num] 删除断点,...
描述backtrace(或bt) 查看各级函数调用及参数finish 连续运行到当前函数返回为止,然后停下来等待命令frame(或f) 帧编号 选择栈帧info(或i) locals 查看当前栈帧局部变量的值list(或l) 列出源代码,接着上次的位置往下列,每次列10行list 行号 列出从第几行开始的源代码list 函数名 列出某个函数的源代码next(或n) 执行下一行语句print(或p) 打印表达式的值,通过表达式可以修改变量的值或者调用函数quit(或q) 退出g...
<unistd.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>void* pthread_run1(void* arg)
{(void)arg;while(1){printf("I am thread1,ID: %lu\n",pthread_self());sleep(1);}
}void* pthread_run2(void* arg)
{(void)arg;while(1){printf("I am thread2,ID: %lu\n",pthread_self());sleep(1);}
}int main()
{pthread_t tid1;pthread_t tid2;pthread_create(&tid1,NULL,pthread_run1,NULL);pthread_create(&tid2,N...
1,使用bt(backtrace )命令查看当前堆栈(gdb) bt
#0 muduo::Poller::poll (this=0x62e010, timeoutMs=10000,activeChannels=0x7fffffffe3c0) at Poller.cc:31
#1 0x0000000000403f60 in muduo::EventLoop::loop (this=0x7fffffffe390)at EventLoop.cc:80
#2 0x0000000000402876 in main () at test8.cc:41
#0:是当前执行的函数(栈帧)(fram)
2,使用f(frame)命令:查看当前frame(函数,栈帧)里的变量值等信息
3,使用f(...
20145234黄斐《信息安全系统设计基础》GDB调试汇编堆栈过程分析(1)标签:alt padding 命令 ble 语言 跳转 编辑 rda 系统 本文系统来源:http://www.cnblogs.com/taigenzhenjun/p/6132130.html
关于Core文件Linux程序在运行过程中可能会出现奔溃的现象,此时启用Core文件可以记录程序的奔溃现场,方便事后查找问题。准备工作启用core文件
默认情况下的core文件是不启用的,即程序奔溃不会生成奔溃core文件,所以需要开启这个功能查看core文件状态ulimit -a如果core file size行为0,那么表示没有启用core文件,需要执行ulimit -c 2048重置core文件大小的上限,可以自定义文件大小上限值。设定core文件名和保存地址sudo echo ...
list function 显示程序名为function的函数的源程序list 显示当前行后面的源程序list - 显示当前行前面的源程序2.run(r):运行命令run args run命令可以直接接命令行参数值,也可以在执行run之前通过 set args + 参数值实现3.break(b):打断点b linenum 在某行打断点b +offset/-offset 在当前行的前面或者后面的offset停住b filename:linenum 在某文件的某行打断点b file...
可以在fork函数调用之前,通过指令设置gdb调试工具跟踪父进程或子进程。
默认情况下gdb是跟踪父进程的。
set follow-fork-mode child 命令设置gdb在fork之后跟踪子进程。
set follow-fork-mode parent设置跟踪父进程。
默认设置下,在调试多进程程序时GDB只会调试主进程。但是GDB(>V7.0)支持多进程的分别以及同时调试,换句话说,GDB可以同时调试多个程序。只需要设置follow-fork-mode(默认值:parent)和detach-on-fork(默认...