リモートデバッグについて質問があります。

現在、Red Hat Linux 9.0にて、C言語のプログラミングをしています。
いま作っているプログラムは、CUIの簡単なものです。
環境は以下のとおりです。
 エディタ :vi
 コンパイラ:gcc
 デバッガ :gdb

ですが、viに慣れていないのとgdbだとデバッグは全てコマンドになるので、
効率が上がらないです。(スキルも無いのですが。)

そこでWindowsXPのマシンで、samba共有のソースをエディタで
編集してみると便利でした(パソコンは2台あります)
ただ、コンパイルとデバッグはLinux上になってしまうので、そこから先は同じです。。。

WindowsマシンでLinuxに入っているgdbのフロントエンドみたいなことできないでしょうか?
(コンパイル・実行は、Linux上で行われるけど、デバッグは、Windowsから行える)

何か、いい環境はありませんでしょうか?
また可能であれば、手順等をお教えいただけますか?

※ちなみにLinuxマシンは、中古の5000円で購入したボロの為、Xウインドウを入れていないです。
 なので、GUIの統合環境をLinuxマシンで使用するというのは無しでお願いします。
 また、windowsマシンにcygwinを入れるというのもLinuxマシンが可哀想なので、
 今回は無しでお願いします。


下記のアドレスにあるソフトを使うと私のしたいことが出来るような気がするのですが、
英語のページなので、細かいところがわかりません。。。

BVRDE
http://bvrde.sourceforge.net/index.htm

このQ&Aに関連する最新のQ&A

A 回答 (2件)

まずBVRDEを試す前に、LinuxにWindowsXPからTelnetでログインできますか?


Linuxに登録しているユーザー名とパスワードでログインできていれば、問題のメッセージは表示されません。
あと、ログイン画面で環境変数を入力しても意味無いですよね。
まず、以下のことを確認してください。
1.RedHat Linux9にroot以外のユーザーが登録されているか。
2.root以外のユーザーが登録されていない場合は新規に登録する。
3.Telnetでログインする場合はrootでのログインが許可されているか確認する。(通常はセキュリティのために許可されていません。)
4.BVRDEを使用するための専用のユーザーが登録されているか。(ソフトの開発を行うなら一般ユーザーを登録するのがLinuxでは常識です。)
5.BVRDEの設定に間違いは無いか。
  (メッセージを見るとTelnetのログインで失敗しています。)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご指摘の箇所を確認してみたところ、うまくいきました。

rootでのログインは許可しており、また専用ユーザも登録済みで、
teratermで専用ユーザにログインできるので、telnetサーバは問題ないだろうと思っていましたが、
BVRDEがtelnetにログインするときに送出内容とLinux側にズレがあったようです。
(なので、ログイン前なのに、環境変数の設定を行おうとしてたみたいです)

解決策としては、Linuxのtelnetサーバを再構築しました。
本当はそこまでしなくても良いのかもしれませんが、版数アップも兼ねて行いました。

お礼日時:2005/04/20 09:46

コマンドラインが苦手ということであれば、GUIでデバックすればいいのでは?


xxgdbというツールを使えばXFree86の環境でデバックができますよ。
WindowsマシンにてXサーバー(ASTEX-Xなど)をインストールしてLinuxマシンにログインすれば、WindowsマシンにてGUIで作業できます。
また、Linuxマシンにemacsというエディタがインストールしていれば、結構デバックはやりやすいですよ。


BVRDEはTelnetやFTPでLinuxマシンにアクセスできる状態にしておかないと意味がないと思いますがLinux側の設定は大丈夫ですか?
BVRDEをインストールする際は、MSXML4をインストールしておかないと使用できません。

参考URL:http://www.ics.kyoto-su.ac.jp/~oomoto/lecture/pr …

この回答への補足

平行してBVRDEのほうも試しているのですが、
BVRDE本体とMSXML4をインストールして起動するところまではいくのですが、うまくいきません。
知っている範囲でアドバイスいただけませんか?

プロジェクトは作成でき、LinuxPCのソースを表示することが出来たのですが、
コンパイルしようとしたら、以下のメッセージが出てきました。
コンパイル成功させたいです。

---------- ここから ----------
  password:

  **incorrect**

  user name:export DEBUG_OPTIONS="-g -D_DEBUG"
  password:

  **incorrect**
---------- ここまで ----------


※ちなみに、FTPとTelnetは起動しています。
 (FTPクライアントのFFFTPと、ターミナルのteratermで確認しました。)

試した手順は、
 (1)File → New → Solutionを選択。
 (2)Wizard...のラジオボタンを選択してOKをクリック。
 (3)project名は適当につけて、Project typesは、「Remote C++」を選択して次へ。
 (4)「transfer type」画面では、Link typeにFTPを選択して、下記を入力。
  host名のところにはLinuxマシンのIP
  portはFFFTPで接続成功したport(21番)
  usernameとpasswaordも同様にFFFTPで試したもの
  Initial pathは、root(/)
 (5)Test Connectionをクリックすると、
  「Connection OK」のポップアップが表示される。
 (6)次へを押す。
 (7)「application controller」画面で、Link typeにRloginを選択して、下記を入力。
  host名のところにはLinuxマシンのIP
  portは513番
  usernameとpasswaordはFFFTPで使用したもの
  Initial pathは、root(/)
 (8)Test Connectionをクリックすると、
  「Connection OK」のポップアップが表示される。
 (9)次へを押す。
 (10)「remote debugger」画面で、下記を入力。
  DebuggerはGDBを選択
Link typeはRloginを選択
  host名のところにはLinuxマシンのIP
  portは513番
  usernameとpasswaordはFFFTPで使用したもの
  Initial pathは、root(/)
 (11)Test Connectionをクリックすると、
  「Connection OK」のポップアップが表示される。

 (12)File → Add → Add Remote Fileを選択。
 (13)Linux上のソースを選択。(/home/user名/test.c)
 (14)Build → Compileを実行。
 
 上記で説明したメッセージが表示されてしまう。

補足日時:2005/04/15 19:07
    • good
    • 0
この回答へのお礼

回答、ありがとうございます。
さっそくemacsを使用してみました。
ちょっとクセはありますが、エディタからgdbをコントロールできるのは便利ですね!
ネットでemacsのことを色々調べてみようと思います。

お礼日時:2005/04/15 19:06

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel VBAで、セルに入ってるデータ型を調べる方法は?

現在、Excel VBAでプログラムを作成しています。

Do Until ~ Loop の終了条件を
アクティブセルに入っているデータの型が文字列型の時
としたいのですが、そのようなことは可能なのでしょうか?

可能だとしたら、どのように記述したらいいのでしょうか?

当方のPCは
Win XP、Excel2003
です。

よろしくお願いいたします。

Aベストアンサー

VarType 関数を使うとか。

Sub SampleProc()

  Dim i As Long
  
  i = 1
  Do While Len(Cells(i, "A").Value) > 0
    If VarType(Cells(i, "A")) = vbString Then
      Exit Do
    Else
      ' // 処理
    End If
    i = i + 1
  Loop
  MsgBox CStr(i) & "行目で停止"

End Sub

Qデバッガ gdbを使用していると。。。

このカテゴリでいいのか分からないのですが質問させていただきます。

UNIX上でC言語のプログラムソースをgdbでデバッグしているとき、最初 run でプログラムを走らせますが、その際、次のようなシグナル?が発生します。

Program received signal SIGLWP, Signal LWP.
0xef3b99c8 in __lwp_mutex_unlock ()


結構頻繁に出るのですが、再度runすると、普通に動かせるのであまり気にはしていなかったのですが・・。
システムコールの本を読んでもSIGLWPはのっていません。
調べ方がまだまだ足りないと思いますが、
もしどなたかご存知の方いらしたら教えてください。

よろしくお願いします。

Aベストアンサー

LWPはlight weight processのことで、軽量プロセスあるいはスレッド(thread)といわれます。

スレッド間でタイミング情報のやりとりをするときなどにスレッドライブラリが使うシグナルで、通常のプログラムのレベルで出てくることはないと思います。ただ、gdbはそれを検出してしまうようなので、handle SIGLWP nostop などと設定すれば、それ以降はとまらないと思います。.gdbinitなどに書けるような気がしますが、試していないのでそれ以上はわかりません。

QVBAでオブジェクト変数にsetしたシートがactiveかどうかを調べるには?

標準モジュールの冒頭でワークシート用のオブジェクト変数を確保し、
あるタイミングで、あるシートをそのオブジェクト変数にSetしています。

で、そのシートに値をセットするときに、そのシートがActiveだった場合だけやりたい処理があるのですが、Setしてあるオブジェクト変数だけを見てそのシートがActiveか否かを判断する方法って、あるのでしょうか。

コード例)
Private oSheetA as Worksheet

Sub SetSheet(sName as String)
  Set oSheetA = worksheets(sName)
End Sub

Sub SetValue(nValue as integer)
  xxxxxx ←ここでoSheetAがActiveならやりたいことがある。
  oSheetA.Cells(nRow, nCol) = cValue
End Sub

具体的には、複数のBookを開いている状態で、Activeシートが何であるかはオペレータの操作次第なので固定化できない状態で、SetValueが呼び出されたとき、oSheetAがActiveだったら、値をセットするセルが見えるようにセルをActivateかスクロールさせたいんです。

標準モジュールの冒頭でワークシート用のオブジェクト変数を確保し、
あるタイミングで、あるシートをそのオブジェクト変数にSetしています。

で、そのシートに値をセットするときに、そのシートがActiveだった場合だけやりたい処理があるのですが、Setしてあるオブジェクト変数だけを見てそのシートがActiveか否かを判断する方法って、あるのでしょうか。

コード例)
Private oSheetA as Worksheet

Sub SetSheet(sName as String)
  Set oSheetA = worksheets(sName)
End Sub

Sub SetValue(nVa...続きを読む

Aベストアンサー

Option Explicit

Private oSheetA As Worksheet

Sub SetSheet(sName As String)
Set oSheetA = Worksheets(sName)
End Sub

Sub SetValue(nValue As Integer)
If oSheetA Is ActiveSheet Then
MsgBox ("hoge")
End If
oSheetA.Cells(1, 1) = nValue
End Sub

Sub Main()
SetSheet ("Sheet1")
SetValue (5)
End Sub

'実行できるようにソースは変更していますが,
'こんな感じでIs演算子で同じオブジェクトか比較してみるってのはどうでしょう?

Qgdbを使ったデバッグの方法について

Linux環境でC言語プログラムを開発している者です。
デバッグをgdbで行おうと思っているのですが、-gオプションを付けてgdb ./a.out でCの実行モジュールを使ったデバッグは行ったことはあるのですが、以下のようなshellスクリプト内で環境変数の設定を行い、設定した環境変数下で./a.out内にbreakポイントを設定するにはどうすればいいのでしょうか?ご教授お願いします。


Test.shの内容

#!/bin/sh

export ftn22=’/home/test’

./a.out Cの実行モジュール

Aベストアンサー

シェルスクリプトを書き換えていいのなら./a.out を gdb ./a.out に書き換えればいいかと。
書き換えがだめだと時間的余裕があるなら前もってgdbを起動しておいてa.outが起動したタイミングでアタッチするとか。
くらいしか思いつきません。

QVoidポインタで受け取った変数の型を調べる方法

あるライブラリの関数を利用しようとしたのですが、その関数の引数にVoidポインタがあり、どういう型のデータを格納したのかわかりません。このポインタのアドレスに格納されたデータの型を調べる関数なり方法なりというのはあるのでしょうか。

Voidポインタというのは型を問わずに受け取れるというのは利点ですが、受け取ったものがあらかじめなんだかわからない場合はどうするのでしょうか。よろしくお願いします。

Aベストアンサー

★基本的に調べようがありません。
・『void』ポインタはアドレス情報のみを受け渡しますので、型のサイズまでは分かりません。
 逆に言えば、型のサイズが分からないから『汎用ポインタ』と呼べるのです。
・あるライブラリの関数とは何?→どんな関数か分かりませんので、これ以上はアドバイス無理!
 ただ、C言語の qsort などでは比較用の関数で『void』ポインタを受け取りますが、その関数内で
 渡されたデータの『型』を指定します。→ポインタの形でキャストします。
 この比較用の関数は自前で用意する関数ですので、ソートするデータの型が分かっています。
 でも、ソートするデータ型が複数ある場合は、比較用の関数を複数作って切り替えます。
・あと関数に型を表す引数があれば、それを見て判断できますが、そうでない場合は『void』ポインタで
 渡される前の『型』の調べることは不可能です。→言語仕様より。
・以上。参考に。→一応、あるライブラリの関数とは何?

Qgdbデバッグのためのmakefile作成

現在Ubuntu Linuxでgccプログラミングを行っています。現在、ソースコードをいくつかのファイルに分割して作成しています。コンパイル時はmakefileを使用してmakeして実行ファイルを作成しています。

現在のプログラムをgdbでデバッグできるようにしたいと思っているのですが、
その場合のmakefileはどのようにして書けば良いのかをご教示頂きますよう、お願い致します。


現在のmakefile内容
https://sourceforge.jp/projects/cc1101driver/scm/svn/blobs/2319/trunk/20140411/Makefile

#test
#CC = gcc
#test:main.c event.c
exe: main.o event.o env.o audio.o task.o comm.o menu_show_status.o
gcc -o exe main.o event.o env.o audio.o task.o comm.o menu_show_status.o -lpthread
main.o:main.c
gcc -c main.c
event.o:event.c
gcc -c event.c
env.o:env.c
gcc -c env.c
audio.o:audio.c
gcc -c audio.c
task.o:task.c
gcc -c task.c
comm.o:comm.c
gcc -c comm.c
menu_show_status.o:menu_show_status.c
gcc -c menu_show_status.c

現在Ubuntu Linuxでgccプログラミングを行っています。現在、ソースコードをいくつかのファイルに分割して作成しています。コンパイル時はmakefileを使用してmakeして実行ファイルを作成しています。

現在のプログラムをgdbでデバッグできるようにしたいと思っているのですが、
その場合のmakefileはどのようにして書けば良いのかをご教示頂きますよう、お願い致します。


現在のmakefile内容
https://sourceforge.jp/projects/cc1101driver/scm/svn/blobs/2319/trunk/20140411/Makefile

#test
#CC = gcc
#test...続きを読む

Aベストアンサー

gccのコンパイルオプションに-gを追加する。

QVBAでテキストファイルの件数を調べる方法

Access2000のVBAで関数を使用して
ファイルのパス名、ファイル名を指定すれば、
テキストファイルの件数を検索し変数に返す
関数はありませんか?
   
通常テキストファイルを開き1件1件カウントを
取っていけば件数を知ることは可能ですが、
数千レコードのテキストファイルが複数個存在
する場合処理スピードが遅くなるため何か
最適な関数はありませんか?
よろしくお願い致します。

Aベストアンサー

こんにちは。maruru01です。

No.2の方のFileSystemObjectを利用する方法です。

行数 = CreateObject("Scripting.FileSystemObject").OpenTextFile(ファイルのフルパス, 8).Line

複数のファイルをカウントするなら、ファイルでループを回せばいいでしょう。

あと、FileSystemObjectの参考ページを紹介しておきます。

http://www.bcap.co.jp/hanafusa/VBHLP/FSOme.htm

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsobjFileSystem.asp

参考URL:http://www.bcap.co.jp/hanafusa/VBHLP/FSOme.htm,http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/l

こんにちは。maruru01です。

No.2の方のFileSystemObjectを利用する方法です。

行数 = CreateObject("Scripting.FileSystemObject").OpenTextFile(ファイルのフルパス, 8).Line

複数のファイルをカウントするなら、ファイルでループを回せばいいでしょう。

あと、FileSystemObjectの参考ページを紹介しておきます。

http://www.bcap.co.jp/hanafusa/VBHLP/FSOme.htm

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/jsobjFileSystem.asp

...続きを読む

Qviエディタについて

現在Viエディタの英語版でCソースを書いているのですが、日本語版のviエディタをフリーダウンロードできるサイトをご存知ではないでしょうか??
viを使用していらっしゃる方、お教えいただけたら嬉しいです。
宜しくお願いいたします。

Aベストアンサー

私は、下記を推奨します。
今でも、maintainance、開発が行われている。
http://www.kaoriya.net/

Linux ならこういう質問のしかたは
しないと思うので、Windows 版-vim です。

QVBAで他のプログラムが起動しているか調べる方法

VBAで
D:\test\test.exe
が起動中か調べたいのですが
どのようにすれば良いですか?

http://www.vbalab.net/vbaqa/data/access/log/tree_532.htm

このページの方法を使えば、
exe以外のファイルが使用中かは調べることができたのですが
exeファイルの場合にはうまくいきません。

良い方法があれば教えてください。

Aベストアンサー

残念ながら・・・出来ません。
一応、プロパティの中に Handle ってのがあるのですが
取得できるのは ProcessID の値です。
以前、調べていて Handle を見つけた時は、
『やったー \(^o^)/』と思いましたが
ぬか喜びでした。。。orz

なお、当方の環境は、Windows7 Pro & Office2010 です。

Qarm-linux-gdbをMeadowで使う方法ありますか?

Cを書くのに、GDB + Meadowを使い始めました。

今回、arm-linux-gccで、組込み用のプログラムをクロスコンパイルしています。そこで、M-x gdbのような感じで、arm-linux-gdbをMeadow上で使うことはできますでしょうか?(例えば、M-x arm-linux-gdb みたいな)やり方、もしくは、参考になるサイトがあればお教えください。

ちなみに、現段階では、gdbserverをターゲットに置いて、arm-linux-gdbをCygwin上から直接起動してデバッグすることには成功しております。Cygwin暦はそれなりにあるのですが、emacs関連の知識は最近始めたばかりで、ほぼ初心者レベルです。よろしくお願いいたします。

Aベストアンサー

クロスのgdb使ったことないですが、勘で回答します。


emacs で M-x gdb すると

Run gdb (like this): gdb
と出ると思いますが、これを

Run gdb (like this): arm-linux-gdb ...
でどうでしょうか?
... のところは、cygwinのコマンドラインで入れているのをそのまま入れればいいんじゃないかと思います。
gdbserver を指定するような、オプションなどですかね?


人気Q&Aランキング