1

だから、これが私が抱えている問題です。

void * something = ???;
void (*fun)(void*) = ???;

try
{
    fun(something);
}
catch (...)
{
    assert(false);
}

私は、アサーションが発生する理由を明らかにする任務を負っています。残念ながら、上記のコードを変更することはできません。さらに、これはマルチスレッド環境であり、プログラムのシャットダウン中です。try / catchを実行する部分は、実際のコードではかなり意図的にロック解除されています。プログラムをステップスルーしようとすると、突然消えてしまいます...適切なfun()呼び出しにステップインすることすらできず、ましてやそれに入ることができません。

私の唯一の頼みは、catch(...)にブレークポイントを設定し、そこにあるものをすべて調べることだと思われます。残念ながら、これは私に何も教えてくれません。私は本当に楽しいことや何かが何であるかを知らないからです。

この時点での私の唯一の希望は、Visual Studioデバッガーに話しかけて、それが何で...あるかを教えてくれることです。それがどこにスローされたかを知ることができれば、私は大喜びします。少なくとも自動リストにはありません...他の場所にある可能性がありますか?ここで進歩を遂げる方法はありますか、それとも私は失敗していますか?ねじれた感じ...

====

更新:時間内にシャットダウンしなかったときに私のものを殺す外部プログラムがありました。そのため、ステッピングによって消えました。スレッドとは何の関係もありませんでした。

提案されたように例外をオンにできることに気づいたら。残念ながら、1つを投げる場所はありませんでした...それはアクセス違反でした。保存されている関数はどういうわけかドキドキします。

4

2 に答える 2

3

例外がスローされたときに実行を中断するVisualStudio機能を使用してみてください。VisualStudioのメインメニューの[デバッグ]->[例外]に移動し、すべての例外にチェックマークを付けます。

このようにして、例外がスローされたときにVisual Studioが停止し、それが何であったかがわかります。

于 2013-01-16T00:17:31.853 に答える
1

メニューに移動して、[デバッグ]、[例外]の順に移動し、スローされたと思われる例外をマークしますか?実行中のプログラムにステップ/アタッチできる場合は、それが可能であるはずです。これにより、特定の例外がスローされたときにデバッガーが中断します。

私は通常、[デバッグ]|[例外]ダイアログボックスでサブツリー全体の[ Win32例外]をマークします。あなたのプログラムは他の(Win32)例外をスローせず、黙って無視すると思います(この場合、多くの「false」アラームが発生します)。

それがお役に立てば幸いです。

于 2013-01-16T00:17:18.267 に答える