[Lldb-commits] [PATCH] D128316: [trace] Add an option to dump instructions in json and to a file
Jakob Johnson via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Wed Jun 22 06:08:59 PDT 2022
jj10306 requested changes to this revision.
jj10306 added a comment.
This revision now requires changes to proceed.
looks great overall, just a couple minor comments!
================
Comment at: lldb/include/lldb/Target/TraceInstructionDumper.h:46
/// state and granularity.
class TraceInstructionDumper {
public:
----------------
nit: wdyt ab renaming this to `TraceInstructionsDumper` since now we have the `TraceInstructionWriter` which is responsible for displaying a single instruction? With how things are currently named it's slightly confusing at first glance because there names sound like they are both doing the same thing (something related to a single instruction).
================
Comment at: lldb/include/lldb/Target/TraceInstructionDumper.h:75
+ /// Indicate a user-level info message. It's not part of the actual trace.
+ virtual void InfoMessage(llvm::StringRef text) = 0;
+
----------------
since the JSON subclass doesn't need to implement this, consider providing a default stubbed out implementation at the super class level so that subclasses aren't necessarily required to implement it?
================
Comment at: lldb/include/lldb/Target/TraceInstructionDumper.h:120-122
+ /// Create an instruction entry for the current position without symbol
+ /// information.
+ InstructionEntry CreateBasicInstructionEntry();
----------------
nit: to be consistent with the `--raw` flag of the `thread trace dump instructions` command which says:
```
-r ( --raw )
Dump only instruction address without disassembly nor symbol information.
```
================
Comment at: lldb/source/Commands/CommandObjectThread.cpp:2210
size_t m_continue;
+ llvm::Optional<FileSpec> m_output_file;
TraceInstructionDumperOptions m_dumper_options;
----------------
Why is this stored on the command object and not the `TraceinstructionDumperOptions`?
Can you explain the separation of responsibility of the dumper options versus the options here?
================
Comment at: lldb/source/Plugins/Trace/intel-pt/TraceCursorIntelPT.cpp:121-122
bool TraceCursorIntelPT::GoToId(user_id_t id) {
if (m_decoded_thread_sp->GetInstructionsCount() <= id)
return false;
m_pos = id;
----------------
nit: maybe use the new `HasId` method here?
================
Comment at: lldb/source/Target/TraceInstructionDumper.cpp:90-91
-void TraceInstructionDumper::DumpInstructionSymbolContext(
- const Optional<InstructionSymbolInfo> &prev_insn,
- const InstructionSymbolInfo &insn) {
- if (prev_insn && IsSameInstructionSymbolContext(*prev_insn, insn))
- return;
+class TraceInstructionWriterCLI
+ : public TraceInstructionDumper::TraceInstructionWriter {
+public:
----------------
Move declarations to header?
================
Comment at: lldb/source/Target/TraceInstructionDumper.cpp:193
+ : m_s(s), m_options(options),
+ m_j(m_s.AsRawOstream(), options.pretty_print_json ? 2 : 0) {
+ m_j.arrayBegin();
----------------
================
Comment at: lldb/source/Target/TraceInstructionDumper.cpp:219-224
+ m_j.attribute("module", GetModuleName(insn));
+ m_j.attribute("symbol",
+ insn.symbol_info->sc.GetFunctionName().AsCString());
+ m_j.attribute("mnemonic", insn.symbol_info->instruction->GetMnemonic(
+ &insn.symbol_info->exe_ctx));
+
----------------
the values being passed to the `attribute` method are c strings. Unsure how this method handles a nullptr, but consider checking if these are nullptr before calling attribute if necessary?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D128316/new/
https://reviews.llvm.org/D128316
More information about the lldb-commits
mailing list