1、启动QtCreator软件,新建一个名为“QTestLib1”的控制台应用程序项目;
2、项目创建完毕后,调试运行程序。能够见到弹出控制台窗口,表示项目正常;
3、打开QTestLib1的项目目录,新建一个名为“include”的新目录,然后将之前创建过的QStaticLib1静态项目和QSharedLib1动态库项目的头文件拷贝到该目录中;
4、回到“QTestLib1目录”,再次新建一个“lib目录“,然后将静态库项目和动态库项目生成的Debug版静态库和动态库文件拷贝到该目录中;
5、回到QtCreator中,双击龅歧仲半打开“QTestLib1.pro”文件,通过INCLUDEPATH变量指定项目包含目录,通过LIBS变量指定项目引用的库目录和库文件(注:GCC编译器指定库目录和库文件,需要分别用-L和-l前缀,并且要求链入文件以lib前缀开头);
6、双击打开“main.cpp”文件,在该文件中包含静态库和动态库的头文件,然后在main函数中分别实例化QStaticLib1类和QSharedLib1类,然后分别调用它们的sayHello菱诎逭幂方法。代码添加完毕后,编译当前项目,编译输出窗口没有打开错误信息则表示代码正确;
7、项目编译完毕后,调试运行程序。不幸的是,程序直接“崩溃”了。QtCreator直接给出了反汇编代码,并提示“Stopped : signal-received”。但是,如果此刻继续点击调试工具栏中的“继续按钮”,发现控制台可以正常弹出并输出打印信息;
8、关闭控制窗口返回到QtCreator中,点击菜单栏上的“工具 > 选项”打开QtCreator的选项配置窗口。在该窗口中,选择“调试器 > GDB”,在“额外的启动命令”中加入“handle SIG32 nostop”命令,然后点击“OK按钮”确定设置;
9、设置完GDB额外的启动命令后,再次调试运行程序。你会发现程序一切正常了,并没有之前出现的反汇编代码;
10、最后补充一下,这种崩溃问题实际是某些GDB版本自身的问题(处理线程信号时是否自动暂停)。只要告诉GDB遇到SIG32信号时,别停止即可让程序继续执行,并非代码存在问题;