gdb

      gdb支持很多的命令使用户能实现不同的功能,有简单的文件装入命令,有允许程序员检查所调用的堆栈内容的复杂命令

      为了使gdb正常工作,必须使程序在编译的时候包含调试信息,这需要在gcc编译时加上-g或者-ggdb选项。调试信息包含了程序中的每个变量的类型和在可执行文件中的地址映射以及源代码的行号。而gdb正是利用这些信息使源代码和机器码相关联

 

退出gdb

    quit

 

如果直接用gdb命令,会进入gdb界面,但此时还没有装载要调试的程序,

gdb也可以干一些事情

 

用file命令装载

      file lian.exe

 

 

lian.cpp

#include <stdio.h>

int main(void)
{
    int i=0; 
    printf("Hello, world\n"); 
    printf("i is %d\n",i);
    i++; 
    printf("i is now %d\n",i);
    return 0;
}

首先编译

g++ lian.cpp -ggdb3 -o lian

gdb调试lian.exe

gdb lian.exe

run/r命令  执行当前被调试的程序

就是会一直执行下去,除非遇到断点或者报错

list 显示源代码

如果太长,只显示一部分

 

step单步执行代码但不进入函数内步

next/n单步执行代码并且进入函数内部  

break/b n   在源码第n行设置断点

delete n 删除第n行的断点

print(i)  打印当前变量i的值

disassemble 查看汇编形式的代码

 

gdb中可以使用python

 

 

 

 

gdb调试可视化值TUI界面

只有在linux下才有

ctrl+x+a

 

 

gdb调试多线程和多进程

有的时候g++/gcc编译在windows下不成功,到linux下就成功了

 

多线程

thread2.cpp

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<ctype.h>
#include<pthread.h>
#define MAX_THREAD 3

unsigned long long main_counter;
unsigned long long counter[MAX_THREAD]; 
pthread_mutex_t mutex =PTHREAD_MUTEX_INITIALIZER; 

void* thread_worker(void* p)
{
    long thread_num; 
    thread_num = (long)p; 
    for(;;){
        counter[thread_num]++; 
        main_counter++;
        }
}

int main()
{
    int i, rtn, ch; 
    pthread_t pthread_id[ MAX_THREAD]={0}; 
    for(i=0; i<MAX_THREAD; i++){
        pthread_create(&pthread_id[i], NULL, thread_worker,(void *)i); 
    }

    do{
        unsigned long long sum=0; 

        for(i=0; i<MAX_THREAD; i++){
            sum += counter[i]; 
            printf("%llu", counter[i]); 
        }
        printf("%llu/%llu", main_counter, sum);
    } while((ch=getchar()) != 'q');

    return 0; 
}

g++ thread2.cpp -o thread2 -g -lpthread

 

 

info threads 查看当前的线程

可以看到当前只有一个主线程的存在

再next几步之后查看

左侧星号表示当前正在调试的是线程1

切换线程

     thread 2

切换到线程2

 

让只有当前调试的线程处于运行状态,其他线程处于阻塞状态

set scheduler-locking on

 

 

多进程

https://www.bilibili.com/video/BV1Y4411m7Z5/

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值