Как напечатать биты двойного в шестнадцатеричном, в GDB? - PullRequest
1 голос
/ 28 июня 2019

Я думал, что это будет p/x, но это дает странные результаты. Это ошибка или я что-то не так делаю?

(gdb) ptype row.DBL_NPIO2.m_value
type = double
(gdb) p row.DBL_NPIO2.m_value
$6 = -1.5707963267948966
(gdb) p/x row.DBL_NPIO2.m_value
$7 = 0xffffffffffffffff
(gdb) print (double)0xffffffffffffffff
$8 = 1.844674407370955e+19

Это на компьютере с CentOS5 x86, и я отлаживаю код C ++, созданный с помощью gcc 4.4 (неоптимизированный, w / -g)

mattheww@SEN-CentOS5: ~$ uname -a
Linux SEN-CentOS5 2.6.18-238.9.1.el5 #1 SMP Tue Apr 12 18:10:13 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux
mattheww@SEN-CentOS5: ~$ gdb --version
GNU gdb (GDB) CentOS (7.0.1-45.el5.centos)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.

1 Ответ

1 голос
/ 28 июня 2019

В x86_64 double и unsigned long имеют одинаковый размер, вы можете сначала преобразовать double в unsigned long, а затем распечатать его.

p /x *(unsigned long*)&row.DBL_NPIO2.m_value

Или вы можете

x/8x &row.DBL_NPIO2.m_value

Который будет печатать байты с низкого адреса на высокий адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...