我还没有找到有类似问题的人。
我的问题是,在过去的两周里,每当我运行gdb时,它都会搜索所有的函数,比如fopen、printf、calloc等等。这很烦人,因为有时我不得不遍历100多行代码或设置另一个中断点。这一切都需要更多的时间,这在过去是不会发生的。
有谁有什么想法吗?
18 char *temp = strtok(ara, " ");
(gdb) s
strtok () at ../sysdeps/i386/i686/strtok.S:88
88 ../sysdeps/i386/i686/strtok.S: No such file or directo
我正在使用Linux Mint19.1上的gnu工具和gdb,以及"Programming From the Ground Up“这本书。我已经通过编译器和链接器运行了程序maxum.s,并得到了正确的答案。但是,当我尝试使用gdb单步执行程序时,我得到消息:次进程1(进程18754)退出,代码为0336.如果您能帮忙,我们将不胜感激
在Linux和Mac中,我可以使用stepi和nexti来调试应用程序,而不需要调试信息。
在Mac上,gdb显示了在库中调用的函数,尽管有时会在每条stepi指令中提前几条汇编指令。
在Linux上,当我步入动态库时,gdb会迷路。例如,对于put(),put()中有三个汇编指令,一旦gdb到达0x080482bf处的跳转,它就会失败,并显示消息"No function contains counter For selected frame“。
0x080482ba in puts@plt ()
(gdb) disassemble
Dump of assembler code for
我在linux上用nasm编写汇编语言程序。问题是在使用gdb进行调试时,它不会在_start函数中执行步骤,并给出“单步执行直到退出函数_start”的消息。
此外,当我在第1行之后设置断点时,它说:
(gdb) break 2
Note: breakpoints 1 and 2 also set at pc 0x4000b0.
Breakpoint 3 at 0x4000b0: file new3.asm, line 2.
(gdb) break 3
Note: breakpoints 1, 2 and 3 also set at pc 0x4000b0.
Break
我正在使用GDB记录已执行的程序集指令。
下面是我制作的GDB脚本:
log.gdb
set confirm off
tbreak start_trigger
r
set logging overwrite on
set logging on
set height 0
set style enabled off
while (1)
x/i $pc
stepi
end
quit
我运行gdb使用
$ gdb results-mte/aha-compress.elf -x script.gdb -batch
这样可以很好地编写gdb.txt,但是它是真正慢的。有什么办法让它更快吗
下面是我的程序中的一个函数
void
quicksort (int *num, int p, int r, int june)
{
int q, bbc, ccd;
if (p < r)
{
call++;
q = partition (num, p, r, june);//<--I want to skip this call in gdb session
bbc = q - 1 - p + 1;//<-- and want to continue execution step by step from here
我只是想知道如何使用gdb访问if条件函数。
代码是这样的:
if(loadCatalogue(cat, filename)) {
printf("Success.\n");
}
else {
perror("Unable to load catalogue");
}
gdb就是这样显示的:
256 readLine("Enter name of catalogue file to load: ",
(gdb) next
Enter name of catalogue file to load: cat.txt
25
我现在正在处理Qt/zlib中的一个bug,我试图检查一个变量在它崩溃的行前是否已经损坏,所以我使用了break 1245来设置前一行的断点:
(gdb) info break
Num Type Disp Enb Address What
6 breakpoint keep y 0x02cb0e1e in inflateEnd at inflate.c:1245
breakpoint already hit 6 times
(gdb) c
Continuing.
[Thread 0xb103db70 (LWP 26146) exited
我正在Linux上调试静态多线程x86-64 C++应用程序。
我可以在函数上设置断点并在其上停止,我可以一步一步地遍历函数体。但是当我尝试单步执行另一个函数时,gdb并没有在它的开始处停止,它似乎只是继续执行。当我中断程序执行时,gdb进入中断状态,并且变得不可用:
(gdb) bt
Target is executing.
(gdb) c
Continuing.
Cannot execute this command while the selected thread is running.
(gdb)
作为一种变通办法,我可以多次使用stepi而不是step,stepi的工作方式与预期
首先,感谢您到目前为止所提供的帮助。
在Visual Studio中,我们可以在不设置任何断点的情况下执行调试->步骤。在GDB中,似乎我们必须使用断点。
int main ()
{
int a = 10;
int b = 111;
return 0;
}
我的目标是找到每个变量的地址(比如int,int )。我想知道a和b赋值前后的值。
如果我们在此源代码上编译并运行gdb,程序将终止,并且我们无法跟踪堆栈。
那么,有没有办法在GDB中像在VS中那样一次单步执行一条语句呢?
谢谢。(无断点,无法使用cout....no观察器。)