1

Objective-C プログラムをデバッグする必要があります。main() function にブレークポイントを設定すると、次のようになります。

Reading symbols from /usr/bin/pbcopy...done.
(gdb) break main
Function "main" not defined.

返信から「開始」を呼び出すと、同じエラーが返されます。max os x ではやり方が違うのではないでしょうか?

目的のCプログラムと同等のものは何ですか?

ところで、exit() 関数を中断する方法は?

編集: Lyndsey によって提案された -[NSApplication run] を破ってみます

(gdb) file pbcopy
Reading symbols for shared libraries ........ done
Reading symbols from /usr/bin/pbcopy...done.
(gdb) break -[NSApplication run]
Breakpoint 1 at 0x35a8356
(gdb) run
Starting program: /usr/bin/pbcopy 
Reading symbols for shared libraries +++++++.................................................................... done
Breakpoint 1 at 0x95a97356

helo
^C
Program received signal SIGINT, Interrupt.
0x9574eeda in read$UNIX2003 ()
(gdb) bt
#0  0x9574eeda in read$UNIX2003 ()
#1  0x94d4e5b6 in _NSReadFromFileDescriptor ()
#2  0x94d4e4b6 in -[NSConcreteFileHandle readDataOfLength:] ()
#3  0x94d7f2fa in -[NSConcreteFileHandle readDataToEndOfFile] ()
#4  0x00002a11 in ?? ()
#5  0x00002736 in ?? ()
(gdb) info breakpoints
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x95a97356 <-[NSApplication run]+6>
(gdb) 

それは非常に奇妙です.gdbはどのようにしてシンボルのアドレスを見つけるのですか?しかし、私は ld が再配置を行う必要があると思うので、それは私を傷つけません。スタックトレースを見ると、たくさんあります?? ここでは、アプリケーションをトリガーする通常の方法は使用しないと仮定します (?? 大きな仮定 ...:/)

4

2 に答える 2

3

pbcopyはコマンドラインツールであり、アプリケーションではないため、[NSApplicationrun]を呼び出す理由はありません。ブレークポイントは、(何らかの理由で)AppKitフレームワークにリンクしているため解決されます。

これは削除されたバイナリであるため、C関数名の分割はうまく機能しません。本当に最善の策を検討したい場合は、アセンブリをダンプし、それに基づいてどこで中断したいかを判断することです。

全体的に達成しようとしていることを説明すると、進め方についてより良い提案が得られる可能性があります。

于 2009-05-14T23:54:24.770 に答える