gdb调试
基础指令
-g 使用该参数生成调试文件 gdb a.out
list:列出源码break:设置断点run:运行程序next:下一条指令(会越过函数)step:下一步指令(进入函数)print:查看变量值continue:继续执行到下一个断点quit:退出调试
其他指令
run直接追段错误finish:结束函数调用start:运行程序,停在第一条执行语句set args:设置main函数命令行参数,或者run后面直接跟info b:查看断点信息b 10 if i=5:设置条件断点ptype:查看...
1.怎么调试程序在linux下,我们通常用gcc来编译链接程序,用gdb来调试程序。在用gcc生成程序的时候,用-g选项来使程序可以调试:test@test-ThinkPad-Edge-E420s:~/gdb$ gcc -g -Wall gdbtest.c -o gdbtest然后在用如下命令调试程序:test@test-ThinkPad-Edge-E420s:~/gdb$ gdb gdbtest2.gdb的基本命令介绍run在gdb中运行你的程序,一般会在你设置的断点地方停止。start也是在gdb中运行程序,不过默认实在程序的main函数停止。break...
示例代码 1 #include <iostream>2usingnamespace std;3 4void Print()5{6 cout<<"helloworld"<<endl;7}8 9class TestDebug
10{
11public:
12 TestDebug()
13 {
14 cout<<"TestDebug"<<endl;
15int temp=0;
16 ti = 0;
17while(1)//调试自动变量18 {
19if(++temp==10)
20break;
21 }
22 ti = temp;
23 }
2425void disPlayTi()
26 {
27 cout<<"ti:"<<ti<<endl;
28 ...
1. core 文件 2. 配置core程序崩溃时产生文件 3. 可修改core文件名 4. 产生core文件的情形 5. gdb调试core文件 a) gdb -c <xxx.core> [可执行程序] b) gdb命令:backtrace / bt c) gdb命令:up/down/frame d) gdb命令:info locals e) gdb命令:info args f) gdb命令:print <变量名> / print *<变量名>1. core 文件 linux/unix下,可执行程序崩溃时会产生core文件。cor...
"ulimit -c unlimited" >> /etc/profile
然后记得敲入命令
source /etc/profile
然后敲入命令:
ulimit –c
效果如下:确认能否生成coredump文件,使用如下命令(使用时注意,我在测的时候会直接退出当前用户)
kill -s SIGSEGV $$
然后回到执行上述命令的路径下即可看到coredump文件,我这边生成的文件名为core.3477,依个人会随机生成不同的数字。
2、调试coredump文件
调试方式为: gdb program coredump文件
例如我的可执行文...
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(默认...