如何配置Qt Creator和/或gdb,以便在使用Qt库调试程序时调试器可以避免插入Qt的源文件?
答案 0 :(得分:15)
您需要关闭auto-solib-add。从普通的gdb提示符中键入:
(gdb) set auto-solib-add off
在Qt Creator中,在Options-> Debugger-> Gdb下,您可以指定Gdb启动脚本。在其中创建一个带有“set auto-solib-add off”命令的文件,然后将Gdb启动脚本设置为该文件。
答案 1 :(得分:3)
GDB
无法使用您想要的功能(如rpg所述),如果实施,恕我直言将难以使用。
fstep
建议使用类似但更简单的GDB
功能。给出:
foo((string("Hello") + string(" World!)).c_str());
fstep
将跳过当前行的所有调用,除了最后一行(因此跳过字符串构造函数,operator+()
和c_str()
,并且只进入foo
)。
这也没有实现,但可能会在几个月内完成(这对于C++
调试非常有用。)
同时,您可以通过设置临时断点来近似该功能:
(gdb) list
1 #include <string>
2 #include <iostream>
3 using namespace std;
4
5 void foo(const char *s)
6 {
7 cout << s << endl;
8 }
9
10 int main()
11 {
12 foo((string("Hello") + string(" World!")).c_str());
13 return 0;
14 }
(gdb) b main
Breakpoint 2 at 0x8048901: file t.cc, line 12.
(gdb) run
Breakpoint 1, main () at t.cc:12
12 foo((string("Hello") + string(" World!")).c_str());
(gdb) tb foo
Breakpoint 3 at 0x80488ca: file t.cc, line 7.
(gdb) c
foo (s=0x804a1f4 "Hello World!") at t.cc:7
7 cout << s << endl;
(gdb) q
答案 2 :(得分:1)
评论澄清后更新:
在gdb中,您可以指定哪个source directories are searched - 如果找不到它们,它将无法进入它们。
要让gdb输入qt库的源文件,它必须知道它们在哪里 - 很可能qt-creator在启动调试器时告诉gdb它们在哪里。查看qt-creator以获取gdb启动脚本 - 可以在那里指定它们。
如果未在启动脚本中指定它们并且gdb自己找到源文件,则应该能够修改gdb启动脚本以使用directory
命令清除任何目录(请参阅上面的链接用于语法等。)
您也可以通过转到“Debug - &gt; Views - &gt; Gdb”来查看gdb控制台,以获取有关当前使用gdb中的show directories
命令的当前使用的源目录的信息,以及如果你想根据具体情况这样做,请手动清除。
答案 3 :(得分:0)
也许不是这个问题的完美解决方案,但是排除项目所在的目录不是(例如,第三方库,系统标头)可能会有所帮助(如STL)等)。如果是这样,请查看https://stackoverflow.com/a/31629136/5155476和https://stackoverflow.com/a/42721326/5155476。前者允许您指定在运行GDB时步进时要跳过的目录(和所有子目录)(因此您可以随时更改集),但是它要求您构建GDB。后者允许相同的功能,但在运行GDB之前已预先设置,并且不需要构建GDB。