• ベストアンサー

ブレークポイントについて教えてください

組み込みソフト用のデバッカでH/WブレークポイントとS/Wブレークポイントという 区別がありますがこれらはどう違うのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • quenista
  • ベストアンサー率28% (122/425)
回答No.1

要は、ICEの事ですね。 基本的には、デバッガの機種毎に違いが有りますので、その辺をご了承下さい。 H/Wブレークポイントとは、ブレークアドレスを回路で検出してブレーク処理を行う方法。 S/Wブレークポイントとは、ブレークアドレスにインターラプトHALT等のコードを埋め込んで、ブレーク処理を行う方法。 特徴として、H/Wブレークの方が、外部ROM領域でもブレークを張れる事や、複雑な条件のブレークポイント設定を出来る事が多い。 逆に、S/Wブレークは、エミュレートROMエリアなら多数のブレークポイントを張る事が出来る。 こんな感じで、解かって頂けます?

takobozu
質問者

補足

回答ありがとうございます、かなりわかってきました。もうすこし詳しく教えて頂きたいのですが。 >S/Wブレークポイントとは、ブレークアドレスにインターラプトHALT等の>コードを埋め込んで、ブレーク処理を行う方法。 これは実行コードの途中にHALTコードをICEが埋め込むということでしょうか?そうするとそれ以降のアドレスにある実行コードのアドレスがずれてしまって 実行できなくなってしまう気がするのですが?

その他の回答 (1)

  • quenista
  • ベストアンサー率28% (122/425)
回答No.2

>これは実行コードの途中に・・・ 簡単に言うと、エミュレートているROM空間のブレークポイントのアドレスの内容を、一時的にすげ替えるイメージで良いと思います。 勿論、元のアドレスとコードは別の領域に保持させて居て、ブレーク処理の中で復帰させます。 この為、S/Wブレークでも個数の制限が出る事に成ります。 又、基本的にこの方法となる為、キャッシュ等のパイプラインを持つCPUでは、誤動作する事も多々有ります。 (コツとしては、ブランチ先にブレークポイントを張ると、割と正確に動作します。) 後、余談ですが、ROMICEなんかはS/Wブレークのみですので、この方法でブレークさせてます。

関連するQ&A

  • ブレークポイントで停止しない。

    AndroidStudioでブレークポイントを設定しデバッグしたときに ブレークポイントで止まらないというのは、そもそもそのブレークポイントが 実行されていない可能性がありますか?

  • ブレークポイントが設定できない。。。

    VC++6.0、OSはWindows2000 を使用しています。 MFCのダイアログベースのEXEを造っています。 デバッグするためにブレークポイントを設定したのですが、実行時に 止まりません。 デバッグモードでリビルドし、pdbファイルも作成されています。 デバッグ対象のEXEは ~/debug/xxx.exe となっているのも確認しています。 デバッグ実行前に設定すると、赤丸でちゃんとマークされますが、 実行すると以下の文言のメッセージボックスが表示され、設定した ブレークポイントは無効になっています。 「1つ以上のブレークポイントが設定できませんでした。 これらのブレークポイントは無効です。実行プログラムはプログラムの始めで 停止します。」 この後、実行中にブレークポイントを設定しようとしてもできません。 考えられる原因としては何があるでしょうか? 識者の方、ご教授願います。

  • エクセル2013のブレークポイント

    エクセル2013を使用しています。 VBAでコードを確認する時にブレークポイントを使用すると思いますが、一度エクセルファイルを閉じて、再度開いた時に前回配置したブレークポイントを残しておく方法はないでしょうか? ブックを開いた時にエラーが出ているのですが、デバックをしてしまうと問題のコードを飛ばしてしまうようで、どのコードが問題なのか分からないのです。 ブックを開いた状態で、怪しい部分のコードを1行ずつ試してみるとエラーを吐き出さないので、初回のブックを開く時になんらかのエラーが発生しているのだと思います。 原因解明のため、ブレークポイントを配置したまま一度ブックを閉じて再度開きたいのですが、ブレークポイントを残しておく方法はありますか?

  • ブレークポイントで止らない

    下記のソースでaaaをウォッチウィンドウで内容確認したいです。 aaa = "2"の行にブレークポイントを設定し、ステップイン[F8]しました。 ブレークポイントで止らず完了してしましました。 何故でしょうか。どなたか教えて下さい>< 環境はwindows xp sp2,access2000です。 Sub test()     dim aaa    aaa = "1" Debug.Print aaa aaa = "2" Debug.Print aaa aaa = "3"   Debug.Print aaa End Sub

  • 1つ以上のブレークポイントが設定できませんでした。

    Visual Studio C++ 6.0 でプログラミングをしています。 以前まではブレークポイントが普通に使えたのですが、最近ブレークポイントを設定すると 『1つ以上のブレークポイントが設定できませんでした。これらのブレークポイントは無効です。実行プログラムはプログラムの始めで停止します。』 という注意書きが現れ、ブレークポイントが使えません。 ブレークポイント無しでは問題なくビルドでき実行もできます。 恐らく原因として考えられるのが、友人がリリースモードの方が処理が早いとか言って設定をいじり、うまくいかなかったことだと思います。 『構成』『アクティブな構成の設定』を見てもデバックモードになっていました。 どなたかご回答よろしくお願い致します。 OSはXP、openCVを使用しています。

  • Accessでブレークポイントが効きません(泣

    こんにちわ。 まったく原因がわからず悩んでいます。。 環境は WindowsXP で Access2000 を使ってるのですが、 VBAでのデバッグでブレークポイントがまったく効かないのです。 (止まりません) ブレークポイントを設定はできて、ソースの左に●がでて行の色も変わります。 そのブレークポイントの行は確実に通っています。 (例えばダミーでMsgBoxを開くようにして、そのMsgBoxの行に ブレークポイントを設定すると、そのMsgBoxは開くのですが ブレークポイントとして処理が停止する事はありません。) それ以外の方法でも、確実にブレークポイントを通過している事は確認しました。 でもなぜか止まりません。 違うサイトにて同じような質問の回答で、『そういう場合は新しいMDBを作成し 中身をすべてインポートしてやれば止まる』というのを見つけたので その通りにしたら確かに止まるようになりました。 でも今回はその方法は事情により絶対できません。 ブレークポイントが反応しない原因として考えられる事はなんなのでしょうか? また、同じような経験をされた方で、原因は分からないけど こんな方法で解決した、というのがあれば是非教えてください。 よろしくお願いいたしますm(_ _)m

  • レスポンシブデザインでのブレイクポイントの決め方

    レスポンシブ・ウェブデザインのサイトを作ろうとしているのですが、ブレイクポイントの決め方で迷走中です。 まず、今現在、 メーカーページの仕様表に出てくるような解像度は、デバイス幅(device-width)とはまったく関係のない要素と考えているのですが、これは間違いないでしょうか。 そうだとすると、ブレイクポイントを決める際に参考にするべきはデバイス幅ということになると思うのですが、それを知る術というのは存在するのでしょうか? また、あったとしても、すべてのスマホのデバイス幅を調べるのも現実的ではないと思うのですが、一体どのようにしてブレイクポイントを設定すれば良いのでしょうか? ご存知の方、ご教授いただければ幸いです。 よろしくお願いいたしますm(__)m

    • ベストアンサー
    • HTML
  • ブレークポイントを設置してないのに止まる

    パソコンを立ち上げて、アクセスを立ち上げて、コマンドボタンを押して、vbaを実行すると、 ある一定のコードで中断されます。 まるでブレークポイントを設置してるようにとまります。 エラーではないです。 ファイルを開いたばかりだし、パソコンを起動したばかりなので ブレークポイントは設置してないし、 Stopコードもありません。 win7、アクセス2010です。 これはバグでしょうか?

  • ブレイクポイントについて

    #include <windows.h> LRESULT CALLBACK WndProc( HWND , UINT, WPARAM, LPARAM ); LRESULT CALLBACK WndProc1( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam ); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR , int nCmdShow ) { MSG msg; HWND hWnd, hWnd3; WNDCLASSEX wndclass,c_wndclass; wndclass.style = 0; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.cbSize = sizeof(WNDCLASSEX); wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wndclass.hIconSm = LoadIcon( NULL, IDI_WINLOGO ); wndclass.hCursor = LoadCursor( NULL, IDC_ARROW ); wndclass.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH ); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = "wh02"; c_wndclass.style = 0; c_wndclass.lpfnWndProc = WndProc1; c_wndclass.cbClsExtra = 0; c_wndclass.cbWndExtra = 0; c_wndclass.cbSize = sizeof(WNDCLASSEX); c_wndclass.hInstance = hInstance; c_wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION ); c_wndclass.hIconSm = LoadIcon( NULL, IDI_WINLOGO ); c_wndclass.hCursor = LoadCursor( NULL, IDC_ARROW ); c_wndclass.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH ); c_wndclass.lpszMenuName = NULL; c_wndclass.lpszClassName = "wh01"; if(! RegisterClassEx( &wndclass )) return 0; // ウィンドウクラスの登録 if(! RegisterClassEx( &c_wndclass )) return 0; // ウィンドウクラスの登録 // できないと終了   hWnd = CreateWindow( "wh02", "親ウインドウ(WS_OVERLAPPEDWINDOW)", WS_OVERLAPPEDWINDOW , CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, // 親ウィンドウはデスクトップ NULL, hInstance, NULL ); hWnd2 = CreateWindow( "hWnd1", "親ウインドウの子", WS_OVERLAPPEDWINDOW , CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, // 親ウィンドウの子 NULL, hInstance, NULL ); ShowWindow( hWnd, nCmdShow ); UpdateWindow( hWnd ); ShowWindow( hWnd2, nCmdShow ); UpdateWindow( hWnd2 ); while( GetMessage( &msg, NULL, 0, 0 ) ){ TranslateMessage( &msg ); DispatchMessage( &msg ); } return msg.wParam ; } LRESULT CALLBACK WndProc( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam ) { default: ブレイクポイント3return DefWindowProc( hWnd, iMessage, wParam, lParam ); } return 0; } LRESULT CALLBACK WndProc1( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam ) { case WM_DESTROY: ブレイクポイント1postQuitMessage(0); break; ブレイクポイント2return DefWindowProc( hWnd, iMessage, wParam, lParam ); } のプログラムを組んで実行して、ブレークポイントでやったのですがまず親ウィンドウの終了ボタンを押したらブレイクポイント1が通り、次にブレイクポイント2が通りここまではいいのですがブレイクポイント3が三回繰り返して実行されるのですが、なぜ三回繰り返されるのでしょうか?

  • Excel VBE ブレークポイントを表示するには

    ExcelのVBEでブレークポイントを設定した箇所 (ブレークポイントの●が設定されているコード) が複数あります。 その箇所を順番に表示して確認していきたいのですが ブレークポイントを設定した箇所を 表示するにはどのようにすればよいでしょうか。 (Windows10,Excel2016)

専門家に質問してみよう