相关疑难解决方法(0)

防止GDB进入函数(或文件)

我有一些这样的C++代码,我正在使用GDB:

void foo(int num) { ... }

void main() {
  Baz baz;
  foo (baz.get());
}
Run Code Online (Sandbox Code Playgroud)

当我进去时main(),我想介入foo(),但我想要跳过去 baz.get().

GDB文档说,"如果有一个函数行号信息的步骤命令只进入功能",所以我会很高兴,如果我能删除行号信息,baz.get()从我的可执行文件.但理想情况下,我可以告诉GDB"永远不会进入Baz类的任何功能".

有谁知道如何做到这一点?

gdb

25
推荐指数
2
解决办法
6969
查看次数

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

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

c++ debugging qt gdb qt-creator

24
推荐指数
1
解决办法
4933
查看次数

我可以阻止调试器进入Boost或STL头文件吗?

我正在使用Qt Creator和gdb在Linux平台上调试我的C++代码.每当我使用a boost::shared_ptr等时,调试器都会进入包含boost实现的头文件(即/ usr/include /boost/shared_ptr.hpp).我想在调试方面忽略这些文件,然后简单地跳过它们.我知道我可以在它到达其中一个文件时立即退出,但是如果不在每个调试会话中多次这样做,那么调试会更容易.

我正在使用gcc编译器(g++),在带有QtCreator 2.2的OpenSuSE Linux 11.2上运行(gdb用作调试器).

编辑添加:问题适用于Boost文件,但也可以应用于STL文件.

debugging gcc boost gdb qt-creator

19
推荐指数
2
解决办法
2001
查看次数

CLion 仅限制调试单步进入项目功能

CLion 2017 有没有办法仅在调试程序时进入项目源文件?

例如在下面的代码段中,

function1 (boost::doSomething())

我有一个来自外部库(例如boost)的函数,我不希望调试器在单步执行程序时进入该函数。

是否有设置强制 CLion 跳过单步执行外部库中的任何代码?

c++ ide clion

11
推荐指数
2
解决办法
2443
查看次数

显示在gdb中执行的每个汇编指令

我目前有一个棘手的错误发生在我无法访问源或符号的地方,即我可以看到崩溃发生的指令及其地址,但就是这样.我想做的是gdb运行而不需要交互并显示每条指令,但我还没有找到办法.

我希望实现的是这样的:

(gdb) /* some command */
0x2818a7c0: push   %ebp
0x2818a7c1: mov    %esp,%ebp
0x2818a7c3: push   %ebx
0x2818a7c4: sub    $0x4,%esp
...
0x28563622: mov    %esi,0x0(%eax)
Program received signal SIGSEGV, Segmentation fault.
Run Code Online (Sandbox Code Playgroud)

我一直在做的是为程序计数器设置一个显示器,如下所示:

(gdb) display/i $pc
Run Code Online (Sandbox Code Playgroud)

然后运行代码stepi:

(gdb) stepi
1: x/i $pc  0x2818a7c0: push   %ebp
Run Code Online (Sandbox Code Playgroud)

然而,崩溃是数百或数千条指令,我想要一种方法来看每一个(一起,如果可取的话),而不必多次点击"输入".另外,如果我是手动完成的,我会(gdb)在每条指令之间看到一个提示,这是不太理想的.

我简要介绍的一条路线是脚本,但我唯一的想法是设置main(),显示和另一个中断(下一条指令),然后继续,但后来我不能commands在一个commands块内使用,所以它不会像我想象的那样工作.

如果它很重要,我正在使用FreeBSD.

debugging assembly gdb freebsd

10
推荐指数
2
解决办法
5623
查看次数

是否可以使用gdb和qemu同时调试linux用户空间程序和内核空间?

到目前为止,使用gdb + qemu,我可以进入/超过linux内核源代码.是否可以同时调试用户空间程序?例如,从用户空间到内核空间单步执行一个程序,这样我可以通过发出来观察qemu监视器上寄存器的变化info registers

debugging gdb qemu linux-kernel

7
推荐指数
2
解决办法
1692
查看次数

在VS Code中调试时如何跳过外部代码

vscode中进行调试时,我想制作一些"黑盒子 "并且不要输入我没写的代码.我怎样才能做到这一点?

debugging visual-studio-code

6
推荐指数
2
解决办法
2061
查看次数

如何使用 GDB 从 C++ 函数步调试到 std::function 用户代码?

例如,与:

#include <functional>
#include <iostream>

int myfunc(int i){ return i + 1; }

int main() {
    std::function<int(int)> f = myfunc;
    int i = f(1);
    std::cout << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

编译:

g++ -ggdb3 -O0 -std=c++11 -Wall -Wextra -pedantic -o main.out main.cpp
Run Code Online (Sandbox Code Playgroud)

如果我尝试step进入调用f(1),那么它首先会引导我进入 C++ 标准库代码,我要么必须非常认真地思考并执行正确的next/step顺序,要么step在达到实际之前愚蠢并击中17 次myfunc电话。

有没有更简单的方法来解决这个问题,也许使用一些现有的 GDB/Python 脚本?

这基本上是由 Microsoft 人员为 Visual Studio 完成的,如下所述: https //devblogs.microsoft.com/cppblog/improving-the-debugging-experience-for-stdfunction/

我喜欢它可以在 Ubuntu 中默认进入 stdlibc++ 并且之前已经使用过它,但是如果 GDB 可以std::function默认进入用户代码,并且有一些其他机制可以进入 libstdc++ …

c++ gdb

6
推荐指数
1
解决办法
519
查看次数

GDB C++ 如何停止侵入标准库

这篇文章简要讨论了我面临的同样的问题。本质上,gdb 是否有默认设置或 hack 来停止步进到每个 glib 库中,而只步进到用户文件中?我知道每次它进入其中时我都可以调用finish,但我宁愿避免一些浪费的按键。

它已经很烦人了,因为它要处理 g++ 的输出。如果这种暴露狂无法阻止,那么这些 GNU 工具有没有好的替代品呢?我确实听说过有关 Eclipse 的好消息,但我只是一个寻求以最小的努力进行快速而肮脏的修复的学生。

c++ gdb

4
推荐指数
1
解决办法
710
查看次数

标签 统计

gdb ×7

debugging ×5

c++ ×4

qt-creator ×2

assembly ×1

boost ×1

clion ×1

freebsd ×1

gcc ×1

ide ×1

linux-kernel ×1

qemu ×1

qt ×1

visual-studio-code ×1