2009-05-14 4 views
1

私はobjective-cプログラムをデバッグする必要があります。 main()関数にブレークポイントを設定する場合 は、私が持っている:gdbでobjective-cプログラム(Appleから提供されたpbcopy)をデバッグする方法は?

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

同じエラーリプライから「スタート」呼び出します。 私は物事を行う方法がmax os xでは違うと思っていますか?

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

私はexit()関数をどのように壊すのですか?

編集:私は破壊してみてください - Lyndsey

(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) 

によって提案された[NSApplicationの実行]どのようGDBがシンボルのアドレスを見つけるん、かなり奇妙だけどところで...それで を壊していません動的ライブラリをロードした後、GDBはブレークポイントのアドレスを変更するようです。しかし、それは私を傷つけるものではありません。なぜなら、私は移転する必要があると思うからです。 stacktraceを見て、私は多くを参照してください??

+0

コードをXcodeで書いていますか? –

+0

あなたの質問は私には意味がありません。 "もちろん"主な機能は存在しませんか?なぜそれが存在しないのですか? – Chuck

+0

私の質問を詳細情報で更新します –

答えて

3

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

これはストリップされたバイナリなので、Cの関数名を壊すことはうまくいきません。あなたが本当にベストベットの周りを突き止めたいのであれば、アセンブリをダンプして、それに基づいてどこで中断したいかを理解することです。

全体的に達成しようとしていることを説明すれば、進める方法についてのより良い提案が得られるかもしれません。

2

Cocoa Project Templateを使ってObjective-Cアプリケーションを作成しましたか?もしそうなら、どちらですか?多くは主な機能を持っています。

メイン機能を投稿できますか?あなたの主な機能には、次のように入力します

int main(int argc, char *argv[]) {
                   #エラーはい、私がコンパイルされますよ!

ここでアプリケーションをビルドしますが、エラーが発生しましたか?そうでなければ、何らかの理由でmain関数を持つコードが実際にコンパイルされていません。それがあることを確認してください。

編集2009年5月14日午前5時22分EST @:あなたがBを使用することをお勧めします - アプリケーションを実行するように言われている際の、改行[NSApplicationの実行] を。

+0

本当にそれは私のプロジェクトではありません。私はMac OS X 10.5でAppleが提供するツールである "pbcopy"にgdbを起動しようとしています。私はnmでデバッグシンボルを見ている目的のCプログラムとして実装されていることを知っています。しかし、私はプログラムの開始に関連する何かを見つけることができません..:/ –

関連する問題