我有一個程序,它是SIGSEGV
'庫中的代碼。在查看造成SIGSEGV
(參見下文)的聲明時,沒有什麼會跳出來。但是代碼使用了英特爾的AES-NI,我對它並不熟悉。確定在GDB下導致SIGSEGV的CPU陷阱?
我發出handle all
希望能夠捕捉到造成SIGSEGV
的陷阱,但程序仍然只是崩潰而不是告訴我陷阱。
我怎樣才能讓GDB顯示導致SIGSEGV
的CPU陷阱?
Program received signal SIGSEGV, Segmentation fault.
0x00000000004ddf0b in CryptoPP::AESNI_Dec_Block(long long __vector&, long long __vector const*, unsigned int) (block=..., subkeys=0x7fffffffdc60, rounds=0x0)
at rijndael.cpp:1040
1040 block = _mm_aesdec_si128(block, subkeys[i+1]);
(gdb) p block
$1 = (__m128i &) @0x7fffffffcec0: {0x2e37c840668d6030, 0x431362358943e432}
(gdb) x/16b 0x7fffffffcec0
0x7fffffffcec0: 0x30 0x60 0x8d 0x66 0x40 0xc8 0x37 0x2e
0x7fffffffcec8: 0x32 0xe4 0x43 0x89 0x35 0x62 0x13 0x43
*「這很可能是問題是對齊... 「* - 這也是我的想法。爲什麼我想看到實際的陷阱。 *「GDB沒有看到陷阱,只有操作系統......」 - - 這太糟糕了。在Windows平臺上,我們可以獲得更豐富的例外信息。操作系統獲取並滲透它。因爲它,我添加了Linux標籤。 – jww 2015-04-08 00:53:30
@jww公平地說,Linux也會在'siginfo'結構中傳播一些陷阱信息,'print $ _siginfo'可能會有所幫助。 – 2015-04-08 05:25:59