assert などのインターセプト – 固定ページ 2 – プログラミング – Home

assert などのインターセプト
 
通知
すべてクリア

[解決済] assert などのインターセプト

固定ページ 2 / 2

maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> #define MyAssert(n) if(n){__asm int 3}
単純に
assert(!n);
ではいけないんですか?もしかしてreleaseビルドでもブレークしたい為ですか?
releaseビルドでブレークしなければならないような値が来たらエラー処理を実行
すべきだと思うんですが。
なにか特別な意図が有るんでしょうか?


返信引用
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

maruさん、subaruさん、仲澤@失業者さん、tetrapodさん、レスありがとうございま
す。

assert()が働いて、出てくるウインドウでどのファイルの何行目まででてくるので
が、フォルダ構造が深いので、肝腎のファイル名のところは、・・・となってしまいま
す。
maruさん、仲澤@失業者さんのいってくださったところは、私にとって、とっても有用
なデバッグ手法です。

ところで、maruさん、のいってくださった、
>_CrtDbgBreak();
について調べてみましたが、ヘルプに該当する項目がありません。
VC++ 6.0では、まだサポートされてない?のかも・・・とおもっています。

最初の題目よりは、かなりそれて、デバッグ手法を教えてくださるので、とっても貴重
なお話をきかせていただいています。ありがとうございます。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> assert()が働いて、出てくるウインドウでどのファイルの何行目まででてくるので
> が、フォルダ構造が深いので、肝腎のファイル名のところは、・・・となってしまい

> す。
[表示]-[デバッグウィンドウ]-[コールスタック]メニューで関数の呼び出し経路を表示
するウィンドウが出ます。ブレークしているのは、_CrtDbgBreak();の位置なので、ユー
ザ記述したコードが停止位置の2-3段上(上位ルーチン)なので、ウィンドウの上か
ら2-3番目をダブルクリックすればその位置のソースコードに飛んでくれます。

> >_CrtDbgBreak();
> について調べてみましたが、ヘルプに該当する項目がありません。
VC6のヘルプはインストールしていませんが、_CrtDbgBreak()自体はVC6でも使用可能で
す(確認済み)。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

どーも、PATIOです。

>エディタを作っていて、落ちまくります。実際編集していて、落ちて、編集内容がパー
>になってしまうと、たいがいへこみます。

うーんと、これに関しては編集内容が失われてしまうと困るような内容を
まだ、デバッグ中のエディタで編集する事自体が無謀と言う気もしますけれど。
本当に失われては困るようなないようであるなら動作が保障されているものを
使った方が良いと思いますよ。
めったに落ちないのだけれど、偶々おちたと言う話ならまだわかりますけれど。
あとは、途中で上書き保存をするとか位でしょうか。
tetrapodさんも書かれていますが、落ちるような状況だと編集していた内容が
そもそも壊れてしまっていて使い物にならないという状況もありえるので
その状況で保存して本当に良いのかと言う問題もあります。
既存のファイルに上書きなんてしまったら目も当てられない状況になりますし。


返信引用
熱血
 熱血
(@熱血)
ゲスト
結合: 15年前
投稿: 100
Topic starter  

maruさん、PATIOさん、レスありがとうございます。

>デバッグ中のエディタで編集する事自体が無謀と言う気も

編集がてら、テストをするんですけれど、落ちて編集内容がパーになっても、自分で作
ってるプログラムなので、あたるところもないんです。
だいたい、テストが主体で、「編集はついで」ってことをわすれちゃうんですよね。
夢中になって・・・

>[表示]-[デバッグウィンドウ]-[コールスタック]

呼び出し関数のネスト構造がすべてでてきました。とても役に立ちます。ありがとうご
ざいました。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました