ホーム » 検索結果: リモートデバッグ
検索結果: リモートデバッグ
リモートデバッグ
以前仮想マシンの XP にリモート環境を作って,その当時はそれなりに使ったと思う.
どうも起動が不安定だったが,複数のアダプターが影響していた?
リモート PC は,TestInst .
ローカルは DevXP と T54W7U64 .
VC 6
プロジェクトの設定で,スタティックにするなどして,対象 exe 以外の dll などがなくても動作する様にしている.
リモート側で \\DevXP\….\Debug.060\i3DV.exe を実行できる様にする.
ローカル側でも同様の指定で実行可能な設定にしている.
VC 6 の設定で,メニューの「ビルド」-「デバッガリモート接続」でリモート PC を設定.
デバッグモニタの設定は,
VC 8
プロジェクトの設定は,場所が違うだけで内容は VC 6 と同じようなもの.
リモート側では exe はこの様に見える.
デバッグモニタの設定は,
デバッガで実行すると,i3DV.exe が起動する.
VC 10
リモートデバッガのインストールから.DVD 内の rdbgsetup_x86.exe を実行してインストール.
他は,VC 8 などと同様.
VC6 , VC8 リモートデバッグ
VC6
mk:@MSITStore:J:MSDNvccore.chm::/html/_core_setting_up_the_remote_debug_monitor.htm
http://support.microsoft.com/kb/241848/ja
https://www.betaarchive.com/wiki/index.php?title=Microsoft_KB_Archive/241848
以下のファイルをターゲット PC にコピー
1998-07-06 | 00:00 | 24,651 | MSVCMON.EXE |
2004-02-27 | 00:00 | 106,566 | DM.DLL |
2000-07-15 | 00:00 | 184,320 | MSDIS110.DLL |
2008-04-14 | 11:25 | 413,696 | MSVCP60.DLL |
2004-02-17 | 00:00 | 278,581 | MSVCRT.DLL |
2000-07-15 | 00:00 | 28,746 | TLN0T.DLL |
VC7
ms-help://MS.VSCC/MS.MSDNVS.1041/vsdebug/html/vctskInstallingRemoteDebugMonitor.htm
http://msdn.microsoft.com/ja-jp/library/aa291492(VS.71).aspx
C:\Program Files\Microsoft Visual Studio .NET\Common7\Packages\Debugger\
msvcmon.exe
msvcr70.dll
NatDbgTLNet.dll
NatDbgDM.dll
デバッグを開始できません.
プログラム ” を開始できません。
現在のユーザーのコンテキストで実行中のリモート コンピュータに MSVCMON がありません。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Machine Debug Manager]
"AllowLaunchAsOtherUser"=dword:00000001
うまく起動できない.
VC8
http://msdn.microsoft.com/ja-jp/library/ey7ec813.aspx
http://msdn.microsoft.com/ja-jp/library/ey7ec813(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/bt727f1t(VS.80).aspx
MSVSMon.exe
DbgHelp.dll
MSDbgUI.dll
http://support.microsoft.com/kb/908099/ja
VC9
http://msdn.microsoft.com/ja-jp/library/bt727f1t.aspx
http://msdn.microsoft.com/ja-jp/library/bt727f1t(VS.100).aspx
MSVSMon.exe
リリース版 exe のデバッグ
先日の Win11 24H2 でうまくなかった現象を更に調べたことのメモ.
結論としては,InitInstance に確保される dlg のメンバ変数で初期化がされていないものがあったため.
最初リモートデバッグも考えたが,VC 8 では少し面倒なので VS 2005 をインストールした.
https://learn.microsoft.com/ja-jp/visualstudio/debugger/remote-debugging-cpp?view=vs-2022
インストールした VC 8 でビルドしたデバッグ情報付きのリリース exe でも不具合の現象は確認できた.
が,デバッグしようとすると欲しい情報の所でうまく表示されない部分があった.
そのため VS 2008 もインストールすることに.
VC 9 ではうまくデバッグできる様になった.
デバッガで追いかけると,ダイアログのメンバ変数が意図しない値になっていて,初期化されていないことがわかった.
修正自体は簡単だが,なぜ今まで…
初期化されていないことによりゴミ(不定値)が入ることはわかる.
その変数は ‘1’ 以外だとうまく通る様になっていて,それが 24H2 でたまたま ‘1’ に?
Initinstance で確保される dlg はスタックに確保される.
デバッグ版 exe では,0 でないバイト値などで埋められることが多いが,リリース exe では 0 または不定値となる.
0 はまだ使われていない状態で,不定値は確保前に呼び出された関数で使用する変数やリターンアドレスなど.
一度実行して,次の所で設定されるポインタを求め,それをメモリダンプのアドレスに入力.
m_pMainWnd = &dlg;
再度実行して InitInstance で止めた時のメモリの状態.
今回の初期化されていない変数(赤くなっている次)が,’1′ になっていることを確認できた.
MDI exe が動作しない?
Win10 Insider Preview 21H1 環境で,幾つかの exe がうまく動作しない.
VC 8 でビルドした exe は OK .VC 10 以降は NG のものがある.
SDI exe は大丈夫そうで,MDI exe はすべてではないが NG のものが多い.
タイミングとしては,3D データを読み込んだ後,ウィンドウに表示する前.
2021/07/12
一度「開く」ダイアログを表示するとその後はうまく動作する.
SDI exe であっても,VC 14 MFC スタティックだとうまくない?
これはプロジェクトの設定がまずかったためで,別の記事に.
2021/04/01
ちょっとわからないので,リモートデバッグの環境を作成することに.
MSDN Visual Studio での C++ プロジェクトのリモート デバッグ
リモートツールをダウンロードして,インストール.「スタート」から「Remote Debugger」を起動.
リモート側で exe を実行して,ホスト側で「アタッチ」.
2021/04/02
原因は,CRecentFileList::Add を通った時 ::CoInitinalize が呼び出されていないため.
どうも MFC 10 から?変わったみたい.
MS C++ executable just started failing
MFC application crashing in ProcessShellCommand() when file to open specified on command line
それでも,なぜ環境によっては表面化しないのか?
CRecentFileList::Add で Win7 以降の「ジャンプリスト」に登録(::SHAddToRecentDocs )する様になった.
Win10 20H2 でも現象は発生した.2004 では問題ない.
対応としては InitInstance の最初に以下を追加.
// OLE ライブラリを初期化します。
if (!AfxOleInit()) {
AfxMessageBox(_T("OLE の初期化に失敗しました。")) ;
return FALSE ;
}
2021/04/06
2016/夏頃の Win10 で,その様になるものが存在したみたい.
その頃は T90Chi + VC 2015 + i3DV でやっていたと思うが,気づかなかった?
VC 14 exe を XP でデバッグ
昨日リモートデバッグの環境を作っていったが,VC 14 では XP 上のリモートデバッグができない?
VC 11 以降 XP などについて具体的には書かれてない.
今回リモートデバッグしようと思ったのは,VC 14 でビルドした exe が XP で実行できないことにあった.
Win 7 などでは問題ない.また,VC 12 などでビルドした exe なら大丈夫.
現象は,exe の起動はできるが 3D モデルを開く時,エラーメッセージも出ずに終了してしまう.
デバッグ版のプロジェクトで以下を設定.
スタティック ライブラリで MFC を使用する
Visual Studio 2015 – Windows XP (v140_xp)
ビルドして,リリース版と同様の現象になることを確認.
XP 環境には VC 8 が入っているので,
デバッグ版 exe をエクスプローラなどから起動し,「ツール」-「プロセスにアタッチ」.
_tstati64 の呼び出しで,errno が 22(EINVAL 引数が無効です)となってしまう.
exe が終了してしまったのは,ファイルサイズが正しく取れなかったための無限ループ.
bool v_c_Save (LPCTSTR pathName,const std::vector text) { FILE* ofp = ::Open_File(pathName,_T("wb")) ; if (ofp == NULL) { return false ; } if (text.size() > 0) { ::fwrite(&text[0],sizeof(char),text.size(),ofp) ; } ::fclose(ofp) ; if (text.size() > 0) { u_64 fSize =F_Stat::GetSize(pathName) ; if (fSize == 0) { return v_c_Save(pathName,text) ; } } return true ; }
無限ループにならない様に,ループカウンタを追加.
exe が抜ける現象は解消されて 3D モデルが表示できる様にはなったが,stat の部分の対応はこれから.