初めまして、adoliaと申します。
早速ですが、VC上でProCソースもしくはプリコンパイル後のCソースに対してソースのどこにブレークポイントを設定しても、デバッグ実行すると
「1つ以上のブレークポイントが設定できませんでした。これらのブレークポイントは無効です。実行プログラムはプログラムの始めで停止します。」のメッセージが表示され、CRT0.cファイルのパス入力を求められ、ブレークポイントが設定できません。
以下に、環境について記します。
OS:WinXP, WinServer2003(どちらも設定できず)
VC.Ver:6.0
Oracle, ProC.Ver:9.2.0.5.0
VCプロジェクト設定:
(デバッグセッションの実行可能ファイル)パス省略\Debug\NKFT.exe
(C/C++タブプロジェクトオプション)
/nologo /MLd /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /Fp"Debug/NKFT.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /c
(リンクタブプロジェクトオプション)
W32ComonnsDLL.lib NKCommons.lib oraSQL9.lib oraSQX9.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/NKFT.pdb" /debug /machine:I386 /out:"Debug/NKFT.exe"
(ProCカスタムビルドコマンド)
e:\oracle\ora92\bin\proc INAME=$(InputName) SQLCHECK=SEMANTICS USERID=(割愛)/(割愛)@(割愛) CHAR_MAP=VARCHAR2 line=yes DBMS=V8,
リビルドを行い、.ncb, .opt, .plg拡張子ファイルを削除してVCを再起動してもダメでした。
ネット情報からプリコンパイルオプションにlines=yesを付加する必要があるということを見つけ付加してみましたが、やはりブレークポイント設定はできませんでした。
現在、数十万回のループ処理の途中でアプリケーションエラーが発生、
しかもポインタの指した先のデータを壊しているためかデバッグ文を追加すると現象が再現しなくなるといった状況に陥っており、
ログ出力による解析も難しく、自分はレジスタ解析に明るくないためぜひともご助言をよろしくお願いいたします。
>(デバッグセッションの実行可能ファイル)パス省略\Debug\NKFT.exe
この省略した所、
日本語の長いフォルダ名だったり、機種依存文字とか多用してませんか?
>現在、数十万回のループ処理の途中でアプリケーションエラーが発生、
エラーで、0x00000000ではないアドレスが出ているなら、
ビルドするときにMAPファイルを生成させておけばエラー発生場所(原因場所とは限らないが)を
だいぶ絞り込むことはできますよ。
ご回答ありがとうございます、
お返事が遅れすみません。
>>(デバッグセッションの実行可能ファイル)パス省略\Debug\NKFT.exe
> この省略した所、
> 日本語の長いフォルダ名だったり、機種依存文字とか多用してませんか?
はい、特に上記ご提示に該当するパスではありません。
(省略部分のフルパス)D:\testcost\src\daily_func\NK\NKFT\Debug\NKFT.exe
>エラーで、0x00000000ではないアドレスが出ているなら、
>ビルドするときにMAPファイルを生成させておけばエラー発生場所(原因場所とは限らないが)を
>だいぶ絞り込むことはできますよ。
ご助言ありがとうございます、
MAPファイルを生成して、問題箇所の絞込みを行ってみたく思います。
>ryoさま
デバッグのその後ですが、生成されたMAPファイルの内容からアプリケーションエラー発生箇所を関数単位まで絞込み、
問題の関数に、ループ回数がアプリケーションエラー発生直前の場合のみデバッグ文を絨毯爆撃という合わせ技により
無事問題箇所が見つかり、修正できました。
ただ自分が直面していましたアプリケーションエラーという直接的な問題は解決しましたものの、
「ProCソースにブレークポイント設定不可」という本質問タイトルの問題については
試行錯誤中ですがまだわかっていませんので、解決マークは見送らせて頂きます。
ご助言、どうもありがとうございました。
/D "NDEBUG"
が指定されているからではないでしょうか。
/D "_DEBUG"でデバッグ用ライブラリにリンクしないと。
>みいさま
ご回答ありがとうございます、お返事が遅れすみません。
ご指摘の通りプロジェクトの設定で/D "NDEBUG"から/D "_DEBUG"に定数を変更して再度ブレークポイント設定を試みたものの、
.c, .pcソース共にブレークポイント設定はできず、状況は変わりませんでした。有力だと思ったのですが・・・。
ツイート | ![]() |