Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tools/profile: Add additional information to backtrace for -v option #5109

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

ekyooo
Copy link
Contributor

@ekyooo ekyooo commented Sep 16, 2024

Add additional information and change format of backtrace

  • add symbol base offset, dso name
  • symbol and dso info is included if it's available in target binary
  • changed format: ADDR [SYMBOL+OFFSET] (MODULE)

before:

      # ./profile.py
          [unknown]
          _PyDict_GetItem_KnownHash
          [unknown]
          [unknown]
          [unknown]
          [unknown]
          _PyObject_MakeTpCall
          _PyObject_CallFunction_SizeT
          [unknown]
          _PyEval_EvalFrameDefault
          PyEval_EvalCode
          [unknown]
          [unknown]
          _PyRun_SimpleFileObject
          _PyRun_AnyFileObject
          Py_RunMain
          Py_BytesMain
          __libc_start_call_main
          __libc_start_main_impl
          _start
          -                python3 (384002)
              1

          [unknown]
          [unknown]
          [unknown]
          [unknown]
          [unknown]
          [unknown]
          -                gnome-shell (2302)
              1

After:

      # ./profile.py -v
          0xffffffff92d5048e apparmor_file_permission+0x4e
          0xffffffff92d5048e apparmor_file_permission+0x4e
          0xffffffff92cdee66 security_file_permission+0x36
          0xffffffff92ae0177 rw_verify_area+0x47
          0xffffffff92ae2cdb vfs_read+0x7b
          0xffffffff92ae3dd3 ksys_read+0x73
          0xffffffff92ae3e89 __x64_sys_read+0x19
          0xffffffff92606f8a x64_sys_call+0x1ada
          0xffffffff93820daf do_syscall_64+0x7f
          0xffffffff93a00130 entry_SYSCALL_64_after_hwframe+0x78
          0x00007550cbd1ba61 [unknown] [libc.so.6 (deleted)]
          0x00006481674445d8 [unknown] [sshd]
          0x000064816740be42 [unknown] [sshd]
          0x000064816740bb19 [unknown] [sshd]
          0x0000648167448feb [unknown] [sshd]
          0x00006481673dae43 [unknown] [sshd]
          0x00006481673c1641 [unknown] [sshd]
          0x00007550cbc2a1ca [unknown] [libc.so.6 (deleted)]
          -                sshd (383707)
              1

          0x0000775b473f221a [unknown] [libgobject-2.0.so.0.8000.0]
          0x0000775b473fbf14 g_value_transform+0x44 [libgobject-2.0.so.0.8000.0]
          0x0000775b46c270f4 [unknown] [libgjs.so.0.0.0]
          0x0000775b46bfe3e3 [unknown] [libgjs.so.0.0.0]
          0x0000775b43d62369 [unknown] [libmozjs-115.so.115.10.0]
          0xae0a8c7400000000 [unknown]
          0x00007ffea963ff60 [unknown]
          -                gnome-shell (2302)
              1

Add additional information and change format of backtrace
- add symbol base offset, dso name
- symbol and dso info is included if it's available in target binary
- changed format:
ADDR [SYMBOL+OFFSET] (MODULE)

before:
  # ./profile.py
      [unknown]
      _PyDict_GetItem_KnownHash
      [unknown]
      [unknown]
      [unknown]
      [unknown]
      _PyObject_MakeTpCall
      _PyObject_CallFunction_SizeT
      [unknown]
      _PyEval_EvalFrameDefault
      PyEval_EvalCode
      [unknown]
      [unknown]
      _PyRun_SimpleFileObject
      _PyRun_AnyFileObject
      Py_RunMain
      Py_BytesMain
      __libc_start_call_main
      __libc_start_main_impl
      _start
      -                python3 (384002)
          1

      [unknown]
      [unknown]
      [unknown]
      [unknown]
      [unknown]
      [unknown]
      -                gnome-shell (2302)
          1

After:
  # ./profile.py -v
      0xffffffff92d5048e apparmor_file_permission+0x4e
      0xffffffff92d5048e apparmor_file_permission+0x4e
      0xffffffff92cdee66 security_file_permission+0x36
      0xffffffff92ae0177 rw_verify_area+0x47
      0xffffffff92ae2cdb vfs_read+0x7b
      0xffffffff92ae3dd3 ksys_read+0x73
      0xffffffff92ae3e89 __x64_sys_read+0x19
      0xffffffff92606f8a x64_sys_call+0x1ada
      0xffffffff93820daf do_syscall_64+0x7f
      0xffffffff93a00130 entry_SYSCALL_64_after_hwframe+0x78
      0x00007550cbd1ba61 [unknown] [libc.so.6 (deleted)]
      0x00006481674445d8 [unknown] [sshd]
      0x000064816740be42 [unknown] [sshd]
      0x000064816740bb19 [unknown] [sshd]
      0x0000648167448feb [unknown] [sshd]
      0x00006481673dae43 [unknown] [sshd]
      0x00006481673c1641 [unknown] [sshd]
      0x00007550cbc2a1ca [unknown] [libc.so.6 (deleted)]
      -                sshd (383707)
          1

      0x0000775b473f221a [unknown] [libgobject-2.0.so.0.8000.0]
      0x0000775b473fbf14 g_value_transform+0x44 [libgobject-2.0.so.0.8000.0]
      0x0000775b46c270f4 [unknown] [libgjs.so.0.0.0]
      0x0000775b46bfe3e3 [unknown] [libgjs.so.0.0.0]
      0x0000775b43d62369 [unknown] [libmozjs-115.so.115.10.0]
      0xae0a8c7400000000 [unknown]
      0x00007ffea963ff60 [unknown]
      -                gnome-shell (2302)
          1
@Bojun-Seo
Copy link
Contributor

How about change the option name from --verbose to --syms or something else?

verbose is usually used to denote some logs which may useful for developers.
However, the feature in this patch is intended for users, not developers.

@yonghong-song
Copy link
Collaborator

In bcc tools, --verbose is mostly used to print out the eventual bpf prog source. In a few instances, the --verbose is used to print out additional information. I think it is good idea to use an option like -a or --address in this case. We can reserve --verbose for future use.

@ekyooo
Copy link
Contributor Author

ekyooo commented Dec 3, 2024

In bcc tools, --verbose is mostly used to print out the eventual bpf prog source. In a few instances, the --verbose is used to print out additional information. I think it is good idea to use an option like -a or --address in this case. We can reserve --verbose for future use.

@yonghong-song @Bojun-Seo
What do you think about printing additional information in the backtrace by default, without requiring an option?
Many other tools, such as LeakSanitizer, GDB, and Linux provide extra information by default for enhanced usefulness. You can refer to the backtrace of LeakSanitizer in this GitHub comment.
#4288 (comment)

@Bojun-Seo
Copy link
Contributor

It seems more reasonable for me to print additional information in the backtrace by default.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants