2011-07-13 27 views
7

Tôi đã gói mã C/C++ của mình bằng SWIG trong Perl. Tôi có vài lỗi phân đoạn vì mã gói. Tôi đang cố gắng sử dụng ddd với kịch bản Perl nhưng tiếc là ngay cả khi tôi đặt điểm ngắt trên dòng lệnh (mã gọi là mã C/C++), ddd không thể chuyển sang mã C/C++.gỡ lỗi một thư viện được gói bởi SWIG trong perl

Có cách nào để đặt điểm ngắt vào lib C của tôi khi tôi đang gỡ lỗi mã Perl hay bạn biết một cách hay/công cụ tốt để gỡ lỗi C lib khi tôi chạy tập lệnh Perl này?

Tôi đang sử dụng Linux/gcc.

Trả lời

6

tôi đã làm một điều đơn giản. Tôi đã gọi trực tiếp số gdb trên thông dịch viên perl.

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

Dường như khi scipt đang chạy bộ nhớ dùng chung cũng được tải trong bộ nhớ. Một khi điều này xảy ra tôi đã có sẵn tất cả các thông tin, chức năng và điểm ngắt để gỡ lỗi.

+0

Làm cách nào để gỡ lỗi nếu tôi đang sử dụng Komodo? – rpg

+0

Xin chào rpg. Tôi không có ý kiến. Tôi đã có một cái nhìn và Komodo có vẻ như một IDE gỡ lỗi độc quyền PERL script. Tôi không biết nếu nó có thể gỡ lỗi C/C++ hướng dẫn khi Perl gọi thư viện chia sẻ. Với GDB điểm khởi đầu là nhị phân cho trình thông dịch PERL. Điểm ngắt được đặt trong một dòng mã C/C++ không nằm trong một dòng của kịch bản Perl. –

0

Tôi chỉ sử dụng SWIG để gọi C++ từ TCL và gỡ lỗi bằng Visual Studio, nhưng cũng nên áp dụng cùng một ý tưởng cho trường hợp của bạn. Tôi sẽ mô tả những gì tôi đã làm để gỡ lỗi, hy vọng bạn có thể tìm ra cách áp dụng nó vào tình huống của bạn.

  • xây dựng một phiên bản debug của C++ mô-đun
  • Hãy chắc chắn rằng kịch bản TCL được bao gồm phiên bản debug (đường dẫn trong điểm lệnh TCL load lên phiên bản debug của các mô-đun)
  • Nơi breakpoint trong mã C++
  • Gọi tập lệnh TCL thông qua trình gỡ lỗi Visual Studio; ví dụ các lệnh được sử dụng là tclsh85.exe MyScript.tcl

HTH

Các vấn đề liên quan