4

「helloworld」アプリケーション(c ++)でtotalviewを起動したところ、アセンブリコードしか表示できません。

ソースコードを表示するために設定する必要のある設定/フラグはありますか?メニューバー->表示->ソースとして->ソースが機能しません。

デバッグしようとしているアプリケーションは、デバッガーを起動して実行するためのcout <<"HelloWorld"アプリケーションです。

4

2 に答える 2

6

簡単なものから始めましょう。

'-g'デバッグフラグを使用してアプリケーションをコンパイルしましたか?デバッガーはコンパイラーに依存して、実行可能ファイルで発生したことをソースコードにマップするためのシンボルテーブルと行番号テーブルを提供します。その-gフラグがないと(または後でアプリケーションを削除する場合)、その情報は存在せず、アセンブリのデバッグが期待できる最善の方法です。

-gを使用してコンパイルした場合、ソースと実行可能ファイルはすべて同じディレクトリにありますか、そうでない場合は、コンパイルしてから移動しましたか?コンパイラは、作成時にソースと実行可能ファイルの場所しか認識していません。それらを移動すると、デバッガがソースコードファイルを見つけることができない場合があります。その場合、ソースコードの検索パスを定義して支援を提供する必要があるかもしれません。

ここに返信して、-gで問題が解決したかどうかをお知らせください。そうでない場合は、検索パスなどを調べることができます。

乾杯、クリス

于 2010-07-29T16:48:58.213 に答える
2

Jason94はほぼ確実に彼の問題を別の方法で解決したことを私は理解していますが、それは良い質問なので、ここでチャイムを鳴らしてこれに答えることができると思いました。

この特定のケースでは、プログラムがマルチスレッドであるかどうかを知ることは興味深いでしょう。TotalViewは、マルチスレッドプログラムを操作できるように設計されており、ユーザーにとっては驚くべき特性を備えています。デフォルトでは、ブレークポイントに到達するスレッドに常に焦点を合わせるとは限りません。したがって、プログラムは実際には別のスレッドの2番目のブレークポイントで停止している可能性があります。

6つのスレッド(0〜5の番号を付けます)があり、ルーチンにブレークポイントを設定するとします。スレッド0はあなたが焦点を合わせているものであり、あなたは「行く」を押します。プログラムが実行され、スレッド4が最初にブレークポイントに到達します。デフォルトでは、ブレークポイントに到達すると、ブレークポイントはプロセス全体を停止します。デバッガーでは、スレッド4がブレークポイントに到達したときにスレッド0がどこにあったかを表すアセンブリが表示される場合があります。ルートウィンドウまたはスレッドペインをチェックして、他のスレッドのステータスを確認できます。そのうちの1つが「B2」(ブレークポイント2の場合)と表示されている場合があります。次に、そのスレッドをクリックすると、TotalViewがそのスレッドに再度フォーカスし、ブレークポイントにあることがわかります。

なぜそうするのですか?別のスレッドがブレークポイントにヒットしたという理由だけで、フォーカスを「あなたから引き離す」ことは混乱/混乱を招くと私たちは考えているからです。したがって、デフォルトでは、ユーザーがスレッドフォーカスを制御できるようにします。

プロセスウィンドウを「イベントのサイト」に再度フォーカスするようにtotalviewに指示する変更可能な設定があります。TotalViewでブレークポイントに注意を向け直したい場合は、これを設定できますが、そうすると、あるスレッドから次のスレッドにバウンスする可能性があることに注意してください。

もう1つの可能性は、ブレークポイントがヒットした以外の理由でTotalViewがプロセスを停止したことです。プログラムはセグメンテーション違反でしたか?プロセスウィンドウの上部にあるステータスバーをチェックして、スレッドとプロセスのステータスを確認します。

とにかく-記録のためにこれを投稿したかっただけです。

于 2013-03-12T18:48:20.220 に答える