Loops 如何在GDB脚本中循环直到程序完成?
如果程序完成,我需要在什么条件下停止循环?简单地在无限循环中循环。程序完成后,它将退出Loops 如何在GDB脚本中循环直到程序完成?,loops,while-loop,macros,gdb,Loops,While Loop,Macros,Gdb,如果程序完成,我需要在什么条件下停止循环?简单地在无限循环中循环。程序完成后,它将退出 define traverse while(CONDITION) if $start == 0 set $start = 1 print_node print_rss_item else continue print_node
define traverse
while(CONDITION)
if $start == 0
set $start = 1
print_node
print_rss_item
else
continue
print_node
print_rss_item
end
end
end
查看您的gdb脚本:
define traverse
while(1)
if $start == 0
set $start = 1
print_node
print_rss_item
else
continue
print_node
print_rss_item
end
end
end
有几点需要注意:
Breakpoint 1, write () at ../sysdeps/unix/syscall-template.S:81
81 in ../sysdeps/unix/syscall-template.S
$40571 = 285
drwxrwxr-x 2 tthtlc tthtlc 4096 Feb 18 00:00 yocto_slide
[Inferior 1 (process 7395) exited normally]
$40572 = 286
The program is not being run.
(gdb)
我们可以看到gdbscript将不会运行
如果执行“gdb/bin/ls”并后跟“myloop\u print 10000”(假设宏在.gdbinit中定义),那么您将运行gdbscript以完成10000个循环,而调试对象从未运行过。我假设,
$start=1
是停止循环的子句。那么您希望而($start==0)
?这个链接应该会有所帮助
defining the macro (inside .gdbinit file):
define myloop_print
set $total = $arg0
set $i = 0
while($i<$total)
set $i = $i + 1
print $i, $i
cont
end
end
Breakpoint 1, write () at ../sysdeps/unix/syscall-template.S:81
81 in ../sysdeps/unix/syscall-template.S
$40571 = 285
drwxrwxr-x 2 tthtlc tthtlc 4096 Feb 18 00:00 yocto_slide
[Inferior 1 (process 7395) exited normally]
$40572 = 286
The program is not being run.
(gdb)
(gdb) myloop_print 10000
$40573 = 1
The program is not being run.
(gdb)