ページ 11

CppUnitを実行時にセグメンテーション違反が発生する

Posted: 2013年1月24日(木) 15:49
by napa
初めまして、初投稿です。
現在CppUnitを使ってユニットテストを行っています。OSはCentOS(64bit)でg++でコンパイルしています。
ですが、あるプログラムだけ実行時にSIGSEGVシグナルが発生し、プログラムが終了してしまいます。
スタックトレースを見ると、

[0]0x00000001
[1]0x7aefbdef
[2]0x00000000

[1]のアドレスはうろ覚えですが、0x01のアドレスで終了してしまっています。
CPPUNIT_MAINに入る前に落ちてしまうので、何が原因なのか全く分かりません。

gdbでデバッグをかけても何が原因で落ちてしまうのか分からず、困っています。
もしこの問題の解決につながるような情報があれば教えていただけないでしょうか。調査方法などでも構いません。
よろしくお願いします。

Re: CppUnitを実行時にセグメンテーション違反が発生する

Posted: 2013年1月25日(金) 07:16
by beatle
「CPPUNIT_MAIN」はただのマクロ名だと思うのですが。
ただのマクロ名だとすると「CPPUNIT_MAINに入る前」が意味不明です。

さて、僕はCppUnitに詳しいわけではないので随分と憶測ですが、
グローバル変数のコンストラクタ内でメモリ関連のエラーが発生しているとかですかね。
エラーが発生する最小限のソースコードを貼り付けていただくと、何か分かるかもしれませんね。

Re: CppUnitを実行時にセグメンテーション違反が発生する

Posted: 2013年1月25日(金) 22:00
by napa
beatleさん

グローバル変数のコンストラクタですか、憶測でも十分ありがたいです。
ソースは手元に無いため残念ながら貼り付けることが出来ませんでした。情報不足で申し訳ないです。

少し調べてみて、共有ライブラリの読込が怪しいというところまで分かりました。
根拠としては、ライブラリを静的リンクした場合はセグメンテーション違反が発生せず、普通に動いたためです。
理由は不明ですが、現時点で動作はするので解決にしておきます。