2010-10-25 31 views
5

Tôi đã thử chạy valgrind (memcheck và massif) trên một ứng dụng tôi đã viết, nhưng tất cả tôi nhận được trở lại là địa chỉ cho các chức năng được thực thi.Valgrind sẽ không trả lại dòng nguồn!

--------------------------------- 
Context accounted for 0.6% of measured spacetime 
    0x805F29A: (within prog_name) 
    0x8141740: (within prog_name) 

Called from: 
    0.6% : 0x812E077: (within prog_name) 

--------------------------------- 
Context accounted for 0.5% of measured spacetime 
    0x805F29A: (within prog_name) 
    0x81418FB: (within prog_name) 

Called from: 
    0.5% : 0x812E077: (within prog_name) 

tôi biên soạn ứng dụng của tôi với cờ -g để đưa những biểu tượng gỡ lỗi trong. Có bất kỳ lý do khác khiến valgrind sẽ không hiển thị dòng nguồn?

CHỈNH SỬA: phiên bản valgrind 3.2.1-Debian; g ++ 4.3.1

+1

Không chắc, nhưng nếu bạn 'gdb prog_name' ứng dụng của bạn và thử một cái gì đó như' break 0x812E077', không 'gdb' hiển thị số dòng? (Bạn không cần phải chạy chương trình 'chạy', chỉ cần' gdb' tải nó.) – aschepler

+0

@aschepler - Đã thử nó. Bất cứ khi nào tôi cố gắng làm điều đó, gdb không thể tìm thấy hàm có tên "0x812E077" và hỏi xem nó có nằm trong thư viện mà nó sẽ tải sau này ... do đó không hoạt động. –

+1

Rất tiếc, đó phải là 'break * 0x812E077'. Nhưng vui vì bạn tìm thấy một sửa chữa. – aschepler

Trả lời

8

tôi phát hiện ra rằng tôi đã thông qua ở cả -g-ggdb cờ để g++ tại thời gian biên dịch. Bỏ qua cờ -g đã khiến vấn đề này biến mất.

1

Tôi đoán, bạn không đề cập đến các cờ phù hợp và đi kèm cờ mặc định.

--show-reachable là một cờ như vậy sẽ được bật, vui lòng xem các cờ khác và bật chúng.

--Cheers

2

Có một vài lý do có thể:

  • bạn có thể vô tình tước thực thi của bạn (rất có thể giải thích),
  • bạn có thể thực thi mã JITted (mặc dù địa chỉ không giống như đó là trường hợp).

file prog_name nói gì? Nếu nó nói "bị tước", đó là một vấn đề. Bạn cũng có thể muốn kiểm tra xem các công cụ khác, ví dụ: GDB biết những gì biểu tượng là tại địa chỉ 0x805F29A:

gdb prog_name 
(gdb) info symbol 0x805F29A 
+0

Tôi chưa bao giờ nhận được tin nhắn bị tước. Tôi không biết chắc chắn, nhưng tôi nghi ngờ việc trộn các cờ '-g' và '-ggdb' đã làm hỏng nó. –

+0

@sheepsimulator Bạn có thể nghi ngờ tất cả những gì bạn muốn, nhưng nếu bạn muốn chúng tôi giúp bạn, vui lòng cung cấp thông tin mà chúng tôi yêu cầu: những gì * chính xác * không 'tập tin prog_name' nói? biểu tượng thông tin của GDB chính xác là gì? –

+0

Tôi đánh giá cao chương trình hỗ trợ của bạn, nhưng vấn đề này đã biến mất khi tôi bỏ qua cờ -g lúc biên dịch. Tôi xem câu hỏi của tôi đã được trả lời. –

1

Đối với độc giả khác với vấn đề tương tự (i có giống nhau nhưng tùy chọn trình biên dịch của tôi ở đâu ok): Nó chỉ ra rằng valgrind cần đường dẫn đến thực thi, nếu bạn không cung cấp cho nó sau đó nó sẽ chạy ok nhưng nó sẽ không cung cấp cho bạn số dòng. Trong trường hợp của tôi là thực thi trong một thư mục khác nhau, đó là trong PATH của tôi, nhưng để có được những thông tin đường tôi đã phải chạy

valgrind --leak kiểm tra = đầy đủ path_to_myprogram/myprogram

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