代码之家  ›  专栏  ›  技术社区  ›  Piotr Dobrogost

如何避免在使用gdb在Qt Creator中调试时输入库的源文件?

  •  24
  • Piotr Dobrogost  · 技术社区  · 15 年前

    如何配置Qt Creator和/或gdb,以便在使用Qt库调试程序时,调试器可以避免进入Qt的源文件?

    4 回复  |  直到 15 年前
        1
  •  15
  •   atomice    15 年前

    您需要关闭自动solib添加。在正常的gdb提示符中,您可以键入:

    (gdb) set auto-solib-add off
    

    在Qt Creator中的“选项”下->调试器->Gdb您可以指定一个Gdb启动脚本。使用“setautosolibaddoff”命令创建一个文件,然后将Gdb启动脚本设置为该文件。

        2
  •  3
  •   Employed Russian    15 年前

    您想要的功能(如rpg所述)无法从中获得 GDB ,如果实施,IMHO将很难使用。

    类似的,但使用更简单 fstep . 鉴于:

    foo((string("Hello") + string(" World!)).c_str());
    

    这个 将跳过当前行上的所有调用,但最后一个调用除外(因此跳过字符串构造函数, 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
    
        3
  •  1
  •   Andy    15 年前

    评论澄清后更新:

    在gdb中,您可以指定 source directories are searched -如果它找不到它们,它就无法进入它们。

    如果在启动脚本中没有指定它们,并且是gdb自己查找源文件,那么您应该能够修改gdb启动脚本,以使用 directory 命令(有关语法等,请参见上面的链接)

    show directories 命令,并手动清除任何关闭,如果您希望逐个执行此操作。

        4
  •  0
  •   codesniffer    6 年前

    排除 项目所在的目录 (即第三方库、系统头文件(如STL)等)。如果是这样,请看一看 https://stackoverflow.com/a/31629136/5155476 https://stackoverflow.com/a/42721326/5155476