Gdb 禁用位置独立代码&;Linux上带Qt5的ASLR?
在Linux/Sid/x86-64上,对于使用Qt5(Debian打包的5.12.5)的GPLv3+项目,我更喜欢禁用它以简化调试(并促进)。FWW,这个项目在运行时在运行时生成C++代码,编译成一个,并正在获得所得到的插件。因此,使用Gdb 禁用位置独立代码&;Linux上带Qt5的ASLR?,gdb,debian,qt5,x86-64,aslr,Gdb,Debian,Qt5,X86 64,Aslr,在Linux/Sid/x86-64上,对于使用Qt5(Debian打包的5.12.5)的GPLv3+项目,我更喜欢禁用它以简化调试(并促进)。FWW,这个项目在运行时在运行时生成C++代码,编译成一个,并正在获得所得到的插件。因此,使用gdb绝对有用 因此,使用Debian的g++9.3.0编译的RefPerSys,在make clean和make fullclean之后,使用make RPS\u BUILD\u CODGENFLAGS=(或编辑以取消定义)我得到以下可重现的编译器错误: cca
gdb
绝对有用
因此,使用Debian的g++
9.3.0编译的RefPerSys,在make clean
和make fullclean
之后,使用make RPS\u BUILD\u CODGENFLAGS=
(或编辑以取消定义)我得到以下可重现的编译器错误:
ccache g++ -std=gnu++17 -Og -g3 -Wall -Wextra -I . -I /usr/local/include -I /usr/include -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I/usr/local/include -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/x86_64-linux-gnu/qt5 -DRPS_GITID=\"dae216918be51c0c025d8d57369d186db08e4923+\" -c -c -o refpersys.hh.gch-tmp refpersys.hh
In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qnamespace.h:43,
from /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs.h:48,
from /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject.h:46,
from /usr/include/x86_64-linux-gnu/qt5/QtCore/QObject:1,
from refpersys.hh:100:
/usr/include/x86_64-linux-gnu/qt5/QtCore/qglobal.h:1187:4: error: #error "You must build your code with position independent code if Qt was built with -reduce-relocations. " "Compile your code with -fPIC (-fPIE is not enough)."
1187 | # error "You must build your code with position independent code if Qt was built with -reduce-relocations. "\
| ^~~~~
正如错误消息所说,它与Debian People使用-reduce-relocations
构建的Qt5有关。从那时起,您必须使用独立于位置的代码构建代码
这只是从源代码重新编译Qt5的问题,还是比这更微妙?
更广泛地说:
如何在Debian/Sid上编译的Qt5代码上使用GDB监视点?
当然我想要硬件观察点。通常在gdb
下打印一些指针,例如0x7fafb071b8
然后watch*(int*)0x7fafb071b8
内部gdb
与上述问题相关的动机。从源代码编译Qt并不是那么简单
我刚刚添加了一个--no aslr
程序选项(使用来自的提示以编程方式禁用aslr)。该选项有时在当前进程上运行。从一次跑步到下一次跑步,我观察的地图大不相同
注:要复制错误,在成功执行make
后,不设置RPS\u BUILD\u CODGENFLAGS=
运行两次/refpersys--no aslr-dGUI--display=object
。这两个\u refpersys*Pmap*.tmp
文件(输出Pmap
)大不相同。我希望他们是相似的。对于2020年5月的编码细节,请参阅<代码> > RPSYDABABLE AASLR < /C>变量> C++源代码、文件,以及大部分……/P>
注意:上安装的7.1出现相同错误。
因此,在中,我们切换到。使用从源代码构建Qt-无减少重新定位将生成一个库,该库可以与非PIC对象文件链接,至少对于一个小的测试用例来说。从源代码构建Qt时,使用-no-reduce-relocations
将生成一个库,该库可以与非PIC对象文件链接,至少对于一个小的测试用例是如此。