![Amazon.co.jp: Effective Modern C++ ―C++11/14プログラムを進化させる42項目: Scott Meyers (著), 千住治郎 (翻訳): 本](https://cdn-ak-scissors.b.st-hatena.com/image/square/e4570442e787c6e0fdbe079974082e393efb71fc/height=288;version=1;width=512/https%3A%2F%2Fm.media-amazon.com%2Fimages%2FI%2F51ng4usMVYL._SL500_.jpg)
子供のころからできるだけ手抜きして成果を挙げることだけは長けている山本です。 今回は、C/C++ で作ったプログラムが運用中にクラッシュするときのデバッグ方法のお話しです。 開発中のデバッグは gdb などでソース追いながらデバッグできますが、運用中ですと strip していたり最適化していたりしてデバッグが難しくなります。 そもそも、いきなりクラッシュすると情報が残らずに困ってしまいます。そんなときどうするか。 Step1. スタックトレースを出力する こんな関数を用意しましょう。Linux 以外の人はそれなりに実装してください。 #include <execinfo.h> #include <unistd.h> void dump_stack() { void* bt[100]; int n = backtrace(bt, 100); backtrace_symbols_fd(bt,
とある製品のソースコードを眺めていたときに疑問に思って調べたことをメモします。 C言語で通常、大域変数(グローバル変数)を複数のソースファイルで共有する場合、共通でincludeするヘッダファイルにextern int abc;みたいに書いて、ソースファイルのいずれか1つに実体をint abc;みたいに書くと(私は)思っていたのですが、その製品のソースではヘッダファイルの方にint abc;とあり、各ソースファイルにextern int abc;という風に書かれています。 一瞬、それぞれのモジュール(ソースファイル)に別々の実体が存在するのかな、と思ったのですが、実際のその製品の動きを見てみるとちゃんと変数を共有して使っているようです。 私のいままでの理解が間違っているかもしれないので調べようと思ったのですが、C言語の規約を調べるのも億劫だし、環境依存かもしれないので、とりあえずサンプルを
2009年3月28日 Suns & Moon Laboratory はじめに使い方リポジトリのレイアウト例プロジェクト初期手順注意再配置初期配置タグを付ける為にコピーコピー結果やっぱりapp1/trunkじゃなくて、app1/firm/trunkにしたい2階層ほってコピーしてみる2階層ほってコピーは失敗リポジトリの移行とか特定パスの完全削除インストール(Windowsサーバ)ユーザを追加するリポジトリの作成インストール(Windowsクライアント)インストール(Windowsクライアントにxdocdiff)参考Visual C++ 2005 Express EditionVisual C++ 6.0Borland Developer Studio 2006(Delphi Win32)HEW 4workspaceフォルダprojectフォルダdebugフォルダQuartusIIプロジェクトフ
フルタイムで働きはじめて4ヶ月。 いろんなことがありました。 今日はインターンが来ているということもあり日頃のC++コーディングライフの中で大変重用しているツールを紹介します。といってもどれも有名なツールでググれば解説がでてくるとは思いますので、一言ずつだけ紹介してみます。みなさんも何かよさげなライブラリ・ツールがありましたら教えてください。 - valgrind/callgrind/cachegrind プログラムの実行結果を解析するツール群。まぁ、王道であえて紹介する必要はないかもしいませんが.。valgrindはプログラムのどこかでメモリが漏れているかどうかのチェックに使います.コードのどの部分で確保した領域がどこで漏れているかまで追跡することができます valgrind --leak-check=full command プログラムのどのが計算量的にボトルネックになっているかを調べ
列挙するので,本の良し悪しをコメントしていただけると助かります。 また,持っていていらないという方がいらっしゃいましたら譲っていただきたく。 私の興味のあるキーワードはテンプレート・STL・メタプログラミング・プリプロセッサプログラミング・Boost・関数型プログラミングなど。C++0xにも興味あり。 (大雑把に作ったリストのため,しばらくの間,以下の内容は変更される可能性があります。) 追記: Amazonでぽっちっとしました。あとは届くのを待つのみ。福沢諭吉さんが7名いなくなりました。 買うリスト Accelerated C++―効率的なプログラミングのための新しい定跡 (C++ In Depth Series) Boost C++ Librariesプログラミング C++ Coding Standards―101のルール、ガイドライン、ベストプラクティス (C++ in‐depth
第2回 C++アプリケーションの効率的なテスト手法(CppUnit編):連載 C++開発者のための単体テスト入門(1/4 ページ) 連載目次 前回は単体テストの重要性を示し、従来のC/C++でのテスト手法であるprintf関数やassertマクロを使ったテストを紹介しました。この2つのテスト手法は開発環境(コンパイラとライブラリ)さえあれば利用でき、その使い方も簡単です。しかしながら、いずれも系統立てて、効率よくテストを行うには力不足の感が否めません。 今回は、Visual C++ 2005 Express Editionを含むVisual Studio 2005(以後、VS 2005)で利用できる代表的な単体テスト・フレームワーク(Unit Test Framework)の1つである「CppUnit」を紹介します。 ■単体テスト・フレームワークとは? 前回、「バグは早期発見が望ましい。早
最近 Erlang でコードを書くときにカバレッジをとっている。TDD で開発を進めていて make check するとテストが走る。テスト終了後にブラウザでカバレッジが表示されるようにしてある。カバレッジの重要性はCode Completeを読むとよく分かる。カバレッジをとると安心感が違う。書いたコードの不安な部分(不吉なにおいのする場所)を「テストが実際に実行しているか?」を確認できる。その確認により不安から解放され、目の前のコードに集中できるようになる。しかもカバレッジで判明する実行されていない部分にはたいていバグがある。 さて最近 Mona の安定性を上げるべく色々試しているのだが w3m で多くのサイトを訪れたり、Mosh の起動・終了を繰り返すとカーネル内の malloc が NULL を返す現象に悩まされている。最初はメモリリークしているだけだと思っていたがよく調べてみると、
たとえば、JavaだとAndroid、Google App Engine。あと、期待してるのがGWT。 PythonはGoogle App Engineでたくさんの人が触るようになってると思う。 PHPは、なんだかんだでデザイナに近いところの人には欠かせないだろう。Flashも。 Perlはゲノム系の人は使うんだろう。WebのためにPerlの勉強を始める人というのは、今の時点でもいない気がする。 C#はマイクロソフトの続く限り。C/C++はコンピュータの続く限り。 という感じで考えたときに、既存プロジェクトがRubyで書かれてるとか会社の方針とか、そういうしがらみがないとき、3年後にRubyの勉強を始める人は、何を動機にしてるだろう? あと、Javaに関して、もしGoogleがPythonしかサポートしていない会社だったら、ぼくはJavaを今 積極的に触ってない自信がある。
ここでは、プログラムなどでよく使用されるアルゴリズムについて紹介したいと思います。 元々は、自分の頭の中を整理することを目的にこのコーナーを開設してみたのですが、最近は継続させることを目的に新しいネタを探すようになってきました。まだまだ面白いテーマがいろいろと残っているので、気力の続く限りは更新していきたいと思います。 今までに紹介したテーマに関しても、新しい内容や変更したい箇所などがたくさんあるため、新規テーマと同時進行で修正作業も行なっています。 アルゴリズムのコーナーで紹介してきたサンプル・プログラムをいくつか公開しています。「ライン・ルーチン」「円弧描画」「ペイント・ルーチン」「グラフィック・パターンの処理」「多角形の塗りつぶし」を一つにまとめた GraphicLibrary と、「確率・統計」より「一般化線形モデル」までを一つにまとめた Statistics を現在は用意していま
Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at
電子機器から社会インフラまで、さまざまな製品を支えているソースコード。電子機器が多機能になって便利になる一方で、その元となるソースコードは増大し、複雑になり続けている。 例えば、携帯電話のケースを考えてみよう。この携帯電話の中には、数百万行におよぶプログラムが入っている。その数百万行のコードの中に、たった1行のエラーや脆弱性があるだけで、さまざまな障害を起こす可能性がある。データが消えるような障害であれば、ユーザーに大きな損害を与え、回収作業が発生して社会にも多大な影響を及ぼす。そして、最も大きな損害は企業が信頼を失う点だろう。このような事態を避けるためには、「いかにすばやくソースコードを検証し、効率よくバグや脆弱性をなくしていけるか?」が求められる。 このようなニーズに応え、あらゆる企業のテストに掛かる負担を軽減できるのがcoverityの静的解析ツールだ。その魅力を紹介する。 開発現場
Optimize Your Code: Matrix Multiplication より 結果を見て 「へぇ」 と思ったので紹介。 ところで、このブログの方、Microsoft の C++ Shanghai team のデベロッパと書いてあるけど、Shanghai チームって上海のことなのかな?それともそういうコード名のプロジェクトがある? 紹介してるのは n×n の正方行列の積を求めるコード。 Version 1 はごく普通にループ回して結果を求めるコード。 何の工夫もなし。 Version 2 は内側のループで一時変数を使うようにしたちょっとした改良。 最初これを見たとき 「これくらいはオプティマイザが勝手に最適化してくれるんじゃないかな?」 と思ったんですが、してくれないんですね。 ちゃんと解説が書いてあります。 「”result” が “m1” か “m2” の別名になってる (言
[技術講座] CppUnit 入門 CppUnit 入門 株式会社 オージス総研 オブジェクトテクノロジー・ソリューション部 伊藤 喜一 はじめに CppUnit は C++ の単体テストを自動化するフレームワークです。XP (eXtreme Programming) の提唱者として知られる Kent Beck と、デザインパターンで有名な Erich Gamma が開発した JUnit (Java) を、Michael Feather が C++ に移植したのが最初です。 私が JUnit や CppUnit (xUnit と総称) の存在を知ったのは Martin Fowler の「リファクタリング」からでしたが、読んですぐにぜひ使ってみたいという衝動に駆られました。私が携わっているのは C++ による組込み系のプロジェクトでしたので、早速 CppUnit をダウンロードしたのですが、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く