我想用shebang 执行一个gawk脚本--re-interval."幼稚"的方法
#!/usr/bin/gawk --re-interval -f
... awk script goes here
Run Code Online (Sandbox Code Playgroud)
不起作用,因为gawk是用第一个参数调用的"--re-interval -f"(不是在空白处分开),它不明白.有解决方法吗?
当然你可以不直接调用gawk,而是将它包装成一个分割第一个参数的shell脚本,或者创建一个shell脚本,然后调用gawk并将脚本放到另一个文件中,但我想知道是否有某种方法可以做这在一个文件中.
shebang行的行为因系统而异 - 至少在Cygwin中它不会通过空格分割参数.我只关心如何在一个行为类似的系统上做到这一点; 该脚本不是便携式的.
任何人都可以解释gdb的这种行为吗?
900 memset(&new_ckpt_info,'\0',sizeof(CKPT_INFO));
(gdb)
**903 prev_offset = cp_node->offset;**
(gdb)
**905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb->shm_addr.ckpt_addr+sizeof(CKPT_** HDR),i_offset);
(gdb)
**903 prev_offset = cp_node->offset;**
(gdb)
**905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb->shm_addr.ckpt_addr+sizeof(CKPT_ HDR),i_offset);**
(gdb)
**908 bitmap_offset = client_hdl/32;**
(gdb)
**910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);**
(gdb)
**908 bitmap_offset = client_hdl/32;**
(gdb)
**910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);**
(gdb)
**908 bitmap_offset = client_hdl/32;**
(gdb)
**910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);**
(gdb)
913 found = cpnd_find_exact_ckptinfo(cb , &ckpt_info , bitmap_offset , &offset , &prev_offset);
(gdb)
916 if(!found)
(gdb) p found
$1 = <value optimized out>
(gdb) set found=0 …Run Code Online (Sandbox Code Playgroud) GDB是否有内置的脚本机制,我应该编写一个期望脚本,还是有更好的解决方案?
我每次都会发送相同的命令序列,我会将每个命令的输出保存到文件中(最有可能使用GDB的内置日志记录机制,除非有人有更好的想法).
我想编写一个脚本(在某些条件下)将执行gdb并自动运行一些带有一些参数Y的程序X.一旦程序执行完毕,用户应该保持在gdb的提示符下,直到他/她显式退出它.
执行此操作的一种方法是让脚本将run命令加参数Y输出到某个文件F,然后让脚本调用gdb,如下所示:
gdb X < F
Run Code Online (Sandbox Code Playgroud)
但有没有办法在不引入临时文件的情况下执行此操作?
谢谢.
我想知道如何知道GDB中的当前系统架构并将此信息存储到变量中以供以后评估.
就像是:
set variable $x=`shell uname -m`
Run Code Online (Sandbox Code Playgroud) 我一直试图找到一种方法来自动化GDB中跟踪程序控制流程的进度.
即使只是一种自动执行n命令的简单方法,您也可以查看调用例程的顺序.
我意识到你可以发出n xx是GDB逐步执行的次数的问题,但问题在于它显示的是命令而不是例程的地址!但是如果你n在GDB中手动按下(然后按回车键发出上一个命令),它会显示地址.
我在GDB中尝试了以下内容:
(after setting a breakpoint at say 0x0123456)
b *0x0123456
Run Code Online (Sandbox Code Playgroud)
GDB说<breakpoint 1 at 0x123456>.我键入:
commands 1
n 1000
c
end
Run Code Online (Sandbox Code Playgroud)
但它没有按预期循环,也没有显示地址位置:-(.
任何帮助,将不胜感激!当然必须简单的自动登录命令例程被调用??
我有一个小的Perl程序.该程序加载一个模块.该模块使用XSLoader加载.so文件.这个Perl在Linux上运行,用gcc构建-DDEBUGGING,随后是.so文件.我可以重新编译.
执行Perl程序时,如何跟踪.so文件中的C函数?我需要按照它们运行的顺序知道函数的名称.拥有函数参数也会很好.
这一次很快.
是否有可能(除了永远按下输入)gdb不断next通过程序逐行查找错误发生的位置?
编辑:continue不是我想要的; 我想有效地看到完整的程序执行,一行一行,就像你next一遍又一遍地得到的那样.
gdb ×6
shell ×3
c ×2
debugging ×2
trace ×2
automation ×1
awk ×1
call-graph ×1
compilation ×1
control-flow ×1
dynamic ×1
expect ×1
gawk ×1
optimization ×1
perl ×1
scripting ×1
shebang ×1
unix ×1
xs ×1