擅长:python、mysql、java
<p>首先,您可以运行该程序并通过pid进行调试。当然,这个解决方案并不涵盖所有情况。</p>
<p>另一种方法是使用Linux功能进行进程间通信。简而言之,将<code>ret</code>的输出重定向到FIFO特殊文件(“命名管道”),然后通过调试器从该FIFO读取。这是怎么做的。从bash运行:</p>
<pre><code>mkfifo foo
</code></pre>
<p>这将在您的目录中创建一个特殊文件,该文件将用作<em>命名管道</em>。当您向该文件写入文本时(使用相同的语法<code>echo "Hello" >foo</code>),写入程序将阻塞,直到有人从文件中读取数据为止(例如<code>cat <foo</code>)。在我们的例子中,gdb控制的进程将从这个文件中读取。</p>
<p>创建fifo后,从bash运行:</p>
<pre><code>ret > foo & # ampersand because it may block as nobody is reading from foo
gdb blah
</code></pre>
<p>然后,在gdb提示符下,运行</p>
<pre><code>run <foo
</code></pre>
<p>达到预期效果。注意,您不能从fifo(以及通常的管道)读取数据两次:当您读取了所有数据后,<code>blah</code>进程将终止,您应该重复向foo写入命令(您可以从另一个shell窗口执行)。</p>
<p>完成后,使用<code>rm foo</code>删除fifo(或将其放入系统重新启动时将自动删除的目录中,例如<code>/tmp</code>)。</p>