Mac OS X 10,6: syslog () EXC_BAD_ACCESS - PullRequest
       22

Mac OS X 10,6: syslog () EXC_BAD_ACCESS

2 голосов
/ 03 февраля 2012
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x18d1c070
0x96350250 in strlen ()
(gdb) bt
#0  0x96350250 in strlen ()
#1  0x963574d1 in strdup ()
#2  0x9636e420 in asl_set_query ()
#3  0x9636e2d9 in asl_set ()
#4  0x9636d5d2 in vsyslog ()
#5  0x9636d3e1 in syslog ()
#6  0x23405e78 in gp_log (level=4, fmt=0x23429b68 "%-s:%4d: size: %d\n") at ../../rpc/mac/gp_lib.c:49
#7  0x23404c61 in rpc_encap (out=0xbfffb23c, args=0xbfffd2d0) at ../../rpc/rpc.c:178
#8  0x23405269 in rpc_encap_args (pkt_out=0xbfffb20c, pd=0x2342e460, args=0xbfffd2d0) at ../../rpc/rpc.c:120
#9  0x23405549 in rpc_call_common (c=0x23053048, pd=0x2342e460, args=0xbfffd2d0, timeout=0, pkt_in=0xbfffd30c, size_in=0xbfffd308) at ../../rpc/rpc.c:227
#10 0x234057f9 in rpc_call_actor (pd=0x2342e460, args=0xbfffd2d0, timeout=0, pkt_in=0xbfffd30c, size_in=0xbfffd308) at ../../rpc/rpc.c:204
#11 0x23402839 in MobileIPAPIStopRoaming_w () at ../../MIPSDKv4/MobileIPSDK/MobileIP4_w.c:229
#12 0x23401420 in MobileIPAPIStopRoaming (mipHandle=1) at ../../MIPSDKv3/MobileIPSDKv3.c:300
#13 0x21c0e1a6 in GP_ICM_CONNMGR::CMobileIpSdk::MobileIPAPIStopRoaming ()
#14 0x21c0e6cf in GP_ICM_CONNMGR::CMobileIpSdk::Uninit ()
#15 0x1e749c19 in GP_ICM_RULEMGR::CRulesManager::Uninit ()
#16 0x0004df18 in CConnectionManager::UninitConnectionManager ()
#17 0x0013e6b4 in ICMApplication::UninitICMApplication ()
#18 0x001495b2 in main ()
(gdb) info registers 
eax            0xffffffff   -1
ecx            0x18d1c07c   416399484
edx            0x18d1c070   416399472
ebx            0x9636e2f0   -1774787856
esp            0xbfffaa4c   0xbfffaa4c
ebp            0xbfffaa78   0xbfffaa78
esi            0x964c6cc0   -1773376320
edi            0x18d1c07c   416399484
eip            0x96350250   0x96350250 <strlen+16>
eflags         0x10286  66182
cs             0x17 23
ss             0x1f 31
ds             0x1f 31
es             0x1f 31
fs             0x0  0
gs             0x37 55
(gdb) frame 1
#1  0x963574d1 in strdup ()
(gdb) frame 2
#2  0x9636e420 in asl_set_query ()
(gdb) frame 3
#3  0x9636e2d9 in asl_set ()
(gdb) frame 4
#4  0x9636d5d2 in vsyslog ()
(gdb) frame 5
#5  0x9636d3e1 in syslog ()
(gdb) frame 6
#6  0x23405e78 in gp_log (level=4, fmt=0x23429b68 "%-s:%4d: size: %d\n") at ../../rpc/mac/gp_lib.c:49
49      syslog(5, "%s", buf);
(gdb) p buf
$5 = "rpc_encap: 178: size: 48\n", '\0' <repeats 998 times>
(gdb) p level
$6 = 4
(gdb) p fmt
$7 = 0x23429b68 "%-s:%4d: size: %d\n"

Функция gp_log такова:

#define LOG_DEBUG(format, ...) gp_log(DL_DEBUG, "%-s:%4d: " format, __FUNCTION__, __LINE__, ##__VA_ARGS__)

#define LOG_MAX_LENGTH      1024

void gp_log(int level, const char *fmt, ...)
{
    va_list ap;
    char buf[LOG_MAX_LENGTH] = {0};

    if (level > log_level)
        return;

    va_start(ap, fmt);
    vsnprintf(buf, LOG_MAX_LENGTH, fmt, ap);
    va_end(ap);

    syslog(level, "%s", buf);
    //printf("%s", buf);
}

Этот оператор в rpc_encap выводит содержимое целого числа, которое приводит к этому сбою.

LOG_DEBUG("size: %d\n", size);

Авария воспроизводима на 100%. Я проверяю параметры для syslog () каждый раз перед авария: Буф всегда "rpc_encap: 178: размер: 48 \ n". уровень всегда 4.

Если я использую printf вместо syslog, сбой исчезает.

1 Ответ

0 голосов
/ 09 февраля 2012

Чтобы собрать универсальную библиотеку для Mac 10.5 / 6/7 (Intel Arch), я добавляю эти флаги при компиляции на 10.6 или 10.7,

CFLAGS = -force_cpusubtype_ALL -mmacosx-version-min=10.5 -arch i386

и произошел сбой.

Теперь я убрал эти флаги и собрал 10.5, больше не происходил сбой (также библиотека работает на 10.5 / 6/7).

...