2009-08-08 2 views
0

メソッドの先頭に1行を追加すると、1行目のVisual Studioでブレークポイントを設定すると、1行目または2行目にブレークポイントが設定されますか?間違った行にフラグを立てる場合は、後で定期的なデバッグセッションを確保するために.exeファイルを編集するときにできることはありますか?ILコードに行を追加し、プログラムにブレークポイントを追加するとどうなりますか?

行xをYに設定するようなものはありませんか?私はどこかのような何かを見て覚えています、.NETが関連しているかどうかは分かりません。

+4

なぜあなたはそれを試して見ないのですか? – Christopher

答えて

3

あなたは、デバッグの経験が変更されないままにしたい場合はPDBファイルにデバッグシンボルを更新する必要があります。

私が見てきた。このための最良のオプションは、それが(限られた)デバッグシンボルの修正だけでなく、ILをサポートとして、Mono.Cecilを使用することです。

+0

答えをありがとう。私はCecilを使用しています。偶然にも、それを使ってシンボルをデバッグする方法を教えてください。 –

+0

FAQをチェックしてください:http://www.mono-project.com/Cecil:FAQ私が覚えていることは、組立作業者がPDBファイルをロードすることも可能です。その場合、自動的に修正が可能だと思います。 –

2

ILを変更する場合、PDBファイルには古い情報が含まれます。おそらくILラインからC#ライン#への変更の間に1:1がないことに注意してください(例えば、3つのILステートメントを挿入するとIDEブレークポイントがC#の3行分オフセットされません)。

あなたは、影響を最小限に抑えるために、別のメソッドにコードのIL-修正部分を分離することをお勧めします。また、ILの変更を行っていると仮定すると、デバッグ中にC#& ILビューを切り替えると便利です。

これを容易にするために、生成されたコードを少し混乱させる必要があるかもしれません。たとえば、注入されたILがラッパーメソッドにある場合、DebuggerStepThroughAttribute、DebuggerNonUserCodeAttribute、DebuggerHiddenAttributeなどのattrbiutesの使用によって無視するようにデバッガに指示できます。

+0

直接の連絡がないことをご了承ください。私がしたいのは、コンパイルされたexeファイルを "無視する"ことです。これは、メソッドの開始時に10個のILラインを挿入すると、デバッガが最初のラインのように11番目のラインを考慮したいと思います。 –

+0

これを容易にするために、生成されたコードを少し混乱させる必要があるかもしれません。たとえば、注入されたILがラッパーメソッドにある場合、DebuggerStepThroughAttribute、DebuggerNonUserCodeAttribute、DebuggerHiddenAttributeなどのattrbiutesの使用によって無視するようにデバッガに指示できます。 (動作のニュアンスについては、ドキュメントを参照してください)。 – Addys

+0

回答自体にも提案を追加しました – Addys

1

私は.PDBファイルが一致しない場合がありますよう、あなたが警告を受けることを期待して(行動のニュアンスのドキュメントを検索します)。

0

どのようにILを追加していますか?これをプロファイラ計測器(SetILFunctionBody)で行う場合、デバッガがILの変更を認識できるように、新しいILコードマップ(SetILInstrumentationCodeMap)も指定する必要があります。

+0

私はセシルを通してそれをやっています –

関連する問題