diff --git a/buffet/commands/command_dictionary.cc b/buffet/commands/command_dictionary.cc
index 51ffb3d..98ffefc 100644
--- a/buffet/commands/command_dictionary.cc
+++ b/buffet/commands/command_dictionary.cc
@@ -36,7 +36,7 @@
     std::string package_name = package_iter.key();
     const base::DictionaryValue* package_value = nullptr;
     if (!package_iter.value().GetAsDictionary(&package_value)) {
-      chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+      chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                    errors::commands::kTypeMismatch,
                                    "Expecting an object for package '%s'",
                                    package_name.c_str());
@@ -48,7 +48,7 @@
       std::string command_name = command_iter.key();
       if (command_name.empty()) {
         chromeos::Error::AddToPrintf(
-            error, errors::commands::kDomain,
+            error, FROM_HERE, errors::commands::kDomain,
             errors::commands::kInvalidCommandName,
             "Unnamed command encountered in package '%s'",
             package_name.c_str());
@@ -56,7 +56,8 @@
       }
       const base::DictionaryValue* command_value = nullptr;
       if (!command_iter.value().GetAsDictionary(&command_value)) {
-        chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+        chromeos::Error::AddToPrintf(error, FROM_HERE,
+                                     errors::commands::kDomain,
                                      errors::commands::kTypeMismatch,
                                      "Expecting an object for command '%s'",
                                      command_name.c_str());
@@ -71,7 +72,7 @@
       if (!command_value->GetDictionaryWithoutPathExpansion(
           commands::attributes::kCommand_Parameters, &command_schema_def)) {
         chromeos::Error::AddToPrintf(
-            error, errors::commands::kDomain,
+            error, FROM_HERE, errors::commands::kDomain,
             errors::commands::kPropertyMissing,
             "Command definition '%s' is missing property '%s'",
             full_command_name.c_str(),
@@ -93,7 +94,7 @@
         if (!base_def) {
           if (command_name.front() != '_') {
             chromeos::Error::AddToPrintf(
-                error, errors::commands::kDomain,
+                error, FROM_HERE, errors::commands::kDomain,
                 errors::commands::kInvalidCommandName,
                 "The name of custom command '%s' in package '%s'"
                 " must start with '_'",
@@ -105,7 +106,8 @@
 
       auto command_schema = std::make_shared<ObjectSchema>();
       if (!command_schema->FromJson(command_schema_def, base_def, error)) {
-        chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+        chromeos::Error::AddToPrintf(error, FROM_HERE,
+                                     errors::commands::kDomain,
                                      errors::commands::kInvalidObjectSchema,
                                      "Invalid definition for command '%s'",
                                      full_command_name.c_str());
@@ -128,7 +130,7 @@
     auto iter = definitions_.find(pair.first);
     if (iter != definitions_.end()) {
         chromeos::Error::AddToPrintf(
-            error, errors::commands::kDomain,
+            error, FROM_HERE, errors::commands::kDomain,
             errors::commands::kDuplicateCommandDef,
             "Definition for command '%s' overrides an earlier "
             "definition in category '%s'",
diff --git a/buffet/commands/command_instance.cc b/buffet/commands/command_instance.cc
index c83b48a..6cde43e 100644
--- a/buffet/commands/command_instance.cc
+++ b/buffet/commands/command_instance.cc
@@ -63,7 +63,8 @@
                                     &params_value)) {
     // Make sure the "parameters" property is actually an object.
     if (!params_value->GetAsDictionary(&params)) {
-      chromeos::Error::AddToPrintf(error, chromeos::errors::json::kDomain,
+      chromeos::Error::AddToPrintf(error, FROM_HERE,
+                                   chromeos::errors::json::kDomain,
                                    chromeos::errors::json::kObjectExpected,
                                    "Property '%s' must be a JSON object",
                                    commands::attributes::kCommand_Parameters);
@@ -93,7 +94,7 @@
   // Get the command JSON object from the value.
   const base::DictionaryValue* json = nullptr;
   if (!value->GetAsDictionary(&json)) {
-    chromeos::Error::AddTo(error, chromeos::errors::json::kDomain,
+    chromeos::Error::AddTo(error, FROM_HERE, chromeos::errors::json::kDomain,
                            chromeos::errors::json::kObjectExpected,
                            "Command instance is not a JSON object");
     return instance;
@@ -103,7 +104,7 @@
   std::string command_name;
   if (!json->GetStringWithoutPathExpansion(commands::attributes::kCommand_Name,
                                            &command_name)) {
-    chromeos::Error::AddTo(error, errors::commands::kDomain,
+    chromeos::Error::AddTo(error, FROM_HERE, errors::commands::kDomain,
                            errors::commands::kPropertyMissing,
                            "Command name is missing");
     return instance;
@@ -111,7 +112,7 @@
   // Make sure we know how to handle the command with this name.
   const CommandDefinition* command_def = dictionary.FindCommand(command_name);
   if (!command_def) {
-    chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+    chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                  errors::commands::kInvalidCommandName,
                                  "Unknown command received: %s",
                                  command_name.c_str());
@@ -120,7 +121,7 @@
 
   native_types::Object parameters;
   if (!GetCommandParameters(json, command_def, &parameters, error)) {
-    chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+    chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                  errors::commands::kCommandFailed,
                                  "Failed to validate command '%s'",
                                  command_name.c_str());
diff --git a/buffet/commands/object_schema.cc b/buffet/commands/object_schema.cc
index b71b467..41e7639 100644
--- a/buffet/commands/object_schema.cc
+++ b/buffet/commands/object_schema.cc
@@ -64,7 +64,7 @@
   if (PropType::GetTypeFromTypeString(type_name, &type))
     prop = PropType::Create(type);
   if (!prop) {
-    chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+    chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                  errors::commands::kUnknownType,
                                  "Unknown type %s for parameter %s",
                                  type_name.c_str(), prop_name.c_str());
@@ -74,7 +74,7 @@
 
 static bool ErrorInvalidTypeInfo(const std::string& prop_name,
                                  chromeos::ErrorPtr* error) {
-  chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+  chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                errors::commands::kNoTypeInfo,
                                "Unable to determine parameter type for %s",
                                prop_name.c_str());
@@ -100,7 +100,7 @@
     return PropFromJsonObject(prop_name, value, base_schema, properties,
                               error);
   }
-  chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+  chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                errors::commands::kInvalidPropDef,
                                "Invalid parameter definition for %s",
                                prop_name.c_str());
@@ -119,7 +119,7 @@
     return false;
   base::DictionaryValue empty;
   if (!prop->FromJson(&empty, base_schema, error)) {
-    chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+    chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                  errors::commands::kInvalidPropDef,
                                  "Error in definition of property '%s'",
                                  prop_name.c_str());
@@ -179,7 +179,7 @@
   array_object.SetWithoutPathExpansion(commands::attributes::kOneOf_Enum,
                                        list->DeepCopy());
   if (!prop->FromJson(&array_object, base_schema, error)) {
-    chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+    chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                  errors::commands::kInvalidPropDef,
                                  "Error in definition of property '%s'",
                                  prop_name.c_str());
@@ -262,7 +262,7 @@
   if (!prop)
     return false;
   if (!prop->FromJson(dict, base_schema, error)) {
-    chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+    chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                  errors::commands::kInvalidPropDef,
                                  "Error in definition of property '%s'",
                                  prop_name.c_str());
diff --git a/buffet/commands/prop_constraints.cc b/buffet/commands/prop_constraints.cc
index c9008d2..d44700d 100644
--- a/buffet/commands/prop_constraints.cc
+++ b/buffet/commands/prop_constraints.cc
@@ -15,7 +15,7 @@
                                      const std::string& val,
                                      const std::string& limit) {
   chromeos::Error::AddToPrintf(
-      error, errors::commands::kDomain,
+      error, FROM_HERE, errors::commands::kDomain,
       errors::commands::kOutOfRange,
       "Value %s is out of range. It must not be less than %s",
       val.c_str(), limit.c_str());
@@ -26,7 +26,7 @@
                                         const std::string& val,
                                         const std::string& limit) {
   chromeos::Error::AddToPrintf(
-      error, errors::commands::kDomain,
+      error, FROM_HERE, errors::commands::kDomain,
       errors::commands::kOutOfRange,
       "Value %s is out of range. It must not be greater than %s",
       val.c_str(), limit.c_str());
@@ -36,7 +36,7 @@
 bool Constraint::ReportErrorNotOneOf(chromeos::ErrorPtr* error,
                                      const std::string& val,
                                      const std::vector<std::string>& values) {
-  chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+  chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                errors::commands::kOutOfRange,
                                "Value %s is invalid. Expected one of [%s]",
                                val.c_str(),
@@ -84,11 +84,11 @@
   int length = static_cast<int>(str.size());
   if (length < limit_.value) {
     if (limit_.value == 1) {
-      chromeos::Error::AddTo(error, errors::commands::kDomain,
+      chromeos::Error::AddTo(error, FROM_HERE, errors::commands::kDomain,
                              errors::commands::kOutOfRange,
                              "String must not be empty");
     } else {
-      chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+      chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                    errors::commands::kOutOfRange,
                                    "String must be at least %d characters long,"
                                    " actual length of string '%s' is %d",
@@ -116,7 +116,7 @@
   const std::string& str = value.GetString()->GetValue();
   int length = static_cast<int>(str.size());
   if (length > limit_.value) {
-    chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+    chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                  errors::commands::kOutOfRange,
                                  "String must be no more than %d character(s) "
                                  "long, actual length of string '%s' is %d",
diff --git a/buffet/commands/prop_types.cc b/buffet/commands/prop_types.cc
index 08410cc..5a8b10f 100644
--- a/buffet/commands/prop_types.cc
+++ b/buffet/commands/prop_types.cc
@@ -86,7 +86,7 @@
                         const PropType* base_schema,
                         chromeos::ErrorPtr* error) {
   if (base_schema && base_schema->GetType() != GetType()) {
-    chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+    chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                  errors::commands::kPropTypeChanged,
                                  "Redefining a property of type %s as %s",
                                  base_schema->GetTypeAsString().c_str(),
@@ -113,7 +113,7 @@
   while (!iter.IsAtEnd()) {
     std::string key = iter.key();
     if (processed_keys.find(key) == processed_keys.end()) {
-      chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+      chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                    errors::commands::kUnknownProperty,
                                    "Unexpected property '%s'", key.c_str());
       return false;
@@ -218,7 +218,7 @@
 }
 
 bool PropType::GenerateErrorValueTypeMismatch(chromeos::ErrorPtr* error) const {
-  chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+  chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                 errors::commands::kTypeMismatch,
                                 "Unable to convert value to type '%s'",
                                 GetTypeAsString().c_str());
@@ -232,7 +232,7 @@
   const base::ListValue* list = nullptr;
   if (!value->GetListWithoutPathExpansion(commands::attributes::kOneOf_Enum,
                                           &list)) {
-    chromeos::Error::AddTo(error, errors::commands::kDomain,
+    chromeos::Error::AddTo(error, FROM_HERE, errors::commands::kDomain,
                            errors::commands::kTypeMismatch,
                            "Expecting an array");
     return std::shared_ptr<Constraint>();
@@ -426,7 +426,7 @@
     processed_keys->insert(kObject_Properties);
     auto object_schema = std::make_shared<ObjectSchema>();
     if (!object_schema->FromJson(props, base_object_schema.get(), error)) {
-      chromeos::Error::AddTo(error, errors::commands::kDomain,
+      chromeos::Error::AddTo(error, FROM_HERE, errors::commands::kDomain,
                              errors::commands::kInvalidObjectSchema,
                              "Error parsing object property schema");
       return false;
@@ -437,7 +437,7 @@
     object_schema_.value = base_object_schema;
     object_schema_.is_inherited = true;
   } else {
-    chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+    chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                  errors::commands::kInvalidObjectSchema,
                                  "Object type definition must include the "
                                  "object schema ('%s' field not found)",
diff --git a/buffet/commands/schema_utils.cc b/buffet/commands/schema_utils.cc
index 8f64eec..8e83b1c 100644
--- a/buffet/commands/schema_utils.cc
+++ b/buffet/commands/schema_utils.cc
@@ -23,7 +23,7 @@
                             chromeos::ErrorPtr* error) {
   std::string value_as_string;
   base::JSONWriter::Write(value_in, &value_as_string);
-  chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+  chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                errors::commands::kTypeMismatch,
                                "Unable to convert value %s into %s",
                                value_as_string.c_str(), expected_type.c_str());
@@ -42,7 +42,7 @@
 }
 
 bool ErrorMissingProperty(chromeos::ErrorPtr* error, const char* param_name) {
-  chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+  chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                errors::commands::kPropertyMissing,
                                "Required parameter missing: %s", param_name);
   return false;
@@ -129,7 +129,8 @@
       CHECK(dict->GetWithoutPathExpansion(pair.first, &param_value))
           << "Unable to get parameter";
       if (!value->FromJson(param_value, error)) {
-        chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+        chromeos::Error::AddToPrintf(error, FROM_HERE,
+                                     errors::commands::kDomain,
                                      errors::commands::kInvalidPropValue,
                                      "Invalid value for property '%s'",
                                      pair.first.c_str());
@@ -153,7 +154,7 @@
     std::string key = iter.key();
     if (keys_processed.find(key) == keys_processed.end() &&
         !object_schema->GetExtraPropertiesAllowed()) {
-      chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+      chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                    errors::commands::kUnknownProperty,
                                    "Unrecognized parameter '%s'", key.c_str());
       return false;
@@ -166,7 +167,7 @@
     const PropType* prop_type = pair.second->GetPropType();
     CHECK(prop_type) << "Value property type must be available";
     if (!prop_type->ValidateConstraints(*pair.second, error)) {
-      chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+      chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                    errors::commands::kInvalidPropValue,
                                    "Invalid value for property '%s'",
                                    pair.first.c_str());
@@ -249,7 +250,8 @@
       CHECK(prop_type) << "Value property type must be available";
       auto prop_value = PropValueFromDBusVariant(prop_type, it->second, error);
       if (!prop_value) {
-        chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+        chromeos::Error::AddToPrintf(error, FROM_HERE,
+                                     errors::commands::kDomain,
                                      errors::commands::kInvalidPropValue,
                                      "Invalid value for property '%s'",
                                      pair.first.c_str());
@@ -271,7 +273,8 @@
   if (!type->GetObjectSchemaPtr()->GetExtraPropertiesAllowed()) {
     for (const auto& pair : dict) {
       if (keys_processed.find(pair.first) == keys_processed.end()) {
-        chromeos::Error::AddToPrintf(error, errors::commands::kDomain,
+        chromeos::Error::AddToPrintf(error, FROM_HERE,
+                                     errors::commands::kDomain,
                                      errors::commands::kUnknownProperty,
                                      "Unrecognized property '%s'",
                                      pair.first.c_str());
