2011-07-13 18 views
7

He envuelto mi código C/C++ usando SWIG en Perl. Tengo pocos errores de segmentación debido al código envuelto. Estoy tratando de usar ddd con el script de Perl, pero desafortunadamente incluso si establezco un punto de interrupción en una línea del script (el que llama al código C/C++), ddd no puede avanzar hasta el código C/C++.depurando una biblioteca compartida envuelta por SWIG en perl

¿Hay alguna forma de establecer un punto de interrupción en mi biblioteca C cuando estoy depurando el código Perl o conozco una buena forma/herramienta para depurar la biblioteca C cuando estoy ejecutando este script Perl?

Estoy usando Linux/gcc.

Respuesta

6

hice una cosa simple. Llamé al gdb directamente en el intérprete perl.

gdb /usr/bin/perl 
    (gdb) r myscript 
    #block the script someway or rerun it 
    (gdb) b whatever_my_function 

Parece que una vez que scipt se ejecuta, la memoria compartida también se carga en la memoria. Una vez que esto sucedió, tengo disponible toda la información, las funciones y el punto de interrupción para la depuración.

+0

¿Cómo puedo depurarlo si estoy usando Komodo? – rpg

+0

Hola rpg. No tengo idea. Eché un vistazo y Komodo parece un IDE que depura exclusivamente el script PERL. No sé si es capaz de depurar instrucciones C/C++ cuando Perl llama a bibliotecas compartidas. Con GDB, el punto de partida es el binario para el intérprete PERL. El punto de interrupción se establece en una línea de código C/C++ que no está en una línea del script de Perl. –

0

Solo he usado SWIG para llamar a C++ desde TCL, y lo depuré usando Visual Studio, pero las mismas ideas deberían aplicarse también a su caso. Describiré lo que he hecho para depurar, espero que puedas descubrir cómo aplicarlo a tu situación.

  • construir una versión de depuración del C++ módulo
  • Asegúrese de que el guión de TCL está incluyendo la versión de depuración (la ruta en los puntos de comando TCL load a la versión de depuración del módulo)
  • Colocar puntos de interrupción en el código de C++
  • Invoca la secuencia de comandos TCL a través del depurador de Visual Studio; por ejemplo, el comando utilizado es tclsh85.exe MyScript.tcl

HTH

Cuestiones relacionadas