Tôi có một tệp đối tượng C++ chứa các phiên bản của một số hàm mẫu C++. Tệp đối tượng được đề cập khởi tạo cùng một hàm cho một vài kết hợp khác nhau của tham số mẫu. Tôi đang cố gắng để gỡ lỗi một vấn đề và muốn xem xét việc tháo gỡ của một instantiation cụ thể của các chức năng mẫu (có nghĩa là, tôi biết các thông số mẫu cho các chức năng mà tôi muốn kiểm tra). Tôi thường làm điều này bằng cách sử dụng objdump
để tháo rời tệp đối tượng, nhưng nó (ít nhất theo mặc định) không thể loại bỏ tên hàm C++. Có cách nào để làm điều này không? Các tệp đối tượng được tạo bằng gcc 4.6.1.Có thể objdump un-mangle tên của chức năng mẫu C++?
14
A
Trả lời
13
Đường ống qua c++filt
? Có thể cần phải cung cấp cho nó -n
tùy thuộc vào việc các biểu tượng có đến w/hoặc w/o dấu gạch dưới hàng đầu hay không.
8
objdump -C
làm như được đề cập bởi Jason R trong nhận xét.
man objdump
nói:
Giải mã (demangle) tên biểu tượng ở mức độ thấp vào tên người dùng cấp. Bên cạnh việc loại bỏ bất kỳ dấu gạch dưới ban đầu nào được thêm vào trước bởi hệ thống, điều này làm cho các tên hàm C++ có thể đọc được. Trình biên dịch khác nhau có phong cách mangling khác nhau. Đối số kiểu tùy chọn demangling tùy chọn có thể được sử dụng để chọn kiểu demangling thích hợp cho trình biên dịch của bạn.
Mẫu đầu ra trên một operator new[]
trên và objdump -CSr
gọi:
char *sn = new char[4];
10: bf 04 00 00 00 mov $0x4,%edi
15: e8 00 00 00 00 callq 1a <main+0x1a>
16: R_X86_64_PC32 operator new[](unsigned long)-0x4
Without -C
nó sẽ hiển thị tên đọc sai _Znam
.
nm
cũng có tùy chọn đó.
Các vấn đề liên quan
- 1. Delphi - unmangle tên trong BPL's
- 2. Mẫu mẫu Chức năng C++
- 3. C++ Mẫu Chức năng biến thể của loại đã biết
- 4. Extracting C/C++ chức năng nguyên mẫu
- 5. Có tên cho chức năng hoặc mẫu này không?
- 6. Chức năng đóng gói C++ mẫu
- 7. objdump và giải quyết liên kết của các cuộc gọi chức năng cục bộ?
- 8. C++ functor và các mẫu chức năng
- 9. Cách lấy tên hàm của con trỏ chức năng C
- 10. C++ tăng chức năng quá tải mẫu
- 11. Mẫu: chức năng mẫu không hoạt động tốt với chức năng thành viên mẫu của lớp
- 12. Chức năng không gian tên C++
- 13. Chức năng mẫu C++ lấy lớp mẫu làm tham số
- 14. Mẫu chức năng thành viên C++ Mẫu variadic
- 15. Tôi có thể chuyển mẫu vào một chức năng không?
- 16. Các mẫu biến thể không có tham số chức năng
- 17. Tôi có thể cung cấp địa chỉ objdump và để nó tháo rời chức năng chứa không?
- 18. Javascript Chức năng và Tên Biểu mẫu xung đột
- 19. Chức năng mẫu chuyên môn
- 20. Javascript: Tên chức năng động
- 21. Một chức năng của dòng trong C?
- 22. gọi mẫu chức năng của lớp mẫu cơ sở
- 23. Chức năng và biến có cùng tên
- 24. Go mẫu chức năng
- 25. Chức năng mẫu làm đối số mẫu
- 26. In tên tệp, số dòng và tên hàm của chức năng gọi - C Prog
- 27. Chức năng mẫu trong C# - Loại trả về?
- 28. C++, chức năng con trỏ đến con trỏ mẫu chức năng
- 29. C++ mẫu chức năng với các đối số biến
- 30. Chức năng của iPhone SDK Objective C có hỗ trợ các chức năng bên trong các chức năng không?
Có vẻ như điều đó sẽ hiệu quả. Tôi cũng chỉ tìm thấy tùy chọn '-C' cho' objdump', dường như nó hoạt động cho ứng dụng của tôi ít nhất. –
@JasonR thậm chí tốt hơn. Trong lịch sử đã có các lựa chọn và tên biến thể như 'nm ++ 'nhưng chúng bị đánh và bỏ lỡ và tôi đã có thói quen chỉ là đường ống mọi thứ. – smparkes
@ JasonR, cảm ơn bạn đã đăng bài này ... '-C' không được đăng ký trong phiên bản' objdump' của tôi (không hiển thị với '--help') nhưng nó vẫn hoạt động. –