質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

2442閲覧

[コンピュータ将棋] C++ デバッグ方法がわからない

ozil10

総合スコア36

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

2クリップ

投稿2015/12/20 04:55

編集2015/12/23 03:37

こちらのサイトを参考にコンピュータ将棋を作成中です。
今回質問したいのは、C++のデバッグ方法です。理想はRailsでいうbinding.pryとかで処理を止めて変数の中身を見たいのです。

そこでコマンドラインからデバッグしたい衝動にかられていたこともあり、macに標準で備わっているというlldbを使ってこのサイトのchapter2をデバッグしてみました。以下打ち込んだコマンドです。

makefileでコンパイルしたあと、

lldb ./shogi b kyokumen.c:29 r

ブレイクポイントを設定しkyokumen.cの29行目で止めたかったのですが、、普通に./shogiコマンドを打ったときのように将棋プログラムが起動してしまい止まったかどうかがわかりません。

理想は以下のような形で止めたいです。

(lldb) r Process 93890 launched: '/Path/To/hoge' (x86_64) Process 93890 stopped * thread #1: tid = 0x53c0ae, 0x0000000100000f23 hoge`main(argc=1, argv=0x00007fff5fbff460) + 51 at hoge.c:6, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 frame #0: 0x0000000100000f23 hoge`main(argc=1, argv=0x00007fff5fbff460) + 51 at hoge.c:6 3 int main(int argc, char **argv) { 4 char *test = "This is a debug demo."; 5 char *name = "edo"; -> 6 int age = 20; 7 8 printf("Name: %s, Age: %d\n", name, age); 9 (lldb)

何か解決方法ございましたらご教示いただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chironian

2015/12/23 03:47

すいません。回答依頼を頂きましたが、MacOSは分かりません。
ozil10

2015/12/23 09:22

いえいえとんでもございません。見ていただきありがとうございます!
guest

回答4

0

IDE(統合開発環境)は使っていないのでしょうか?
一般的にはIDEで提供されているデバッガーを使います。ブレークポイントで止めて変数の中身を見たり、ステップ実行で処理を追跡したりします。
WindowsならVisual Studioが定番ですが、MacOSの場合はXcodeでしょうか。

投稿2015/12/20 05:14

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

makefileの中身のファイルそれぞれに-gオプションをつけるとうまくいきました。
お手数おかけしました。みなさまご回答ありがとうございました。
xcodeでのデバッグも検討してみます。

投稿2015/12/26 01:50

ozil10

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

基礎的な質問にもお答えいただきありがとうございます。皆様の意見を参考にしつつ、コマンドラインからデバッグしたい衝動にかられていたのでmacに標準で備わっているというlldbを使ってこのサイトのchapter2をデバッグしてみました。以下打ち込んだコマンドです。

makefileでコンパイルしたあと、

lldb ./shogi b kyokumen.c:29 r

ブレイクポイントを設定しkyokumen.cの29行目で止めたかったのですが、、普通に将棋プログラムが起動してしまい止まったかどうかがわかりません。

理想はこのような形で止めたいです。

(lldb) r Process 93890 launched: '/Path/To/hoge' (x86_64) Process 93890 stopped * thread #1: tid = 0x53c0ae, 0x0000000100000f23 hoge`main(argc=1, argv=0x00007fff5fbff460) + 51 at hoge.c:6, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 frame #0: 0x0000000100000f23 hoge`main(argc=1, argv=0x00007fff5fbff460) + 51 at hoge.c:6 3 int main(int argc, char **argv) { 4 char *test = "This is a debug demo."; 5 char *name = "edo"; -> 6 int age = 20; 7 8 printf("Name: %s, Age: %d\n", name, age); 9 (lldb)

何か解決方法ございましたらご教示いただきたいです。

投稿2015/12/21 13:49

編集2015/12/21 13:58
ozil10

総合スコア36

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozil10

2015/12/23 01:44

ご回答ありがとうございます。 以下のmakefileでコンパイルしています。 ``` all: shogi objs= KomaMoves.o kyokumen.o main.o Te.o shogi: $(objs) g++ -o shogi $(objs) KomaMoves.o: kyokumen.h KomaMoves.cpp gcc -D_GCC_ -c KomaMoves.cpp kyokumen.o: kyokumen.h kyokumen.cpp gcc -D_GCC_ -c kyokumen.cpp Te.o: kyokumen.h Te.cpp gcc -D_GCC_ -c Te.cpp main.o: main.h kyokumen.h main.cpp gcc -D_GCC_ -c main.cpp ``` makefileではなく個別に-g オプションをつけてコンパイルしてみましたが `gcc -o KomaMoves -g KomaMoves.cpp` 以下のエラーがでますね。 ``` KomaMoves.cpp:208:78: warning: conversion from string literal to 'char *' is deprecated [-Wc++11-compat-deprecated-writable-strings] " 壁"," "," "," "," "," "," "," "," "," "," "," "," "," "," "," ", ^ 128 warnings generated. Undefined symbols for architecture x86_64: "_main", referenced from: implicit entry/start for main executable ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) ``` もう少し調べてみます。
JacoTatsu

2015/12/23 11:42

makefileに書かないと、ダメです。 例えば、 gcc -D_GCC_ -c KomaMoves.cpp の行を gcc -D_GCC_ -c -g KomaMoves.cpp にしてあげるみたいに
guest

0

Linuxなら,-gのコンパイルオプションをつけてgdbを用いるか,大半のOSで動くIDE Eclipseがいいでしょう.
@emacsでもできるという噂は聞きますが,私はやったことないです.

投稿2015/12/20 10:01

wake_up_kemeko

総合スコア104

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問