排查Illegal Instruction崩溃的GDB调试步骤:
1. 启动GDB调试:
gdb ./ilogtail
run
程序会在触发非法指令时自动停止,显示SIGILL信号。
2. 查看崩溃位置:
(gdb) bt # 查看完整调用堆栈
(gdb) disas # 反汇编当前函数
找到具体的汇编指令(如vextracti128)。
3. 确认指令集问题:
对照CPU支持的指令集(lscpu查看Flags字段),确认崩溃指令是否在支持范围内。例如vextracti128属于AVX2,但CPU flags中只有avx没有avx2。
4. 定位源码位置:
通过堆栈信息定位到具体的源文件和库(如folly/Singleton-inl.h),判断是哪个编译单元引入了不兼容指令。
5. 验证修复:
使用objdump -d binary | grep vextracti128确认重新编译后的二进制文件不再包含不兼容指令。
关键命令:info registers查看寄存器状态,x/i $pc查看当前指令。




