1

solaris で gdb 6.6 を使用して実行中のプログラムをデバッグしていますが、次のコマンドを発行したにもかかわらず、gdb が (インライン) 関数にステップインすることがあることに気付きました。私の開発ホストは最近、solaris 10 の少し新しいビルドで再インストールされました。ホストが再インストールされる前に、自動ステッピングが存在しなかったことは確かです。コードは makefile と同じオプションでコンパイルされ、すべてのソース コードはホストの再インストール以降変更されていません。

私が確認できるgdbのデバッグ動作に影響を与える設定/新しいデフォルトオプションはありますか? 私のgdbが自動ステップする理由を誰か知っていますか? その痛みは本当に...

明確にするために[編集]:inlineキーワードではなく、ヘッダーファイルに実装されているメソッド/関数を意味していました。例:

header.hpp:
class MyClass
{
   public:
      void someFunc() { ... does something }
}

source.cc:
{
   MyClass instance;

   instance.someFunc();     // doing NEXT in gdb will actually STEP into header.hpp
}
4

1 に答える 1

4

Your new version of Solaris may have included a new version of the C or C++ compiler. The new compiler may be optimizing more aggressively than it did before. Check your optimization flags. If you are using GCC, you can disable inlining with -fno-inline (note that methods that are implemented in the class in header files are inlined by default which can be disabled with -fno-default-inline). If you are using the native Solaris compiler, you will need to check its documentation.

A similar problem was reported here. In the comment, the poster mentioned changing the debug symbol to use STABS resolved the issue.

You mentioned in a comment to my answer that STABS works, but is not acceptable. Also, you mentioned that you are unable to reproduce the issue with a simple example. It will be difficult to trouble shoot this issue if you have to recompile your entire project each time to perform a test. Try to isolate the problem to a few source files in your project. See what they have in common (do they include a common header file, do they use a pragma, are the compilation options a little different from the other source fies, etc.), and try to create a small example with the same problem. This will make it easier to identify the root cause of your issue and determine how to resolve it. Without this data, we are just the blind leading the blind.

于 2012-06-04T08:19:23.537 に答える