2010-09-15 8 views
5

estoy depuración de algún otro programa de Qt y se encontró con el siguiente mensaje de error, que no entiendo:GDB mensaje de error: DW_OP_reg, DW_OP_piece y DW_OP_bit_piece

DWARF-2 expression error: DW_OP_reg operations must be used either alone or in 
conjuction with DW_OP_piece or DW_OP_bit_piece. 

No estoy seguro de lo que eso significa y Google no es de mucha ayuda.

Aquí está el contexto - sLocation es un QString que se declaró unas líneas antes. Sin embargo, se crea a partir de las funciones que fueron inline, así que no estoy seguro de su valor y estoy tratando de comprobar antes de ser anexado a:

(gdb) printqstring suffix 
(QString)0xffffbd80: "sorted" 
(gdb) next 
1241  sLocation += suffix; 
(gdb) printqstring sLocation 
Can't take address of "sLocation" which isn't an lvalue. 
(gdb) info local 
sLocation = <error reading variable sLocation (DWARF-2 expression error: 
    DW_OP_reg operations must be used either alone or in conjuction with 
    DW_OP_piece or DW_OP_bit_piece.)> 

Podría alguien por favor explicar lo que significa que el mensaje de error o lo que podría causar ¿eso?

Respuesta

4

El mensaje de error significa que GDB está leyendo DWARF2 información de depuración del ejecutable, y está rechazando esa información como no válida (no sigue el estándar DWARF2).

La información no válida es probable que se deba a un error en GCC, fijo en el SVN revisión 147187:

2009-05-06 Jakub Jelinek <[email protected]> 

    * dwarf2out.c (new_reg_loc_descr): Don't ever create DW_OP_regX. 
    (one_reg_loc_descriptor): Create DW_OP_regX here instead of calling 
    new_reg_loc_descr. 
    (loc_by_reference): If loc is DW_OP_regX, change it into DW_OP_bregX 0 
    instead of appending DW_OP_deref*. 
+1

Con la ayuda de alguien en IRC me fue capaz de usar 'readelf -wi/path/to/debug/lib' para identificar la entrada ofensiva:' bloque de 2 bytes: 53 6 (DW_OP_reg3; DW_OP_deref) .' Sin embargo, estoy usando gcc-4.4.4 que era etiqueta ged en r158895, así que creo que esto puede ser un error nuevo o relacionado. –

+0

Veo el mismo error en 'GNU gdb (GDB) 7.4.1-debian' con' gcc versión 4.7.2 (Debian 4.7.2-5) '. – HAL

1

que tiene el mismo problema al ejecutar una de 64 bits de Ubuntu 10.10. Sin embargo, el mismo código en 10.04 LTS 32bit funciona perfectamente.

Aquí está la salida versión de ambas configuraciones Ubuntu 10.10:

$ gcc -v 
Using built-in specs. 
Target: x86_64-linux-gnu 
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.4-14ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu 
Thread model: posix 
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) 

GCC en 10.04 LTS:

$ gcc -v 
Using built-in specs. 
Target: i486-linux-gnu 
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu 
Thread model: posix 
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5 

Cheers, Andre

Cuestiones relacionadas