2016-06-02 22 views
2

Ich bin neu in Lisp und versuche, mit ZMQ darin zu arbeiten. Für eine einfache Funktion erhalte ich den Fehler unten. Wie debugge ich diesen Fehler? Gibt es Hilfsmittel, um zu helfen? Es fällt mir nicht in den ldb, wie sehe ich was an der Adresse mit dem Fehler gedruckt wird?sbcl Speicherfehler-Fehler mit zeromq

Unhandled memory fault at #x10CC8B000. 
    [Condition of type SB-SYS:MEMORY-FAULT-ERROR] 

Restarts: 
0: [RETRY] Retry SLIME REPL evaluation request. 
1: [*ABORT] Return to SLIME's top level. 
2: [ABORT] abort thread (#<THREAD "new-repl-thread" RUNNING {1003E0F353}>) 

Backtrace: 
    0: (SB-SYS:MEMORY-FAULT-ERROR) 
     [No Locals] 
    1: ("foreign function: call_into_lisp") 
     [No Locals] 
    2: ("foreign function: post_signal_tramp") 
     [No Locals] 
    3: ("foreign function: _ZN3zmq6pipe_t12get_identityEv") 
     [No Locals] 
    4: ("foreign function: _ZN3zmq8router_t5xrecvEPNS_5msg_tE") 
     [No Locals] 
    5: ("foreign function: _ZN3zmq5rep_t5xrecvEPNS_5msg_tE") 
     [No Locals] 
    6: ("foreign function: _ZN3zmq13socket_base_t4recvEPNS_5msg_tEi") 
     [No Locals] 
    7: ("foreign function: _ZL9s_recvmsgPN3zmq13socket_base_tEP9zmq_msg_ti") 
     [No Locals] 
    8: (ZEROMQ::%MSG-RECV #.(SB-SYS:INT-SAP #X005002D0) #.(SB-SYS:INT-SAP #X06006000) 0) 
     Locals: 
     SB-DEBUG::ARG-0 = #.(SB-SYS:INT-SAP #X005002D0) 
     SB-DEBUG::ARG-1 = #.(SB-SYS:INT-SAP #X06006000) 
     SB-DEBUG::ARG-2 = 0 
    9: ((LAMBDA (&REST SB-DI::ARGS) :IN SB-DI::HANDLE-SINGLE-STEP-AROUND-TRAP) #.(SB-SYS:INT-SAP #X06006000) #S(ZEROMQ:MSG :RAW #.(SB-SYS:INT-SAP #X005002D0))) 
     Locals: 
     SB-DI::ARGS = (#.(SB-SYS:INT-SAP #X06006000) #S(ZEROMQ:MSG :RAW #.(SB-SYS:INT-SAP #X005002D0))) 
10: (RECV) 
     Locals: 
     CONTEXT = #.(SB-SYS:INT-SAP #X00500CC0) 
     SOCKET = #.(SB-SYS:INT-SAP #X06006000) 
11: (SB-INT:SIMPLE-EVAL-IN-LEXENV (RECV) #<NULL-LEXENV>) 
     Locals: 
     SB-DEBUG::ARG-0 = (RECV) 
     SB-DEBUG::ARG-1 = #<NULL-LEXENV> 
12: (EVAL (RECV)) 
     Locals: 
     SB-DEBUG::ARG-0 = (RECV) 
--more-- 

Hier ist der Code, den ich versuche zu laufen. Ich bin diese beiden Funktionen in zwei verschiedenen sbcl laufenden Prozesse

sbcl < 1>

(defun send() 
     (zmq:with-context (context) 
     (zmq:with-socket (socket context :req) 
      (break) 
      (zmq:connect socket "tcp://127.0.0.1:3333") 
      (break) 
     (zmq:msg-send socket (zmq:make-msg :size 6 :data "Jello"))))) 
(send) 

sbcl < 2>

(defun recv() 
     (zmq:with-context (context) 
     (zmq:with-socket (socket context :rep) 
      (break) 
      (zmq:bind socket "tcp://127.0.0.1:3333") 
      (break) 
     (zmq:msg-recv 
      socket (zmq:make-msg :size 6))))) 
(recv) 

[EDIT]

Nach etwas herumgegraben, fand ich diese Nachricht im Puffer

* sbcl(49664,0x700000104000) malloc: *** error for object 0x500058: incorrect checksum for freed object - object was probably modified after being freed. 
*** set a breakpoint in malloc_error_break to debug 
CORRUPTION WARNING in SBCL pid 49664(tid 123145303375872): 
Received signal 6 in non-lisp thread 123145303375872, resignalling to a lisp thread. 
The integrity of this image is possibly compromised. 
Continuing with fingers crossed. 

Ich habe das gleiche C-Bibliothek verwendet damit Python ist & Knoten Bindungen und es funktioniert ohne Fehler in Python und Knoten. Ich renne nur in diese Fehler mit CL

+0

Diese Art von Fehlern tritt auf, wenn Sie mit C-Code mit Fremdfunktionsschnittstelle (CFFI) kommunizieren. Grundsätzlich wird ein C-Zeiger schlecht verwendet. Es scheint Probleme mit 'ZEROMQ ::% MSG-RECV 'zu geben, aber wir wissen nicht, was Sie versucht haben. Können Sie den Code, der den Fehler auslöst, veröffentlichen, damit wir versuchen können, ihn zu replizieren? – coredump

+1

Ja, ich bin CFFI, oder eher die Bibliothek ist. Ich habe den Code eingefügt, den ich ausführen möchte. Der Speicherfehler tritt nicht jedes Mal auf. Manchmal scheint es richtig funktioniert zu haben, und manchmal stürzt sbcl einfach ab und ich bekomme die folgende Meldung 'Lisp Verbindung wurde unerwartet geschlossen: Verbindung durch entfernten Peer unterbrochen ' – saq7

+0

Sind die Nachrichten wirklich größer (6) als ihre Daten (5) – tfb

Antwort

0

So nach ein paar Tagen im reromq IRC hängen, mit lldb, um die Speicherprobleme zu debuggen, gab ich schließlich auf. Die CL-Bindungen für zeromq werden nicht unter OS X getestet und funktionieren nicht.

Ich wechselte zu Ubuntu, und hatte keine solchen Probleme.