質問者
C++のソースがデバッグ時に表示できない

質問
すべての返信
-
すみませんありがとうございます。
ソースを添付したかったのですがその方法がわからなかったため文章で書きます。
CとC++とかいてますが
ファイル名はどちらも.cppです。
クラス記述したものがブレイクできません。
以下のようにコンストラクタにbreakを張ってもとまりませんし
クラスの定義でブレイクしてステップインしても逆アセンブル表示になります。
例として
--test.cpp---
// mkbinary.cpp : DLL アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
#include "test.h"
#include "cdib.h"
#include "windowsx.h"
#include "commctrl.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
#define MAX_LOADSTRING 100
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
func();
break;
}
hInst = hModule;
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
// これは、エクスポートされた変数の例です。
//TEST_API int nmkbinary=0;
// これは、エクスポートされた関数の例です。
//TEST_API int fnmkbinary(void)
//{
// return 42;
//}
// これは、エクスポートされたクラスのコンストラクタです。
// クラス定義に関しては test.h を参照してください。
Ctest::Ctest()
{
return;
}
void Func()
{
CDIB cdib; <-- ここにbreakして、ステップインしてもソースが逆アセンブル表示となる
}
--cdib.h--
#ifndef __DIB_H__
#define __DIB_H__
#include <string>
#include <vector>
class CDIB
{
private:
public:
CDIB();
~CDIB();
}
#endif
--cdib.cpp
CDIB::CDIB()
{
HDC hdc;
int nPlanes, nBitsPixel ;
hdc = ::GetDC(0); <----ここにbreakをつけてもブレイクしない
nPlanes = ::GetDeviceCaps( hdc, PLANES );
nBitsPixel = ::GetDeviceCaps( hdc, BITSPIXEL );
}
CDIB::~CDIB()
{
int i;
i = 0;
} -
dumpbin.exe /pdbpath を使えば PDB の情報が分かります。例えば最新でない PDB であれば "PDB signature mismatch" と教えてくれます。D:\test>dumpbin /pdbpath:verbose test.exe
Microsoft (R) COFF/PE Dumper Version 8.00.50727.39
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file test.exeFile Type: EXECUTABLE IMAGE
PDB file 'D:\test\test.pdb' checked. (PDB signature mismatch)
PDB file 'D:\test\test.pdb' checked. (PDB signature mismatch)
PDB file 'C:\WINDOWS\symbols\exe\test.pdb' checked. (File not found)
PDB file 'C:\WINDOWS\exe\test.pdb' checked. (File not found)
PDB file 'C:\WINDOWS\test.pdb' checked. (File not found)Summary2000 .data
1000 .idata
4000 .rdata
16000 .textD:\test> -
ありがとうございます
確認しましたが最新でした。
クラスを静的ライブラリ(xxx.lib)に変更してdllに組み込みデバッグしたところ。
ステップインで、以下のメッセージがでるようになり
ソース ファイル: c:\My Documents\Visual Studio 2005\Projects\cdib\dib.cpp
モジュール: D:\test\mkbinary.dll
プロセス: [2712] test.exe
ソース ファイルがモジュールがビルドされたときのものと異なります。
デバッガでこのファイルを使用しますか? 「はい」、「いいえ」
のダイアログが表示されるようになり、「はい」でデバッグできるようになりました。
以降はデバッグできてます。