gdb/strace
文章平均质量分 58
SoulNov23
那些我们说着永远不分离的朋友,早已散落在天涯,时光的洪流中,我们总会长大。
展开
-
spdlog和fork冲突问题
遇到个问题,使用spdlog的async_logger打印日志,一直都是正常的,但是调用了fork之后就不打印了先使用打印TODO大法,使用的spdlog的default_logger打印,走的console打印,结果发现console打印没问题,就async_logger在fork之后就不打印了使用strace -f运行看一下这里的write 1就是console打印的,在fork前后都是正常的,但是write 3只在fork之前调用了,fork后没有调用,直接卡在了futex FUTEX原创 2022-02-19 21:41:23 · 939 阅读 · 0 评论 -
Inferior 1 (process xxx) exited with code 0177
今天调试的时候遇到个很奇怪的问题,我的服务是多进程的,每次收到请求子进程就退出了,然后又重新被父进程拉起一个新的子进程,看了下core目录也没有生成core文件。通过日志看到当前执行到了哪里,在后面调用和return位置加打印TODO,再次调试,发现是在调用一个函数的时候直接退出了,并且都没有进入到函数里面去。通过ps -ef查看子进程的pid,然后gdb -p到子进程上,打断点,再次调试(gdb) b xxx.cpp:26No source file named xxx.cpp.Make b原创 2021-12-21 17:00:05 · 3348 阅读 · 2 评论 -
memcmp比较两个struct是否相等
struct MyStruct{ char a; int b;};MyStruct A, B;memcmp(&A, &B, sizeof(MyStruct));A和B是否可以通过memcmp来判断是否相等。我一直以为虽然要内存对齐,但是a后面会补三个’\0’所以还是可以判断是否相等的。真是迷之自信!这个问题其实最主要是考察你要知道内存对齐,MyStruct的实际大小是8就够了原创 2017-03-07 16:04:05 · 9045 阅读 · 2 评论 -
用strace查找进程卡死原因
最近遇到进程卡死的情况,但是自己调试的过程中并不一定能复现,都是需要运行一段时间某些条件下才会触发,对于这种运行着不能破坏现场的情况,我们可以使用gdb -p和strace -p来跟踪。 首先我们用ps auxf查看我们的进程执行到了哪一步: 可以看到执行到了docker exec -i 178.20.1.229_0115034556 ls然后就卡死了 然后我们进一步通过strace查看...原创 2018-01-15 14:59:03 · 25641 阅读 · 15 评论