1

を呼び出すピンツールがありますPIN_Backtrace()libunwindでは一部のレジスタがサポートされていないようでx86_64、これにより次のエラー メッセージが表示され、異常終了します。

libunwind: uint64_t libunwind::Registers_x86_64::getRegister(int) const Source/bionic/libunwind/src/Registers.hpp:342 - unsupported x86_64 register
Aborted

これらのエラーがあってもプログラムを続行したい。この状況を処理する最も効率的な方法は何ですか?

pintoolを使用してデバッグしgdbました。abort()デバッガーが を受信したときのバックトレースは次のとおりです。

(gdb) bt
#0  0x00007ffff726c22b in ?? ()
#1  0x00007fffeca88730 in ?? ()
#2  0x00007ffff726c363 in ?? ()
#3  0x0000000000005386 in ?? ()
#4  0x0000000000000001 in ?? ()
#5  0x0000000000000000 in ?? ()

info proc mappingアドレス範囲を次のように示します。

...
0x7fffeea3a000     0x7ffff71fb000  0x87c1000        0x0 
0x7ffff71fb000     0x7ffff7283000    0x88000        0x0 /home/ahmad/Programs/pin-3.7-97619-g0d0c92f4f-gcc-linux/intel64/runtime/pincrt/libc-dynamic.so
0x7ffff7283000     0x7ffff7284000     0x1000        0x0 
0x7ffff7284000     0x7ffff7286000     0x2000    0x88000 /home/ahmad/Programs/pin-3.7-97619-g0d0c92f4f-gcc-linux/intel64/runtime/pincrt/libc-dynamic.so
...

...
0x7fffe1687000     0x7fffec287000  0xac00000        0x0 
0x7fffec287000     0x7fffed28e000  0x1007000        0x0 
0x7fffed28e000     0x7fffedb6a000   0x8dc000        0x0 
...

が使用しているlibunwindライブラリPinは、 だけの特別なもののようPinCRTです。info /proc/<PID>/mapsこれは、次の出力で確認できますpintool

...
7ffff7e33000-7ffff7e45000 r-xp 00000000 08:13 466277                     /home/ahmad/Programs/pin-3.7-97619-g0d0c92f4f-gcc-linux/intel64/runtime/pincrt/libunwind-dynamic.so
7ffff7e45000-7ffff7e46000 r--p 00011000 08:13 466277                     /home/ahmad/Programs/pin-3.7-97619-g0d0c92f4f-gcc-linux/intel64/runtime/pincrt/libunwind-dynamic.so
7ffff7e46000-7ffff7e47000 rw-p 00012000 08:13 466277                     /home/ahmad/Programs/pin-3.7-97619-g0d0c92f4f-gcc-linux/intel64/runtime/pincrt/libunwind-dynamic.so
...
4

0 に答える 0