2011-07-08 20 views
6

tôi nhận được thông báo sau trong gdb (phiên bản 7.1):đảo ngược bước multithread lỗi

[Thread debugging using libthread_db enabled]

và lệnh reverse-step

kết quả với các thông báo lỗi sau:

(gdb) reverse-step 
Target multi-thread does not support this command 

Tôi đang gỡ lỗi một mã nối tiếp ngay bây giờ, vì vậy tôi chắc chắn không cần đa luồng. Tôi có thể tắt tính năng này bằng cách nào đó để tôi nhận được các lệnh gỡ lỗi đảo ngược mới nhất để hoạt động không? Ngoài ra, nếu mã được song song với OpenMPI, sẽ không cần phải gỡ lỗi đa luồng, phải không?

Chỉnh sửa: Bộ này có được đặt làm cờ tổng hợp có thể bị loại trừ không?

Trả lời

9

Bạn không đề cập đến phiên bản GDB nào bạn đang sử dụng, nhưng từ một thời gian ngắn, thông số libthread-db-search-path khả dụng.

(gdb) set libthread-db-search-path /tmp 
(gdb) start 
Temporary breakpoint 1 at 0x400632: file threads.c, line 14. 
warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available. 

sẽ cho GDB để tra cứu đó là thư viện helper (libthread-db.so) trong một thư mục nơi mà nó không phải là, vì vậy gỡ lỗi multithread sẽ không được kích hoạt!

Tôi không chắc chắn về các ứng dụng song song OpenMPI là đa xử lý (trái ngược với OpenMP nơi chúng được đa luồng), vì vậy nó sẽ không thay đổi bất cứ điều gì cho bạn.

EDIT: gỡ lỗi Multithread thường chỉ được kích hoạt khi libpthread.so hoặc tương đương được tải bởi quá trình của bạn (ldd your-process để kiểm tra xem nó được liên kết như một thư viện chia sẻ) vì vậy nếu bạn không cần nó, có thể là một vấn đề trong kịch bản biên dịch của bạn.

+0

Cảm ơn rất nhiều! Tôi đặt đường dẫn libthread-db-search-path, nhưng vẫn còn, tôi nhận được: [Gỡ lỗi chủ đề bằng cách sử dụng libthread_db enabled] Sử dụng thư viện libthread_db host "/lib/libthread_db.so.1". Tôi sẽ cần phải xem xét cẩn thận hơn về điều này. Đa luồng được kích hoạt theo mặc định và đoạn mã mà tôi đang làm là nối tiếp (cho thời điểm này). Gdb phiên bản: GNU gdb (GDB) 7.2-ubuntu – tmaric

+0

lạ, tôi tăng gấp đôi kiểm tra nó làm việc trong máy của tôi! nếu bạn tuyệt vọng, bạn luôn có thể xóa/đổi tên thư viện '/ lib/libthread_db.so.1' của mình :) – Kevin

+0

'/tmp' là một trong những thư mục tồi tệ nhất mà bạn có thể sử dụng. Bất kỳ ai trên hệ thống cũng có thể cài đặt một '/ tmp/libthread_db.so.1' độc hại và sau đó bạn sẽ bị lật đổ. – aij