当我尝试在32位linux上打印以下日志时,我看到了崩溃。相同的日志在64位linux中运行良好。
printf("store [%s] PREG marker 0x%x RegID %u Session ID %u Indices %u.%u [%s.%d] StoreID %x L/T <%d - %d> \n",
store->name, info->ume_preg.marker, regid, sid,
info->ume_preg.transport_idx, info->ume_preg.topic_idx,
store->name, ntohs(info->ume_preg.resp_port), store_id,
client->src->repo->lead_sqn,
client->src->repo->trail_sqn);
核心筹码: -
#0 0x00870b9f in __strlen_ia32 () from /lib/libc.so.6
#1 0x0083b4df in vfprintf () from /lib/libc.so.6
#2 0x008609f0 in printf () from /lib/libc.so.6
如果您在日志中看到我有两个字符串(store-&gt; name和store-&gt;名称,打印商店名称两次)。只有当我在打印中添加两个字符串以及其他参数时才会看到崩溃。如果我只有字符串和其他参数我没有看到崩溃。
注意仅在32位linux上崩溃。
我不确定为什么strlen仅针对32位linux崩溃。
操作系统信息: -
-bash-4.1$ uname -a
Linux 2.6.32-358.6.1.el6.i686 #1 SMP Tue Apr 23 18:13:20 UTC 2013 i686 i686 i386 GNU/Linux
的libc: -
-bash-4.1$ /lib/libc-2.12.so
GNU C Library stable release version 2.12, by Roland McGrath et al.
Copyright (C) 2010 Free Software Foundation, Inc.
Compiled by GNU CC version 4.4.6 20120305 (Red Hat 4.4.6-4).
Compiled on a Linux 2.6.32 system on 2013-02-21.
有没有人对此有任何经验?