我有一个用C++写的网络服务程序,在x86环境下长期运行没有任何问题。最近把它迁移到鲲鹏服务器上编译运行,编译过程很顺利,没有报错或警告。但程序跑起来之后,每隔几个小时到一天左右,就会随机出现一次段错误崩溃。崩溃的位置不固定,有时候在字符串处理函数里,有时候在STL容器的操作中,甚至有时候会在看似简单的赋值语句上崩溃。开启core dump后分析,发现崩溃时的调用栈往往指向一些底层库函数,但上下文看起来没什么异常。我在x86上用Valgrind检查过内存访问,没有发现越界或者未初始化的内存读取。用鲲鹏上的AddressSanitizer重新编译后运行,崩溃频率大大降低,但偶尔还是会报出一些堆栈缓冲区溢出,地址看起来不太合理。想请教这种随机性很强的崩溃在迁移场景下应该如何定位。
我有一个用C++写的网络服务程序,在x86环境下长期运行没有任何问题。最近把它迁移到鲲鹏服务器上编译运行,编译过程很顺利,没有报错或警告。但程序跑起来之后,每隔几个小时到一天左右,就会随机出现一次段错误崩溃。崩溃的位置不固定,有时候在字符串处理函数里,有时候在STL容器的操作中,甚至有时候会在看似简单的赋值语句上崩溃。开启core dump后分析,发现崩溃时的调用栈往往指向一些底层库函数,但上下文看起来没什么异常。我在x86上用Valgrind检查过内存访问,没有发现越界或者未初始化的内存读取。用鲲鹏上的AddressSanitizer重新编译后运行,崩溃频率大大降低,但偶尔还是会报出一些堆栈缓冲区溢出,地址看起来不太合理。想请教这种随机性很强的崩溃在迁移场景下应该如何定位。