2015-01-18 24 views
5

Tôi cần gỡ lỗi đống tràn trong một dự án rất lớn. Sau khi chơi với valgrind một chút, nó có vẻ như là công cụ hoàn hảo để phát hiện khối heap overruns trong C, vì vậy tôi muốn chạy ứng dụng iOS của chúng tôi với nó.Có thể chạy valgrind trên thiết bị và trình mô phỏng iOS không?

Tôi đã xây dựng và cài đặt valgrind từ thân cây trên OS X Yosemite và đã viết một chương trình thử nghiệm với luồng tràn cố ý và xác minh rằng valgrind bắt và báo cáo chúng.

Bây giờ tôi muốn chạy một ứng dụng thử nghiệm trong mô phỏng với nó. Tôi đã đọc rằng nó có thể chạy trong trình mô phỏng iOS bằng cách sử dụng execl(), nhưng khi tôi làm như vậy, tôi thấy lỗi sau trong bảng điều khiển.

dyld: thiếu LC_DYLD_INFO lệnh tải

Sau đó, ứng dụng sẽ sụp đổ trong dyldbootstrap :: rebaseDyld() với EXC_BAD_ACCESS. Có điều gì khác cần thiết ở đây không? Valgrind dường như cũng hỗ trợ arm64 bây giờ. Có thể gói valgrind thực thi với ứng dụng của tôi và chạy nó trên một thiết bị không?

#define VALGRIND "/usr/local/bin/valgrind" 

int main(int argc, char * argv[]) { 

    if (argc >= 2 && strcmp(argv[1], "-valgrind") == 0) { 
     if (execl(VALGRIND, VALGRIND, argv[0], NULL) < 0) { 
      NSLog(@"Failed to relaunch under valgrind"); 
      exit(1); 
     } 
     NSLog(@"Running under valgrind!!"); 
    } 

    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 
+2

Tôi gặp vấn đề tương tự. Valgrind chạy trên thực thi không mô phỏng tốt. Thủ thuật execl này được sử dụng để làm việc trước ... – dbv

+2

Xin chào, bạn đã tìm thấy giải pháp chưa? :) Sẽ thực sự đánh giá cao một giải pháp cho vấn đề này. –

Trả lời

0

Bạn có thể sử dụng xcrun simctl spawn để bắt đầu quá trình tùy ý trên trình giả lập nhưng bạn không thể chạy thực thi macOS trong môi trường trình mô phỏng. Nó chia sẻ hạt nhân với macOS nhưng khác biệt. Bạn sẽ phải xây dựng Valgrind cho iOS, sau đó thả nó vào thư mục dữ liệu của thiết bị và thử sinh sản nó.

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