gdb之线程

gdb如何调试多线程呢??之前写了一个同步异步的例子,因为对异步来说通常采用的机制有两种,一是轮询,就是说每隔一段时间就过来询问一下,如果有就调用,对于这个机制,epoll比较适合,另一个就是回调,也就是说当我准备好了后直接通知你,基于这个,今天就顺着昨天的例子增加一些函数来理解异步回调,同时学习基础的gdb调试多线程。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
typedef void (*CBK_FUN)();
struct CBK_CALL{
    void *data;
    CBK_FUN fn;
};

void printSync(const char *str)
{
    sleep(1);   // assume this will do lots of thing
    puts(str);
    sleep(1);   // assume this also will do lots of thing
}

void *thread_proc(void *data)
{
    struct CBK_CALL *cbk_call = data;
    sleep(1);
    puts((char *)(cbk_call->data));
    sleep(1);
    cbk_call->fn(data);
    return (void *)0;
}

pthread_t tid;
void printAsync(const char *str, CBK_FUN fn)
{
    struct CBK_CALL cbk_call = {(void *)str, fn};
    pthread_create(&tid, NULL, thread_proc, (void *)(&cbk_call));    
}

void callback()
{
    puts("After Sync Call");
}

int main()
{
    printSync("I am Sync call");
    printAsync("I am a Async call", callback);
    puts("end");

    pthread_join(tid, NULL);
    return 0;
}
程序比较简单,基本思想就是先执行先同步输出, 接着printAsync会异步执行,且执行完后会回调callback函数,可是由于粗心大意,编译运行发现一直不成功,没办法,上gdb
# gdb a.out
(gdb) b printAsync             // 函数断点, 输入print后按tab和Linux效果一样
Breakpoint 1 at 0x400696: file error.c, line 31.
(gdb) s           &n
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值