void outputString(const char *str) {
cout << "outputString(const char *str) : " << str << endl;
}
hóa ra làLàm thế nào để làm cho gdb hiển thị tên hàm không mangling ban đầu trên mô hình tháo gỡ?
Dump of assembler code for function _Z12outputStringPKc:
0x004013ee <_Z12outputStringPKc+0>: push ebp
0x004013ef <_Z12outputStringPKc+1>: mov ebp,esp
0x004013f1 <_Z12outputStringPKc+3>: sub esp,0x8
0x004013f4 <_Z12outputStringPKc+6>: mov DWORD PTR [esp+4],0x443000
0x004013fc <_Z12outputStringPKc+14>: mov DWORD PTR [esp],0x4463c0
0x00401403 <_Z12outputStringPKc+21>: call 0x43f6e8 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0x00401408 <_Z12outputStringPKc+26>: mov edx,DWORD PTR [ebp+8]
0x0040140b <_Z12outputStringPKc+29>: mov DWORD PTR [esp+4],edx
0x0040140f <_Z12outputStringPKc+33>: mov DWORD PTR [esp],eax
0x00401412 <_Z12outputStringPKc+36>: call 0x43f6e8 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc>
0x00401417 <_Z12outputStringPKc+41>: mov DWORD PTR [esp+4],0x43e4c8
0x0040141f <_Z12outputStringPKc+49>: mov DWORD PTR [esp],eax
0x00401422 <_Z12outputStringPKc+52>: call 0x42e170 <_ZNSolsEPFRSoS_E>
0x00401427 <_Z12outputStringPKc+57>: leave
0x00401428 <_Z12outputStringPKc+58>: ret
End of assembler dump.
Tất cả các disassemblies chỉ hiển thị các tên hàm manglinged, nhưng nó không eaiser cho lập trình viên để de-mangling và nhận được tên hàm ban đầu với các bận tâm để gõ info symbol address
cho mỗi mangling tên đáp ứng, do đó, có bất kỳ phương pháp mà có thể làm cho gdb hiển thị tên không mangling chức năng trên mô hình lắp ráp?
nhưng nó hoạt động tốt trong cổng MinGW của tôi. – Jichao
Có một báo cáo lỗi, https://sourceware.org/bugzilla/show_bug.cgi?id=12021. Điều này chỉ không hoạt động đối với các ký hiệu có hậu tố @plt. – Ruslan
Hoạt động tuyệt vời trong năm 2015. –