{"title":"Cracking the Shell - debugging","link":[{"@attributes":{"rel":"self","type":"application\/atom+xml","href":"https:\/\/walnut356.github.io\/tags\/debugging\/atom.xml"}},{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/walnut356.github.io"}}],"generator":"Zola","updated":"2025-07-07T00:00:00+00:00","id":"https:\/\/walnut356.github.io\/tags\/debugging\/atom.xml","entry":[{"title":"LLDB's TypeSystems Part 2: PDB","published":"2025-07-07T00:00:00+00:00","updated":"2025-07-07T00:00:00+00:00","author":{"name":"\n            \n              Walnut356\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/walnut356.github.io\/posts\/lldbs-typesystems-pt-2\/"}},"id":"https:\/\/walnut356.github.io\/posts\/lldbs-typesystems-pt-2\/","summary":"<p>In my previous post, I described implementing PDB parsing as a can of worms. That might have been a bit of an understatement. PDB has been one \"oh, it's gonna be twice as much work as I thought\" after another. Implementing it has revealed many of the same issues as the <code>TypeSystem<\/code> itself: lack of documentation, cryptic implementations, poor naming schemes, and unclear expectations. Despite all that, I was able to get it working.<\/p>\n<p>That means <code>TypeSystemRust<\/code> can be used for executables that target <code>*-gnu<\/code> or <code>*-msvc<\/code>. It's not quite done yet, but this is a massive step towards the <code>TypeSystem<\/code> being fully complete. I want to talk a bit about the process, at least partially for posterity. As we'll see later, PDB itself is <em>also<\/em> not documented very well, so any additional literature could be helpful to someone down the line.<\/p>\n<p>Fair warning, we're getting into the weeds. This is gonna be a long one.<\/p>"},{"title":"LLDB's TypeSystems: An Unfinished Interface","published":"2025-03-28T00:00:00+00:00","updated":"2025-03-28T00:00:00+00:00","author":{"name":"\n            \n              Walnut356\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/walnut356.github.io\/posts\/lldbs-typesystems-an-unfinished-interface\/"}},"id":"https:\/\/walnut356.github.io\/posts\/lldbs-typesystems-an-unfinished-interface\/","summary":"<p>Well, it's \"done\". <code>TypeSystemRust<\/code> has a <a rel=\"noopener external\" target=\"_blank\" href=\"https:\/\/github.com\/Walnut356\/llvm-project\/tree\/lldbrust\/19.x\">(semi) working prototype for LLDB 19.x<\/a>. It doesn't support expressions or MSVC targets (i.e. PDB debug info), and there are a whole host of catastrophic crashes, but it more or less proves what it needs to: Rust's debugging experience <em>can<\/em> be improved, and there are worthwhile benefits to a working <code>TypeSystem<\/code> that can't be emulated on other layers of the debugging stack.<\/p>\n<p>If you want to test it out, you'll need to build my fork from source (sorry), but then <code>lldb.exe<\/code> can be used as-is, or you can point a debugger extension like lldb-dap or CodeLLDB to your newly built <code>lldb-dap.exe<\/code> or <code>liblldb.dll<\/code> respectively. If you're on Windows, make sure to compile for MSVC otherwise CodeLLDB won't be able to interface with <code>liblldb<\/code> properly.<\/p>"},{"title":"So you want better debug info?","published":"2025-02-14T00:00:00+00:00","updated":"2025-02-14T00:00:00+00:00","author":{"name":"\n            \n              Walnut356\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/walnut356.github.io\/posts\/so-you-want-better-debug-info\/"}},"id":"https:\/\/walnut356.github.io\/posts\/so-you-want-better-debug-info\/","summary":"<p>Let me start with an emphatic <strong>\"me too\"<\/strong>.<\/p>\n<p>I've put many of my side projects on hold because recent events have resulted in, what I consider to be, an unacceptable degredation of the debugging experience. It's a bit hard to focus on whatever I'm doing when I have to fight to figure out what's in a <code>Vec<\/code>. One of the great things about programming is that we're the ones who make our own tools; we don't have to just blindly accept mediocrity.<\/p>"}]}