相关疑难解决方法(0)

如何在GDB中自动打印每条执行的行,直到达到给定的断点?

我希望能够在GDB中设置一个断点,让它运行到那一点 - 并在此过程中,打印出已经"逐步完成"的行.

这是一个例子,基于这个带有a main和a函数的简单文件,每个都有两个断点:

$ cat > test.c <<EOF
#include "stdio.h"

int count=0;

void doFunction(void) {
  // two steps forward
  count += 2;
  // one step back
  count--;
}

int main(void) {
  // some pointless init commands;
  count = 1;
  count += 2;
  count = 0;
  //main loop
  while(1) {
    doFunction();
    printf("%d\n", count);
  }
}
EOF

$ gcc -g -Wall test.c -o test.exe
$ chmod +x test.exe
$ gdb -se test.exe
...
Reading symbols from /path/to/test.exe...done.
(gdb) b …
Run Code Online (Sandbox Code Playgroud)

c debugging automation gdb

26
推荐指数
2
解决办法
1万
查看次数

为什么编译超过100,000行的std :: vector :: push_back需要很长时间?

我正在编译一个C++库,它定义了一个从一组数据点中随机采样的函数.数据点存储在a中std::vector.有126,272个std::vectorpush_back语句,其中有问题的向量是类型double.编译需要很长时间.

为什么这需要这么久?(除了std::vectorpush_back语句之外的所有代码都需要不到1秒的时间来编译,因为其他代码很少.)

c++ gcc compilation stdvector

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

在调用函数时使GDB打印控制流程

如何调用感兴趣的gdb打印函数,根据堆栈的深度缩进?

我希望能够说出(制作):

(gdb) trace Foo* Bar* printf
Run Code Online (Sandbox Code Playgroud)

并让gdb打印所有以Foo或Bar开头的函数,因为它们被调用.有点像gnu cflow,除了使用调试符号和仅实际调用的打印函数,而不是所有可能的调用流.

无法帮助的工具包括cachegrind,callgrind和oprofile,它们最常调用函数的结果.我需要保留的调用顺序.

通配符(或等效的)是必不可少的,因为有很多Foo和Bar函数.虽然我愿意完全记录所有功能.或者,也许告诉gdb记录特定库中的所有函数.

某些GDB向导必须有一个用于此常见作业的脚本!

c debugging gdb dynamic call-graph

17
推荐指数
3
解决办法
2万
查看次数

自动跟踪程序执行

我想知道我们是否可以在任何C或C++应用程序中启用跟踪.

例如,使用gcc选项或小工具,我将启用跟踪,并在控制台上打印跟踪或转储到文件.

由于有很多文件和函数/类,我不想手动开始添加跟踪打印.

如果此类工具不可用,则下一步选择使用脚本并尝试在跟踪打印时添加.

strace 没有多大用处,因为它主要给出了系统调用.

c c++ trace

7
推荐指数
1
解决办法
1万
查看次数

打破gdb中的命名空间函数(llvm)

我正试图通过llvm的opt程序(用于作业),并且教师建议设置一个断点runOnFunction.我在其中一个文件中看到了这个:

bool InstCombiner::runOnFunction(Function &F) { /* (Code removed for SO) */ }
Run Code Online (Sandbox Code Playgroud)

但是gdb似乎没有找到runOnFunction断点.我突然想到问题可能是命名空间?我试过这个,但gdb永远不会中断,它只是创建了fooOpt.s文件:

(gdb) b runOnFunction
Function "runOnFunction" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (runOnFunction) pending.
(gdb) r -S -instcombine -debug -o ~/Desktop/fooOpt.s ~/Desktop/foo.s
Run Code Online (Sandbox Code Playgroud)

我在Mac上,所以我没有objdump,但otool生产560万线,通过涉水起点似乎没有合理的runOnFunction多次出现有更多的.

gdb namespaces llvm

3
推荐指数
1
解决办法
1864
查看次数

GDB-显示最后执行的n行

有时在GDB中,我想查看将程序移到现在的控制流。简而言之,如何使GDB打印最后执行的x行?

c debugging gdb control-flow

3
推荐指数
1
解决办法
2039
查看次数