Tom*_*mey 10
有几种方法.
真正的老派方式就是破解你的程序循环main
:
volatile int zzz;
...
int main() {
while (!zzz) sleep (1);
Run Code Online (Sandbox Code Playgroud)
然后,运行您的脚本.在单独的窗口中,在要调试的程序上运行gdb,并使用attach
附加到休眠程序.然后你可以设置断点等,最后:
(gdb) set var zzz = 1
(gdb) cont
Run Code Online (Sandbox Code Playgroud)
一个稍微更新的("新的",如"它已经在gdb中至少10年")方式是编辑脚本并gdb --args
在调用要调试的程序之前放置一个.但是,这种方法并不总是有效.除其他外,它不能正确处理重定向.
最后,您可以使用多次调试.这是所有人的"最新"方法.在这里,我正在关注该主题的自己的博客文章:
$ gdb /bin/sh # or whatever runs your script
(gdb) set args arguments-to-the-script
(gdb) set detach-on-fork off
(gdb) set target-async on
(gdb) set non-stop on
(gdb) set pagination off
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
(gdb) add-inferior -exec program-you-want-to-debug
Run Code Online (Sandbox Code Playgroud)
...然后切换到那个劣势并设置断点.现在切换回第一个劣势run
- 它应该全部工作!
归档时间: |
|
查看次数: |
2878 次 |
最近记录: |