naifuraの日記: jdb
日記 by
naifura
プログラミングは完全に現実逃避の仕事になりつつある。
Vine Linux 2.1.5 + OpenOffice 641d という環境を作ってみた。
日本語フォントが汚いが、OLE も含めて機能はちゃんと使えるし、
MS-Office との互換性も高い(日本語フォント名は変だけど)。
が、問題を見つけてしまった。root でインストールすると一般ユーザで
うまく動かない。一般ユーザでインストールしなおした。かっこわる。
きょうも Relaxer プログラミングの続き。
生成系に使うと new Hoge(), setHoge(), addContent() の羅列。
そういえば昔 C++ で似たようなことをした。
長いだけの単調なコーディング。生成系はしょうがないか。
setContentByString() という逃げ道があるのがいいですね。
先日のリファクタリングの話。
すべてのプログラミングはサンプルコードのリファクタリングである、
と偉そうなことを書いてしまったが、良く考えたら機能をどんどん
変えていくのはリファクタリングとは言わない。
今日見つけた論文:
竹田,大岩:プログラム開発体験に基づくソフトウェア技術者育成カリキュラム,
情報処理学会論文誌, Vol.33, No.7, pp.944-954, July 1992.
「他人のプログラムを使用し、ソースを読んで理解したり、部品を再利用
したり、自分のプロジェクトに合うように変更したりするのも
また重要な技術である」
ということで、これを「漸進的ミニ・プロジェクト」で指導すると良いという
主張なのだが、「サンプルコードのリファクタリング」のような怪しげな
表現でなく、素直に私が言いたかったことはこういうことだったかも。
10年前の論文ですが、ここに書かれたことがちゃんと教育できてない
現場はいまだにたくさんある。
そして、先ほどからふっと気になって jdb をいじっている。
デバッガでステップ実行しないプログラマは怠慢だと
かつて「Writing Solid Code」は言っていた。だから私は gdb を覚えた。
いま Java で JBuilder を使わない人はちゃんとそれを実践できるだろうか?
$ java HelloHoge test.hoge
で動くプログラムは
$ jdb HelloHoge test.hoge
> run
でデバッグできる。だがこれだけでは意味がない。
まず、main() にブレークポイントを設定しましょう。
> stop in HelloHoge.main()
> run
なぜかエラーになる。
> stop at HelloHoge:42
> run
こんどはブレークポイントにヒットした。
ちなみに 42 行目は main() 宣言の次の行。
ステップオーバー:
> next
ステップイン:
> step
ステップアウト:
> step up
ステップ**はマイクロソフト用語かも知れない。。
プログラムが終ると
「アプリケーションが存在します」
と表示して jdb が終了する。意味不明。
> stop in Hoge2Hoge.setHoge
あ、いけた。もしや () は不要だったか?
> run
ブレークポイントヒット。
> print hoge
hoge = null
> next
> next
> print hoge
hoge = instance of java.lang.StringBuffer(id=483)
そりゃねーだろ。中身は表示せんのか?
> print hoge.toString()
hoge.toString() = "<hoge hoge="hoge"/>"
そうか、String じゃないからかあ。。
> quit
$ jdb HelloHoge test.hoge
> stop in HelloHoge.main
> run
こんどはうまくいきました。
いずれにせよ、jdb も最低限のデバッグには使えるということが判明。
Vine Linux 2.1.5 + OpenOffice 641d という環境を作ってみた。
日本語フォントが汚いが、OLE も含めて機能はちゃんと使えるし、
MS-Office との互換性も高い(日本語フォント名は変だけど)。
が、問題を見つけてしまった。root でインストールすると一般ユーザで
うまく動かない。一般ユーザでインストールしなおした。かっこわる。
きょうも Relaxer プログラミングの続き。
生成系に使うと new Hoge(), setHoge(), addContent() の羅列。
そういえば昔 C++ で似たようなことをした。
長いだけの単調なコーディング。生成系はしょうがないか。
setContentByString() という逃げ道があるのがいいですね。
先日のリファクタリングの話。
すべてのプログラミングはサンプルコードのリファクタリングである、
と偉そうなことを書いてしまったが、良く考えたら機能をどんどん
変えていくのはリファクタリングとは言わない。
今日見つけた論文:
竹田,大岩:プログラム開発体験に基づくソフトウェア技術者育成カリキュラム,
情報処理学会論文誌, Vol.33, No.7, pp.944-954, July 1992.
「他人のプログラムを使用し、ソースを読んで理解したり、部品を再利用
したり、自分のプロジェクトに合うように変更したりするのも
また重要な技術である」
ということで、これを「漸進的ミニ・プロジェクト」で指導すると良いという
主張なのだが、「サンプルコードのリファクタリング」のような怪しげな
表現でなく、素直に私が言いたかったことはこういうことだったかも。
10年前の論文ですが、ここに書かれたことがちゃんと教育できてない
現場はいまだにたくさんある。
そして、先ほどからふっと気になって jdb をいじっている。
デバッガでステップ実行しないプログラマは怠慢だと
かつて「Writing Solid Code」は言っていた。だから私は gdb を覚えた。
いま Java で JBuilder を使わない人はちゃんとそれを実践できるだろうか?
$ java HelloHoge test.hoge
で動くプログラムは
$ jdb HelloHoge test.hoge
> run
でデバッグできる。だがこれだけでは意味がない。
まず、main() にブレークポイントを設定しましょう。
> stop in HelloHoge.main()
> run
なぜかエラーになる。
> stop at HelloHoge:42
> run
こんどはブレークポイントにヒットした。
ちなみに 42 行目は main() 宣言の次の行。
ステップオーバー:
> next
ステップイン:
> step
ステップアウト:
> step up
ステップ**はマイクロソフト用語かも知れない。。
プログラムが終ると
「アプリケーションが存在します」
と表示して jdb が終了する。意味不明。
> stop in Hoge2Hoge.setHoge
あ、いけた。もしや () は不要だったか?
> run
ブレークポイントヒット。
> print hoge
hoge = null
> next
> next
> print hoge
hoge = instance of java.lang.StringBuffer(id=483)
そりゃねーだろ。中身は表示せんのか?
> print hoge.toString()
hoge.toString() = "<hoge hoge="hoge"/>"
そうか、String じゃないからかあ。。
> quit
$ jdb HelloHoge test.hoge
> stop in HelloHoge.main
> run
こんどはうまくいきました。
いずれにせよ、jdb も最低限のデバッグには使えるということが判明。
jdb More ログイン